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().addClassifierDependency(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().getNamespace(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" <[email protected]>
An: [email protected]
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;&quot;Bob Tarling&quot; &lt;[email protected]&gt;<br/>
<b>An:</b>&nbsp;[email protected]<br/>
<b>Betreff:</b>&nbsp;[argouml-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.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=3092752

To unsubscribe from this discussion, e-mail: 
[[email protected]].
To be allowed to post to the list contact the mailing list moderator, email: 
[[email protected]]

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=3092754[http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=3092754]

To unsubscribe from this discussion, e-mail: 
[[email protected]].
To be allowed to post to the list contact the mailing list moderator, email: 
[[email protected]]

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=450&dsMessageId=3092933

To unsubscribe from this discussion, e-mail: 
[[email protected]].
To be allowed to post to the list contact the mailing list moderator, email: 
[[email protected]]

Reply via email to