Ich suche nach einer Bibliothek oder Werkzeugen, die Funktionalität zum Aufbau einer Datenstruktur bieten, mit der ich Variablen- oder Methodendeklarationen finden kann, die in einer Klasse in einem anderen Bereich verwendet werden.Ortungsmethode/Variablendeklaration in Java mit Rascal
Beispielcode:
class A
{
public void methodA()
{
B external = new B();
external.methodB(); // I would like to know the name/location where this method is declared. something like: classB.java ... line 3
}
}
class B
{
public void methodB()
{
}
}`
Wäre Rascal ein guter Kandidat, diese Art von Informationen abzurufen? Ich habe das Tool schon einmal benutzt. Soweit ich weiß, kann ich eine AST erstellen, aber dies wird nicht genügend Informationen enthalten, um den Geltungsbereich bestimmter Variablen/Methoden zu bestimmen. Wenn dies nicht der richtige Kandidat wäre, irgendwelche Ideen zu Alternativen? Meine Liste der Kandidaten, die ich derzeit untersuche, sind: Antlr/symtab; JavaParser/JavaSymbolSolver; Löffel; Schlingel; JDT
Ich habe deine Antwort in meinem eigenen Beispiel ausprobiert, aber einige Dinge sind mir nicht ganz klar. Was hast du in myTree eingegeben und wie funktioniert myTree.decl? Am nähesten kam ich zu Ihrem Beispiel ist [email protected], wobei unit eine compilationUnit ist, die von createAstsFromEclipseProject kommt Mit diesem konnte ich Model @ containment [unit @ decl] Dies scheint zu dem, was Sie oben beschrieben führen. Können Sie vielleicht erklären, warum Sie den Feldoperator (.) I.s.o. die Anmerkungen, die ich verwende. – Patrick
Ich denke, ich verwende den neuesten Continuous Build und Sie verwenden möglicherweise eine ältere stabile Version. Wir haben das M3-Modell kürzlich von der Verwendung von Annotationen in "Keyword-Felder" umgestellt, daher der Wechsel von "@" zu "." – jurgenv