Java Component Extractor plugin

This plugin is intented to extract component information from Java source code. It is based on Java 1.5 but could be easily compiled with Java 1.6. The plugin is based on JDT parser and Eclipse 3.4.

More details about this plugin can be found in WCRE 2009 tool demo and in this document, lastly contact Jean-Claude.Royer at mines-nantes.fr for more details or questions.

The .jar with javadoc is available and also the sources. This page contains a small documentation, a video can be also downloaded.

The plugin extracts: component and data types, component structures, communications, subtyping, required and provided services. The distinction between component and data type is based on the property of communication integrity, firstly introduced by Luckham et al. and then integrated in the ArchJava language. When launching the component extractor you need to choose one project which is in your running workspace. Then you are able to select the packages you have to process. Finally the plugin allows you to enforce the choice of component and data types. The plugin processes the chosen packages and computes some data types but you can force it to do another hypothesis. This is useful to get some feeling about what could happen in a component-oriented restructuring process.

The resulting information is provided in some textual views when running the extractor.  They are:

Running analysis: This view appears if you replied yes to the "debug mode" question, its provides mored detailed information about the processing.

Final table: The table of information about all type of interest, each entry has the following lines:
<binary name of the type> ==>  is a Component type % if it is a component or a data type
 BINDING: %the type bound to this name
 CLASS? %true or false if an interface
 SUPERCLASS % superclass name
 SUBCLASSES % list of subclasses
 SUBINTERFACES % list of subinterfaces
THESTRUCTURE: % list of typed instance variables
VIEWED= %true or false, it is an internal flag for the processing
CYCLE= % true or false indicates if the structure has cycle or not
PARENT: % list of parent type names for the composition

Note ROOT tag indicates that the type defines a main method.

At the end the following information is reported:

A list of the composite cycles, a list of the shared types, a list of the direct field access, a list of suspect downcast and the extraction of local variables in the main methods.

Boundary analysis: Analyse the communications and show the infractions to boundary, that is communication with components not in the structure

Some information and some metrics: It provides the following information for each component type:
 TYPE: % component type name (binary java name)
      STRUCTURE: % list of subcomponent type names
      PROVIDED: % list of provided services
      REQUIRED: % list of required services
  ENDTYPE

At the end of this view there are some numeric information:

 Total type number: -- Component types number: -- Data types number: --

 Number of classes: -- Number of interfaces: --

 Number of all provided services: -- Number of non Java interface provided services: -- Number of provided constants: -- Number of required services: --

 Number required between component types: --

 Number of subtypes: -- Number of composition: -- Number of channels: --

Additionally two interactive and graphic views are possible. These views can be dynamically configured to show component and/or data types, communications and/or structuration and/or subtyping links. Two graph views are provided: the basic one uses a dynamic layout and the other a radial layout. You should get a view like this with the radial viewer.