<?xml version="1.0" standalone="no"?>

<!DOCTYPE Plugin SYSTEM "http://www.upb.de/cs/fujaba/DTDs/Plugin.dtd">

<Plugin pluginClass="de.upb.javaparser.JavaParserPlugin">

  <Name>JavaParser</Name>

  <Version major="3" minor="1" build="5"/>

  <PluginLib>JavaParser.jar</PluginLib>

  <Source>http://www.uni-paderborn.de/cs/fujaba/downloads/plugins/JavaParser/3_1/JavaParser.zip</Source>

  <Kernel major="4" minor="3" revision="2"/>

  <RequiredPlugins>
    <PluginId pluginClass="de.upb.javaast.JavaASTPlugin" major="1" minor="3"/>
  </RequiredPlugins>

  <Description>

     <ShortDescription>A parser for JAVA source files.</ShortDescription>

     <DetailedDescription>
       This plugin includes a parser for Java 1.4 source files. The current grammar
       is the java1_4c grammar, which is the official grammar for the Java 1.4 syntax.
       The parser is generated using the Java Compiler Compiler (JavaCC) and the Java
       Tree Builder (JTB). Before the JavaCC generates the parser, the JTB library
       adds a generic back-end to the grammar. In parallel to the back-end, JTB
       generates classes for all grammar rules. Object instances of the generated
       classes are the abstract syntax graph nodes of an actual parsed Java program.
       Such an approach of generating back-ends automatically allows us to easily
       exchange the grammar when new syntax elements are incorporated in Java.
       Unfortunately, abstract syntax trees could become very large, e.g. when
       analysing programs. Therefore, we adapted the grammar in such a way that
       method bodies are not parsed in abstract syntax tree nodes but remain as
       text. This approach reduces the number of nodes significantly. In order to
       parse also method bodies when needed, we have enhanced the parser by allowing
       parsing single method bodies and not only whole files or classes.
       In addition to the parser, this plugin also includes a rudimentary implementation
       of association recovery based on naming conventions and predefined container
       classes. This functionality was integrated in order to use libraries, which are
       produced according to the Fujaba style guide. In order to instanciate objects and
       links of classes and associations from a library, Fujaba needs information about
       the classes signature and association types. Such information can be produced by
       parsing the library and detect the associations. Since the method bodies are not
       parsed in general but whenever needed, the produced class diagram of the library
       is not very large. For example, parsing Fujaba's sources needs something about
       5-7 MB memory; parsing also method bodies you will need approximately 1 GB memory.   
     </DetailedDescription>

     <Vendor>University of Paderborn</Vendor>

     <Contact>mailto:lowende@upb.de</Contact>

   </Description>

</Plugin>
