Status: New
Owner: ----
Labels: Type-Defect Priority-Medium Component-Glamour Milestone-4.4
New issue 542 by tudor.gi...(a)gmail.com: Completion in Glamour text
presentation for Smalltalk
http://code.google.com/p/moose-technology/issues/detail?id=542
The Glamour TextPresentation for Smalltalk should offer completion as well.
HI!
I need some help to show a new property on Moose Panel. For exemple I create
a new method named *newMethod* and I want to compute a number named *
mynumber* (this just a logic fo problem).
Now I need to show this number on Moose Panel like a property, but this
property is not avaiable on the mse file ( I catch it that, in general,
properties showed on Moose Panel have some reference tag on mse file such as
#LOC, #).
So how I can show *mynumber*, computed on my *newMethod*, as a property on
Moose Panel?
Julio
--
View this message in context: http://forum.world.st/Show-a-property-on-Moose-panel-tp3827991p3827991.html
Sent from the Moose mailing list archive at Nabble.com.
I wanted to address the following issue
Look for senders of:
propertySignature
<property: #XXX longName: 'YYY' description: 'ZZZ'>
And replace with:
propertySignature
<MSEProperty: #propertySignature type: #Number>
<MSEComment: 'ZZZ'>
but I do not understand it :(
numberOfMessageSends
<property: #MSG longName: 'Number of message sends' description:
'The number of message from a method'>
^self
lookUpPropertyNamed: #MSG
computedAs:
[self mooseModel isSmalltalk
ifTrue:
[| parser |
parser := VisualWorksParseTreeMetricCalculator new.
parser processMethod: self usingImporter: nil inModel: nil.
parser numberOfMessageSends]
ifFalse: [-1]]
numberOfMessageSends
<MSEProperty: #numberOfMessageSends
<MSEComment: 'Number of message sends' description:
'The number of message from a method'>
^self
lookUpPropertyNamed: #MSG
computedAs:
[self mooseModel isSmalltalk
ifTrue:
[| parser |
parser := VisualWorksParseTreeMetricCalculator new.
parser processMethod: self usingImporter: nil inModel: nil.
parser numberOfMessageSends]
ifFalse: [-1]]
How does the system know after that the property is linked with #MSG if MSG is not part
<property: #MSG longName: 'Number of message sends' description: 'The number of message from a method'>
Why do we duplicate the method selector?
why do we create comment as a separate entity. To me it looks like we are looking for complicated queries after.
I still do know how I can get a method containing two tags in one query.
What is the rationale? Why having a comment directly in would be a bad idea.
So guess what? I will wait because fixing the 122 left.
Stef
We have:
-------
MooseEntity is an abstract entity. Entities should subclass this class.
The state instance variable provides a mechanism for extending the state of entities.
Proposition:
----------
MooseEntity is an abstract class that refines MooseElement. Model entities should be instances of subclasses this class.
MooseEntity provides way to add state for model extensions as well as meta information (property and navigation).
For example a package can extend an entity to add more state and such extension should be only visible when the package is loaded.
Any MooseEntiy can extended with property that is described using the FAME meta model.
Here is an example: FAMIXAttribute defined the property AHNL as follow using the pragma
<property:longName:description:>
FAMIXAttribute>>hierarchyNestingLevel
<property: #AHNL longName: 'Attribute hierarchy nesting level'
description: 'The hierarchy nesting level of an attribute.'>
^self
lookUpPropertyNamed: #AHNL
computedAs: [self belongsTo hierarchyNestingLevel]
In addition, any MooseEntity can also be annotated with navigation declarations (which are used by the environment to propose navigation options to the user).
For example, the class FAMIXClass can define the navigation 'Accessor Methods' as follows
FAMIXClass>>accessorMethodsGroup
<navigation: 'Accessor methods'>
^ FAMIXMethodGroup withAll: (self accessorMethods) withDescription: 'Pure accessors in ', self name
The pragma <navigation:> declares that the method accessorMethodsGroup is the method to invoke to get the associated navigation.
The method navigationSelectors (see below) returns the list of methods declaring navigation of a given MooseEntity.
Finally, MooseEntity provides the possibility to add simple annotations (we call properties to avoid clash name with Java annotations),
to any moose model element. For example, a new information can be added to any model entity and it should be accessible. Like for example
a comment. Note that such a solution does not use FAME based description and as such will not appear when we will query the declared properties.
propertyNamed: name
propertyNamed: name put: value
Have a look at the test testProperty for an example of property use.
Some API:
description
returns the description (FAME instance) described the receiver.
allDeclaredProperties
return the properties (FAME instances) that describe the receiver. The properties are defined using <property:longName:description:>.
navigationSelectors
Return the list of methods that support the receiver navigation.
For example FAMIXClass instance can be navigated via #(#outgoingInvocationsGroup #allExternalMultiplications #invokedClasses #allExternalDuplications #clientClasses #invokingClasses #allMultiplications #allInternalDuplications #abstractMethodsGroup #providerClasses #allInternalMultiplications #accessorMethodsGroup #allDuplicatingClasses #incomingAccessesGroup #subclassHierarchyGroup #superclassHierarchyGroup #methodsGroup #withSuperclassHierarchyGroup #withSubclassHierarchyGroup #classes)
Try: FAMIXClass allInstances first navigationSelectors.
allPropertySelectors
Return a dictionary with all properties of the entity, including metamodel properties, metrics, and navigation groups.
Keys are abstract names of properties, values are implementing selectors.
for example: #ATFD -> #numberOfAccessesToForeignData means that ATDF is computed by invoking the method #numberOfAccessesToForeignData.
The state instance variable provides a mechanism for extending the state of entities.
so using MSEProperties how does the system links AFFC to this method?
afferentCoupling
"Afferent coupling for a class group is the number of classes that depend upon this class group"
<property: #AFFC longName: 'Afferent Coupling' description: 'Afferent Coupling of a class group'>
| cgClasses cgTypes |
cgClasses := self allClasses select: [:c | c isInstanceSide].
cgTypes := cgClasses flatCollect: [:c | c allRecursiveTypes].
^ (cgClasses flatCollect: [:aClass | aClass invokingClasses select: [: c | (cgClasses contains: [:each | each = c]) not and: [(cgTypes contains: [:each | each = c]) not and: [c isInstanceSide]]]]) asSet size
We have
MooseElement defines the minimal interface of an entity
Proposition:
MooseElement defines the minimal interface of an entity: any moose entity should answer its mooseID, its mooseName and its mooseModel.
A mooseID is an Integer that uniquely identifies this entity within the entire Moose environment.
It should not change nor be nil.
The mooseModel of an entity is must be an instance of MooseModel. It may be nil if the entity is not part of a model.
Each entity belongs to one and only one model, if an entity has not yet been added to a model or if an entity has been removed from a model
the mooseModel is undefined, that is it may be nil.
An entity mooseName result a string version of the mooseID.
Please comment.
Stef
Hi
I clicked on AllModel classes
click on one entity (a Famix Class)
I selected the [ | ]
there is self....
so I typed self inspect and I get an inspector on nil :(
what is self there?
Stef
We have
FAMIX.Entity extends Moose.Entity
FAMIXEntity is the abstract root class of the FAMIX meta-model entities.
Fields.
/annotationInstances: AnnotationInstance* → annotatedEntity
Proposed new version:
----------------------------------------------------------------------------------------------------------------
FAMIX.Entity extends Moose.Entity
FAMIXEntity is the abstract root class of the FAMIX meta-model entities. Subclasses will represent structural entities
of program: relations, types, functions...
Any FAMIXEntity can be attached properties (declared using <property:longName:description:>), navigation queries using (<navigation:>) and simple state (using propertyAt: and propertyAt:put:).
Such behavior is important for extensibility. It is inherited from Moose.Entity (See MooseEntity).
Fields.
/annotationInstances: AnnotationInstance* → annotatedEntity
-----------------------------------------------------------------------------------------------------------------
Question why FAMIXAnnotationInstance are in Java Package?
Answer because /annotationInstances comes only from Java.
Question: could we tag fields as coming from a specific extension?
annotatedEntity
<MSEProperty: #annotatedEntity type: #FAMIXEntity opposite: #annotationInstances>
^ annotatedEntity
may be this is an opportunity to use <package: 'Java'>
Now how could we get that
<MSEProperty: #annotatedEntity type: #FAMIXEntity opposite: #annotationInstances>
is associated to <package: 'Java'>?