sota.lang.java.ast.util
Class JavaASTBuilder

java.lang.Object
  extended by sota.lang.java.ast.util.JavaASTBuilder
All Implemented Interfaces:
IASTBuilder

public class JavaASTBuilder
extends java.lang.Object
implements IASTBuilder

Erstellt für die übergebenen Dateien den AST und verknüpft die Knoten geeignet.


Nested Class Summary
private static class JavaASTBuilder.TermData
          Container für die Sicherung von Typdaten einer Variablen.
 
Field Summary
private  ASTManager ast
           
private  ProjectConfig config
           
private  FileNode currFileNode
           
private static java.util.Stack<JavaASTBuilder.TermData> currStack
           
private static JavaASTBuilder.TermData currTerm
           
private  java.io.FileInputStream input
           
private  JavaJumpManager jm
           
private  int nrAnonymousClasses
           
private  int nrEnteredStatements
           
private  java.util.HashMap<java.lang.String,IScopeNode> scopeMap
           
private  JavaSymbolTable st
           
private  java.util.Stack<ASTNode> stackOfNodes
           
 
Constructor Summary
JavaASTBuilder()
          Konstruktor des JavaASTBuilders
 
Method Summary
 void addFunctionEntryNode(int ln)
          Fügt virtuellen Knoten für den Funktionseingang hinzu.
 void addImportedClass(java.lang.String className)
          Fügt importierte Klasse hinzu.
 void addImportedPackage(java.lang.String packageName)
          Fügt importierte Packages hinzu.
 void addTypeName(java.lang.String typeName)
          Fügt einen Typ hinzu.
 void appendBreak(int ln, java.lang.String s, java.lang.String l)
          Fügt eine Break-Anweisung hinzu.
 JavaASTCaseNode appendCase(int ln, java.lang.String s)
          Fügt ein Default-Case an.
 JavaASTCaseNode appendCase(int ln, java.lang.String s, java.lang.String c)
          Fügt ein normales Case an.
 JavaASTCatchNode appendCatch(int ln, java.lang.String s, java.lang.String e)
          Fügt einen ASTCatchNode ein.
 void appendContinue(int ln, java.lang.String s, java.lang.String l)
          Fügt eine Continue-Anweisung hinzu
 JavaASTCatchNode appendFinally(int ln, java.lang.String s)
          Fügt einen ASTCatchNode für ein Finally ein.
 JavaASTJumpNode appendJump(int ln, java.lang.String s, java.lang.String l)
          Fügt einen Sprung ein.
 void appendLabel(int ln, java.lang.String s, java.lang.String l)
          Fügt ein Label hinzu.
 ASTNode appendNode(int ln)
          Fügt einen virutellen (leeren) ASTNode an.
 ASTNode appendNode(int ln, java.lang.String s)
          Fügt einen nicht-virtuellen ASTNode ein.
 void appendReturn(int ln, java.lang.String s, java.lang.String l)
          Fügt eine Return-Anweisung hinzu.
 JavaASTStatementNode appendStatement(int ln)
          Fügt eine virtuelle Anweisung ein.
 JavaASTStatementNode appendStatement(int ln, java.lang.String s)
          Fügt eine nicht-virtuelle Anweisung ein.
 void appendThrow(int ln, java.lang.String s, java.lang.String l)
          Fügt eine Throw-Anweisung hinzu.
 void appendToType(java.lang.String s)
          Erweitert den aktuellen Typ eines Terms.
 ASTClassNode beginClass(int ln, java.lang.String content, java.lang.String name, java.lang.String extension)
          Beginnt eine neue Klasse.
 JavaASTCompoundNode beginCompound(int ln, java.lang.String s)
          Fügt den Beginn eines Blocks ein.
 void beginDeclaration(java.lang.String t)
          Beginnt eine Typdeklaration.
 JavaASTDoNode beginDoIteration(int ln, java.lang.String s)
          Begint Do-While-Iteration.
 JavaASTIterationNode beginForEachIteration(int ln, java.lang.String s)
          Beginnt eine For-Each-Schleife.
 JavaASTIterationNode beginForIteration(int ln, java.lang.String s, java.lang.String s1, JavaCondition cond, java.lang.String s2)
          Beginnt eine vollständige For-Schleife.
 ASTFunctionNode beginFunction(int ln, java.lang.String content, java.lang.String modifiers, java.lang.String name, java.lang.String arguments)
          Beginnt eine Funktion.
 JavaASTIfNode beginIf(int ln, java.lang.String s, JavaCondition cond)
          Fügt ein If ein.
 JavaASTSwitchNode beginSwitch(int ln, java.lang.String s)
          Beginnt ein Switch.
 JavaASTTryNode beginTry(int ln, java.lang.String s)
          Beginnt Ausnahmebehandlugn.
 JavaASTIterationNode beginWhileIteration(int ln, java.lang.String s, JavaCondition cond)
          Beginnt eine While-Schleife.
 boolean buildAST(ASTManager manager, java.lang.String fileName)
          Erstellt die Knoten für eine Datei im ASTManager.
 java.lang.String checkType(java.lang.String s)
          Sucht vollqualifizierten Typ zu einem Typ.
 void clearTerm()
          Löscht den aktuellen Term.
 void closeScope()
          Schließt einen Scope.
 void endClass()
          Beendet eine Klasse.
 JavaASTCompoundNode endCompound(int ln, java.lang.String s)
          Fügt das Ende eines Blocks ein und verknüpft mit zugehörigen ASTCompoundNode.
 void endDeclaration()
          Beendet eine Typdeklaration.
 JavaASTIterationNode endDoIteration(int ln, java.lang.String s, JavaCondition cond, int endLn)
          Beendet Do-While-Iteration.
 void endFunction(int ln)
          Beendet eine Funktion.
 void endIf(int ln)
          Beendet eine If-Struktur
 void endIteration(int ln)
          Beendet eine Iteration.
 void endSwitch(int ln)
          Beendet Switch-Block
 void endTry(int ln)
          Beendet die Ausnahmebehandlung.
 void enterStatement()
          Zeigt an, dass eine Anweisung begonnen wurde.
 ASTNode getLastNode()
          Liefert den letzten erstellten Knoten.
 java.lang.String getType()
          Liefert den Typ des aktuellen Terms.
 void isInstrumented()
          Setzt die Datei auf instrumentiert.
 void leaveStatement()
          Zeigt das Beenden einer Anweisung an.
 java.lang.String lookUp(java.lang.String s)
          Sucht den Typ für einen String.
 void openPackage(java.lang.String packageName)
          Beginnt ein Package.
 void openScope()
          Öffnet einen anonymen Scope.
 void openScope(java.lang.String s)
          Öffnet einen neuen Scope.
 void restoreTermData()
          Holt TermData vom Stack.
 void setEndOfTryBlock()
          Bestimmt das Ende des Tryblocks.
 void setEntryOfTryBlock(int ln)
          Fügt die einen virtuellen Knoten für den Eintritt in den Try-Blocks ein.
 void setType(java.lang.String s)
          Legt den Typ für den übergebenen Term fest.
 void storeTermData()
          Speichert TermData auf Stack.
private  boolean withinStatement()
          Entscheidet, ob man sich innerhalb einer Anweisung befindet.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ast

private ASTManager ast

config

private ProjectConfig config

currFileNode

private FileNode currFileNode

currStack

private static java.util.Stack<JavaASTBuilder.TermData> currStack

currTerm

private static JavaASTBuilder.TermData currTerm

input

private java.io.FileInputStream input

jm

private JavaJumpManager jm

nrAnonymousClasses

private int nrAnonymousClasses

nrEnteredStatements

private int nrEnteredStatements

scopeMap

private java.util.HashMap<java.lang.String,IScopeNode> scopeMap

st

private JavaSymbolTable st

stackOfNodes

private java.util.Stack<ASTNode> stackOfNodes
Constructor Detail

JavaASTBuilder

public JavaASTBuilder()
Konstruktor des JavaASTBuilders

Method Detail

addFunctionEntryNode

public void addFunctionEntryNode(int ln)
Fügt virtuellen Knoten für den Funktionseingang hinzu.

Parameters:
ln - die Zeilennummer

addImportedClass

public void addImportedClass(java.lang.String className)
Fügt importierte Klasse hinzu.

Parameters:
className - die Klasse

addImportedPackage

public void addImportedPackage(java.lang.String packageName)
Fügt importierte Packages hinzu.

Parameters:
packageName - der PackageName

addTypeName

public void addTypeName(java.lang.String typeName)
Fügt einen Typ hinzu.

Parameters:
typeName - der Name des Typs

appendBreak

public void appendBreak(int ln,
                        java.lang.String s,
                        java.lang.String l)
Fügt eine Break-Anweisung hinzu.

Parameters:
ln - die Zeilennummer
s - der Inhalt
l - das Label

appendCase

public JavaASTCaseNode appendCase(int ln,
                                  java.lang.String s)
Fügt ein Default-Case an.

Parameters:
ln - die Zeilennummer
s - der Inhalt
Returns:
der ASTCaseNode

appendCase

public JavaASTCaseNode appendCase(int ln,
                                  java.lang.String s,
                                  java.lang.String c)
Fügt ein normales Case an.

Parameters:
ln - die Zeilennummer
s - der Inhalt
c - der Case-Ausdruck
Returns:
der ASTCaseNode

appendCatch

public JavaASTCatchNode appendCatch(int ln,
                                    java.lang.String s,
                                    java.lang.String e)
Fügt einen ASTCatchNode ein.

Parameters:
ln - die Zeilennummer
s - der Inhalt
e - der Case-Ausdruck
Returns:
der ASTCatchNode

appendContinue

public void appendContinue(int ln,
                           java.lang.String s,
                           java.lang.String l)
Fügt eine Continue-Anweisung hinzu

Parameters:
ln - die Zeilennummer
s - der Inhalt
l - das Label

appendFinally

public JavaASTCatchNode appendFinally(int ln,
                                      java.lang.String s)
Fügt einen ASTCatchNode für ein Finally ein.

Parameters:
ln - die Zeilennummer
s - der Inhalt
Returns:
der ASTCatchNode

appendJump

public JavaASTJumpNode appendJump(int ln,
                                  java.lang.String s,
                                  java.lang.String l)
Fügt einen Sprung ein.

Parameters:
ln - die Zeilennummer
s - der Inhalt
l - das Label
Returns:
der ASTJumpNode

appendLabel

public void appendLabel(int ln,
                        java.lang.String s,
                        java.lang.String l)
Fügt ein Label hinzu.

Parameters:
ln - die Zeilennummer
s - der Inhalt
l - das Label

appendNode

public ASTNode appendNode(int ln)
Fügt einen virutellen (leeren) ASTNode an.

Parameters:
ln - die Zeilennummer
Returns:
der erstellte ASTNode

appendNode

public ASTNode appendNode(int ln,
                          java.lang.String s)
Fügt einen nicht-virtuellen ASTNode ein.

Parameters:
ln - die Zeilennummer
s - der Inhalt des Strings
Returns:
der erstellte ASTNode

appendReturn

public void appendReturn(int ln,
                         java.lang.String s,
                         java.lang.String l)
Fügt eine Return-Anweisung hinzu.

Parameters:
ln - die Zeilennummer
s - der Inhalt
l - das Label

appendStatement

public JavaASTStatementNode appendStatement(int ln)
Fügt eine virtuelle Anweisung ein.

Parameters:
ln - die Zeilennummer
Returns:
der ASTStatementNode

appendStatement

public JavaASTStatementNode appendStatement(int ln,
                                            java.lang.String s)
Fügt eine nicht-virtuelle Anweisung ein.

Parameters:
ln - die Zeilennummer
s - der Inhalt
Returns:
der ASTStatementNode

appendThrow

public void appendThrow(int ln,
                        java.lang.String s,
                        java.lang.String l)
Fügt eine Throw-Anweisung hinzu.

Parameters:
ln - die Zeilennummer
s - der Inhalt
l - das Geworfene

appendToType

public void appendToType(java.lang.String s)
Erweitert den aktuellen Typ eines Terms.

Parameters:
s - die Erweiterung (z.b.: [])

beginClass

public ASTClassNode beginClass(int ln,
                               java.lang.String content,
                               java.lang.String name,
                               java.lang.String extension)
Beginnt eine neue Klasse.

Parameters:
ln - die Zeilennummer
content - der Inhalt
name - der Name
extension - die Superklasse
Returns:
der ASTClassNode

beginCompound

public JavaASTCompoundNode beginCompound(int ln,
                                         java.lang.String s)
Fügt den Beginn eines Blocks ein.

Parameters:
ln - die Zeilennummer
s - der Inhalt
Returns:
der ASTCompoundNode

beginDeclaration

public void beginDeclaration(java.lang.String t)
Beginnt eine Typdeklaration.

Parameters:
t - der Typ

beginDoIteration

public JavaASTDoNode beginDoIteration(int ln,
                                      java.lang.String s)
Begint Do-While-Iteration.

Parameters:
ln - die Zeilennummer
s - der Inhalt
Returns:
der ASTDoNode

beginForEachIteration

public JavaASTIterationNode beginForEachIteration(int ln,
                                                  java.lang.String s)
Beginnt eine For-Each-Schleife.

Parameters:
ln - die Zeilennummer
s - der Inhalt
Returns:
der ASTIterationNode

beginForIteration

public JavaASTIterationNode beginForIteration(int ln,
                                              java.lang.String s,
                                              java.lang.String s1,
                                              JavaCondition cond,
                                              java.lang.String s2)
Beginnt eine vollständige For-Schleife.

Parameters:
ln - die Zeilennummer
s - der Inhalt
s1 - der For-Init-Ausdruck
cond - die Bedingung
s2 - der For-Update-Ausdruck
Returns:
der ASTIterationNode

beginFunction

public ASTFunctionNode beginFunction(int ln,
                                     java.lang.String content,
                                     java.lang.String modifiers,
                                     java.lang.String name,
                                     java.lang.String arguments)
Beginnt eine Funktion.

Parameters:
ln - die Zeilennummer
content - der Inhalt
modifiers - die Modifiers der Definition.
name - der Name der Funktion
arguments - die Argumente der Funktion
Returns:
der ASTFunctionNode

beginIf

public JavaASTIfNode beginIf(int ln,
                             java.lang.String s,
                             JavaCondition cond)
Fügt ein If ein.

Parameters:
ln - die Zeilennummer
s - der Inhalt
cond - die Bedingung
Returns:
der ASTIfNode

beginSwitch

public JavaASTSwitchNode beginSwitch(int ln,
                                     java.lang.String s)
Beginnt ein Switch.

Parameters:
ln - die Zeilennummer
s - der Ausdruck im Switch
Returns:
der ASTSwitchNode

beginTry

public JavaASTTryNode beginTry(int ln,
                               java.lang.String s)
Beginnt Ausnahmebehandlugn.

Parameters:
ln - die Zeilennummer
s - der Inhalt
Returns:
der ASTTryNode

beginWhileIteration

public JavaASTIterationNode beginWhileIteration(int ln,
                                                java.lang.String s,
                                                JavaCondition cond)
Beginnt eine While-Schleife.

Parameters:
ln - die Zeilennummer
s - der Inhalt
cond - die Bedingung
Returns:
der ASTIterationNode

buildAST

public boolean buildAST(ASTManager manager,
                        java.lang.String fileName)
Description copied from interface: IASTBuilder
Erstellt die Knoten für eine Datei im ASTManager.

Specified by:
buildAST in interface IASTBuilder
Parameters:
manager - der ASTManager
fileName - die Datei
Returns:
true, wenn erfolgreich, sonst false

checkType

public java.lang.String checkType(java.lang.String s)
Sucht vollqualifizierten Typ zu einem Typ. (ungenutzt)

Parameters:
s - der zu untersuchende Typ
Returns:
der vollqualifizierte Typ oder null

clearTerm

public void clearTerm()
Löscht den aktuellen Term.


closeScope

public void closeScope()
Schließt einen Scope.


endClass

public void endClass()
Beendet eine Klasse.


endCompound

public JavaASTCompoundNode endCompound(int ln,
                                       java.lang.String s)
Fügt das Ende eines Blocks ein und verknüpft mit zugehörigen ASTCompoundNode.

Parameters:
ln - die Zeilennummer
s - der Inhalt
Returns:
der ASTCompoundNode

endDeclaration

public void endDeclaration()
Beendet eine Typdeklaration.


endDoIteration

public JavaASTIterationNode endDoIteration(int ln,
                                           java.lang.String s,
                                           JavaCondition cond,
                                           int endLn)
Beendet Do-While-Iteration.

Parameters:
ln - die Zeilennummer
s - der Inhalt
cond - die Bedingung
endLn - die Zeilennummer des Endes
Returns:
der ASTIterationNode

endFunction

public void endFunction(int ln)
Beendet eine Funktion.

Parameters:
ln - die Zeilennummer

endIf

public void endIf(int ln)
Beendet eine If-Struktur

Parameters:
ln - die Zeilennummer

endIteration

public void endIteration(int ln)
Beendet eine Iteration.

Parameters:
ln - die Zeilennummer

endSwitch

public void endSwitch(int ln)
Beendet Switch-Block

Parameters:
ln - die Zeilennummer

endTry

public void endTry(int ln)
Beendet die Ausnahmebehandlung.

Parameters:
ln - die Zeilennummer

enterStatement

public void enterStatement()
Zeigt an, dass eine Anweisung begonnen wurde.


getLastNode

public ASTNode getLastNode()
Liefert den letzten erstellten Knoten.

Returns:
der letzte erstellte Knoten

getType

public java.lang.String getType()
Liefert den Typ des aktuellen Terms.

Returns:
der Typ

isInstrumented

public void isInstrumented()
Setzt die Datei auf instrumentiert.


leaveStatement

public void leaveStatement()
Zeigt das Beenden einer Anweisung an.


lookUp

public java.lang.String lookUp(java.lang.String s)
Sucht den Typ für einen String. (ungenutzt)

Parameters:
s - der Ausdruck
Returns:
der Typ oder null

openPackage

public void openPackage(java.lang.String packageName)
Beginnt ein Package.

Parameters:
packageName - der Packagename

openScope

public void openScope()
Öffnet einen anonymen Scope.


openScope

public void openScope(java.lang.String s)
Öffnet einen neuen Scope.

Parameters:
s - der Scopename

restoreTermData

public void restoreTermData()
Holt TermData vom Stack.


setEndOfTryBlock

public void setEndOfTryBlock()
Bestimmt das Ende des Tryblocks.


setEntryOfTryBlock

public void setEntryOfTryBlock(int ln)
Fügt die einen virtuellen Knoten für den Eintritt in den Try-Blocks ein.

Parameters:
ln - die Zeilennummer

setType

public void setType(java.lang.String s)
Legt den Typ für den übergebenen Term fest.

Parameters:
s - die Variable

storeTermData

public void storeTermData()
Speichert TermData auf Stack.


withinStatement

private boolean withinStatement()
Entscheidet, ob man sich innerhalb einer Anweisung befindet.

Returns:
wahr, wenn innerhalb einer Anweisung, sonst false