Login | Register
My pages Projects Community openCollabNet

Discussions > The Developers' mailing list > Aw: [argouml-dev] Some observations on java reverse engineering

argouml
Discussion topic

Back to topic list

Aw: [argouml-dev] Some observations on java reverse engineering

Author thn
Full name Thomas Neustupny
Date 2014-12-17 14:14:25 PST
Message Hi Bob,

here is a first attempt. First, a method call has to be added in the parser java.g, here:

localVariableDeclaration
    : variableModifiers t=type
        {
            // simple dependency algorithm: if t is found in the model,
            // then build a dependency, otherwise ignore
            if (parserMode == MODE_IMPORT_PASS2) {
                getModeller().addCla​ssifierDependency(t)​;
            }
        }
        variableDeclarators["", (short)0, null]
    ;

Then, the method in Modeller.java has to be added, here is a first working version:

    /**
     * Called from the parser to add a dependency to a classifier.
     *
     * @param name The name of the classifier candidate.
     */
    void addClassifierDependency(String name) {
        String classifierName = stripVarargAndGenerics(name);
        Object clientObj = parseState.getClassifier();
        if (clientObj == null) {
            return;
        }
        Object supplierObj = null;
        
        // first try: lookup classifierName in same namespace
        Object ns = Model.getFacade().ge​tNamespace(clientObj​);
        if (ns != null) {
            supplierObj = Model.getFacade().lookupIn(ns, classifierName);
        }

        // second try: lookup in imports
        if (supplierObj == null) {
            String packageName = getPackageName(name);
            // ...
        }
        
        // third try: resolve fully qualified classifier (xxx.yyy.Zzz)
        String packageName = getPackageName(name);
        if (supplierObj == null && packageName.length() > 0) {
            classifierName = this.getClassifierName(name);
            // ...
        }
        
        // finally build the dependency
        if (supplierObj != null) {
            buildDependency(supplierObj, clientObj, null);
        }
    }

I've committed it to the Java module code, feel free to test&experiment. Your example already works with that provided both classes are in the same package.

Regards, 
Thomas 


Gesendet: Montag, 15. Dezember 2014 um 21:32 Uhr
Von: "Thomas Neustupny" <thn-d at gmx dot de>
An: dev at argouml dot tigris dot org
Betreff: Aw: [argouml-dev] Some observations on java reverse engineering
[Sorry for accidently sending in hmtl format, I'm resending it in plain text format]
 

Hi Bob,

this is no malfunction, just a missing feature. The method bodies are completely parsed, but the information in there is not used yet. I want this feature, too, and can assist. I&#39;ve just set up my dev environment (eclipse Luna, Java 1.8, it works well so far).

The component is not generated for each class, but for each compilation unit (.java file), because a file can host more than one class. Also, the imports do not belong to the class, but to the component instance for obvious reasons. It&#39;s a great feature (not by me, I forgot who deserves the honor for that!).

I suggest to identify the lines in java.g, where the type identifier for the associated class/interface can be found and discuss how to process them. The parser has two passes, so we could search the already identified types from the first pass during the second phase.

Regards,
Thomas


14 um 18:07 Uhr<br/>
<b>Von:</b​>&nbsp;&qu​ot;Bob Tarling&quot; &lt;bob.tarling@​gmail.com&gt;​<br/>
<b>An:</b​>&nbsp;dev@argo​uml.tigris.org<br​/>
<b>Betreff:​</b>&nbsp;[ar​gouml-dev] Some observations on java reverse engineering</div>

<div name="quoted-content">
<div>
<div>I&#39;m trying to generate some diagrams from an existing code base at work and I see some issues with the model generated.<br/>
&nbsp;</div>
A simple example is this.

<div><br/>
public class UseTestUtil {<br/>
<br/>
&nbsp;&nbsp;&nbsp; private void test() {<br/>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TestUtil tu = new TestUtil();<br/>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tu.test();<br/>
&nbsp;&nbsp;&nbsp; }<br/>
}<br/>
&nbsp;</div>

<div>I&#39;d expect to see a dependency relationship from UseTestUtil to TestUtil but nothing is generated. Is there some complication with our parser not being able to manage this or is this just an outstanding enhancement.<br/>
&nbsp;</div>

<div>I also notice a component eing generated for every class. WHy is this?<br/>
&nbsp;</div>

<div>Regards<br/>
&nbsp;</div>

<div>Bob<br/>
&nbsp;</div>

<div><br/>
&nbsp;</div>
</div>
</div>
</div>
</div>
</div></div​></body>​</html>

--------------------​--------------------​--------------
http://argouml.tigri​s.org/ds/viewMessage​.do?dsForumId=450​&dsMessageId=309275​2

To unsubscribe from this discussion, e-mail: [dev-unsubscribe@arg​ouml.tigris.org].
To be allowed to post to the list contact the mailing list moderator, email: [linus at tigris dot org]

--------------------​--------------------​--------------
http://argouml.tigri​s.org/ds/viewMessage​.do?dsForumId=450​&dsMessageId=309275​4[http://argouml.tig​ris.org/ds/viewMessa​ge.do?dsForumId=450​&dsMessageId=3092​754]

To unsubscribe from this discussion, e-mail: [dev-unsubscribe@arg​ouml.tigris.org].
To be allowed to post to the list contact the mailing list moderator, email: [linus at tigris dot org]

« Previous message in topic | 4 of 10 | Next message in topic »

Messages

Show all messages in topic

[argouml-dev] Some observations on java reverse engineering bobtarling Bob Tarling 2014-12-14 09:07:25 PST
     Aw: [argouml-dev] Some observations on java reverse engineering thn Thomas Neustupny 2014-12-15 11:53:08 PST
         Aw: [argouml-dev] Some observations on java reverse engineering thn Thomas Neustupny 2014-12-15 12:32:32 PST
             Aw: [argouml-dev] Some observations on java reverse engineering thn Thomas Neustupny 2014-12-17 14:14:25 PST
                 Re: [argouml-dev] Some observations on java reverse engineering bobtarling Bob Tarling 2014-12-18 02:29:36 PST
                     Re: [argouml-dev] Some observations on java reverse engineering tfmorris Tom Morris 2014-12-18 10:38:19 PST
                         Re: [argouml-dev] Some observations on java reverse engineering bobtarling Bob Tarling 2014-12-18 11:25:32 PST
                             Re: [argouml-dev] Some observations on java reverse engineering thn Thomas Neustupny 2014-12-18 12:37:48 PST
                                 Re: [argouml-dev] Some observations on java reverse engineering bobtarling Bob Tarling 2014-12-18 13:44:31 PST
                                     Re: [argouml-dev] Some observations on java reverse engineering bobtarling Bob Tarling 2014-12-18 13:50:35 PST
Messages per page: