Skip to main content
Jump to: navigation, search

Difference between revisions of "MoDisco/Components/Java"

(Zoom on generics)
 
(20 intermediate revisions by 6 users not shown)
Line 1: Line 1:
The Java metamodel : it is the reflection of the Java language, as defined in version 3 of "Java Language Specification" from Sun Microsystems ("JLS3" corresponds to JDK 5).
+
#REDIRECT [[MoDisco/Moved To Help Center]]
 
+
The Java metamodel contains 126 metaclasses.
+
To better understand it, this page will introduce its main features (metaclasses and links).
+
 
+
You could also browse the model definition, java.ecore available in sources (see [[#Install| install section]]).
+
 
+
A good tip is also to see the [http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/dom/package-summary.html javadoc] associated to the metamodel implemented by the Eclipse team in the [[JDT| JDT (Java Development Tool)]] project. This metamodel and Java are very similar.
+
 
+
 
+
== Main metaclasses ==
+
 
+
=== ASTNode ===
+
 
+
Every metaclass (apart from the '''Model''' metaclass) inherits from ASTNode.
+
As its name indicates, ASTNode represents a graph node.
+
ASTNode has a reference to the Comment metaclass because almost every java element could be associated to a comment (block or line comment and Javadoc). More details in [[#Zoom on comments| "Comment" section]].
+
 
+
[[Image:MoDisco-Java metaclass ASTNode.png|frame|center|ASTNode metaclass]]
+
 
+
=== Model, Package, AbstractTypeDeclaration ===
+
 
+
The root element of each Java model is an instance of the "Model" metaclass. It is a translation of java application concept, so it contains package declarations (instances of the Package metaclass). And package declarations contain type declarations (instances compatible with AbstractTypeDeclaration metaclass), and so on ...
+
 
+
[[Image:MoDisco-Java metaclass Model Package.jpg|frame|center|Model, Package & type declaration superclass]]
+
 
+
=== NamedElement & notion of Proxy ===
+
 
+
A lot of java elements are "named", and this name could be considered as an identifier : methods, packages, types, variables, fields, ...
+
So all the corresponding metaclasses inherit from the NamedElement metaclass. It will be useful to resolve references in binding, see the [[#NamedElementRef|NamedElementRef]] metaclass.
+
 
+
Another goal of this metaclass is to indicate whether an element is part of the current Java application or not (element from an external library of from the JDK). Then external elements are tagged as proxy through a dedicated attribute and can be easily filtered.
+
For example, instruction "System.out.println" has been decomposed into three named elements (one class, one variable and one method) the definitions of which are not part of the current Java application. So attribute "proxy" of these elements has been initialized as true.
+
 
+
[[Image:MoDisco-Java metaclass NamedElement and its hierarchy.png|frame|center|NamedElement and its hierarchy]]
+
 
+
=== TypeAccess, PackageAccess, SingleVariableAccess, UnresolvedItemAccess ===
+
 
+
To represent links between Java elements, metaclasses TypeAccess, PackageAccess, SingleVariableAccess and UnresolvedItemAccess were introduced. Each allows to navigate directly to a NamedElement (proxy or not) in the graph.
+
 
+
[[Image:MoDisco-Java metaclass TypeAccess.png|center|frame|TypeAccess]]
+
 
+
[[Image:MoDisco-Java metaclass PackageAccess.png|center|frame|PackageAccess]]
+
 
+
[[Image:MoDisco-Java metaclass SingleVariableAccess.png|center|frame|SingleVariableAccess]]
+
 
+
On the contrary, references to methods are direct.
+
[[Image:MoDisco-Java metaclass MethodDeclaration MethodInvocation.png |frame|center|MethodInvocation]]
+
 
+
=== BodyDeclaration ===
+
 
+
A type declaration has different kinds of contents : fields, methods, static block, initialization block or other type declarations. All of these elements are of type BodyDeclaration metaclass.
+
 
+
[[Image:MoDisco-J2SE5 metaclass BodyDeclaration and its hierarchy.jpg|frame|center|BodyDeclaration and its hierarchy]]
+
 
+
=== Expressions ===
+
 
+
Like in many languages, the concept of expression exists in Java : it is a portion of code, without declarations, and its evaluation returns a value, numerical or boolean or other ...
+
For example, <source lang="java">++i</source> is an expression and it will be translated to the concept of PrefixExpression metaclass.
+
All types of expressions shall inherit from Expression metaclass.
+
 
+
[[Image:MoDisco-J2SE5 metaclass Expression and its hierarchy.jpg|frame|center|Expression and its hierarchy]]
+
 
+
=== Statements ===
+
 
+
An "instruction" in Java is represented by the Statement metaclass. A block of code (Block metaclass) contains a collection of statements, an a block of code may be contained by a method.
+
Some examples of statements in java : <source lang="java">if, while, for, do, ...</source>
+
All of their definitions use the concept of expression to separate the value from the instruction keyword.
+
 
+
[[Image:MoDisco-J2SE5 metaclass Statement and its hierarchy.jpg|frame|center|Statement and its hierarchy]]
+
 
+
=== Zoom on comments ===
+
 
+
There are three kinds of comments : line comments (//), block comments (/* */) and javadoc comments (/** */).
+
Every comment contains text fragments, but we can have more information on javadoc comments (Javadoc metaclass): they can also contain javadoc tags that are identified and collected through instances of the TagElement metaclass.
+
 
+
[[Image:MoDisco-J2SE5 metaclass Comment and its hierarchy.jpg|frame|center|Comment and its hierarchy]]
+
 
+
=== Zoom on annotations ===
+
 
+
Official usage of annotations has been introduced in version 5 of the JDK.
+
To handle them, annotation declarations are managed as type declarations (AnnotationTypeDeclaration metaclass) with specific attributes (AnnotationTypeMemberDeclaration metaclass).
+
And annotation usages are translated into instances of the Annotation metaclass, which reference corresponding annotation declarations. And parameters are translated into instances of the MemberValuePair metaclass.
+
 
+
[[Image:MoDisco-J2SE5 metaclass AnnotationTypeDeclaration and Annotation.jpg|frame|center|Annotation]]
+
 
+
=== Zoom on generics ===
+
 
+
Version 5 of the JDK also introduces the concept of "generics".
+
Generic types of method declarations are translated into instances of TypeDeclaration of MethodDeclaration metaclass with arguments as instances of the TypeParameter metaclass.
+
Uses of these generics are translated into instances of the ParameterizedType metaclass which reference concrete elements (type and types arguments).
+
 
+
A specific case of type argument is the "wildcard" (for example <? extends X>. There is a specific metaclass to handle it : WildCardType.
+
 
+
[[Image:MoDisco-Java generics declarations and usages.png|frame|center|Generics]]
+
 
+
== Requirements ==
+
 
+
To use the plug-in you need:
+
* JDK 1.5 or above
+
* a version of Eclipse 3.3 or above with the following set of plug-ins installed
+
:* [[EMF|EMF]] 2.3.0 or higher
+
 
+
 
+
== Team ==
+
Gabriel Barbier ([http://www.mia-software.com Mia-Software])
+
 
+
Fabien Giquel ([http://www.mia-software.com Mia-Software])
+
 
+
Frédéric Madiot ([http://www.mia-software.com Mia-Software])
+
 
+
== Install ==
+
 
+
You will find a version of this plug-in attached in [https://bugs.eclipse.org/bugs/show_bug.cgi?id=258281 the following bug].
+
 
+
As IP review of this plug-in is not finished, here are installation instructions :
+
 
+
* Extract archive file in your Eclipse workspace, then use "import" menu to import this project.
+
* Use "export" menu to export this project as a plug-in (Deployable plug-ins and fragments) in your Eclipse installation. Don't forget to choose "Package plug-ins as individual jar archives" option.
+
* Re-start your Eclipse to take this plug-in into account
+
 
+
== Associated Discoverers ==
+
 
+
The main discoverer available for this metamodel : [[MoDisco/JavaDiscoverer|JavaDiscoverer]]
+
 
+
Another project also exists which produces a very similar model of Java applications : [http://www.eclipse.org/gmt/modisco/toolBox/JavaAbstractSyntax JavaAST]
+
I hope these two discoverers will be merged in the future.
+

Latest revision as of 11:20, 2 April 2012

  1. REDIRECT MoDisco/Moved To Help Center

Back to the top