= Java Discoverer  =

The goal of the Java Discoverer plug-in is to allow practical extractions of Java models from Java projects. 

''Quality disclaimer: this Java Discoverer was tested on projects of varied sizes: see the [java_discoverer_benchmark/user.html Java discoverer benchmark].''

=== Description  ===

This plug-in aims at analyzing Java source code compliant with version 3 of "Java Language Specification" from Sun Microsystems and providing a model describing the information found, conforming to the [../java_metamodel/user.html Java metamodel]. 

A Java model contains the full abstract syntax tree of the Java program: each statement such as attribute definition, method invocation or loop is described. In addition, links between elements are resolved (by resolved link we mean for instance a link between a method invocation and the declaration of this method, or between the usage of a variable and its declaration). The model can thus be seen as an abstract syntax graph (ASG). 

=== User manual  ===

The plug-in provides the user with a contextual menu to easily create models. 

By right-clicking on a Java Project in the Eclipse Package Explorer view, you can quickly create the Java model of your application (see next Figure). 

[[Image:../../img/MoDisco_DiscoverJavaProject_Menu.png|frame|center|Menus in Eclipse to create model from source code]] 

A discovery parameters dialog opens to let you specify the parameters of the discovery:

[[Image:../../img/MoDisco_Launching_discovery_org.eclipse.modisco.java.discoverer.javaProject.png|frame|center|Discovery parameters dialog]]

* Set '''SERIALIZE_TARGET''' to true if you want to save the model to a file
* You can define '''TARGET_URI''' to the location of a file in your workspace. If it is not defined and SERIALIZE_TARGET is true, a model file will be created in the project.<br>'''Beware: the file will be overwritten if it already exists!'''
* You can filter the classes to analyze using regular expressions, by setting INCLUDED_ELEMENTS_REGEX and/or EXCLUDED_ELEMENTS_REGEX
* You can specify additional dependencies (projects or libraries) that you want to analyze and add to the model, by selecting them in the dialog that opens when you click the '''ELEMENTS_TO_ANALYZE''' parameter:

[[Image:../../img/MoDisco_JavaDiscoverer_ElementsToAnalyze_Dialog.png|frame|center|Choosing the elements to analyze]]

Once launched, a progress dialog will appear as soon as the operation begins. Depending on the size of your application, the reverse engineering process might take some time to complete:

[[Image:../../img/MoDisco_JavaDiscoverer_ProgressDialog.png|frame|center|Progress dialog]]

At the end of the process, the newly created model file is added to the root of your project if you set SERIALIZE_TARGET to true:

[[Image:../../img/MoDisco_Java_Test4javaXMI.png|frame|center|Java model in the package explorer]] 

And the model is opened in the default model browser if you selected '''Open model in editor after discovery''':

[[Image:../../img/MoDisco_Test4JavaXMI_ModelBrowser.png|frame|center|Java model viewed with the MoDisco model browser]] 

The Java XMI files (with a filename ending in "_java.xmi" by convention) can be opened in any model browser:

[[Image:../../img/MoDisco_Test4JavaXMI_OpenWithMenu.png|frame|center|"Open With" on a Java model]]