Class ScopeManager
- java.lang.Object
-
- de.fraunhofer.aisec.cpg.passes.scopes.ScopeManager
-
public class ScopeManager extends java.lang.ObjectThe scope manager builds a multitree-structure of scopes associated to a scope. These Scopes capture the are of validity of certain (Variable-, Field-, Record-)declarations but are also used to identify outer scopes that should be target of a jump (continue, break, throw).enterScope(Node) and leaveScope(Node) can be used to enter the Tree of scopes and then sitting at a path, access the currently valid "stack" of scopes.
-
-
Constructor Summary
Constructors Constructor Description ScopeManager()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddBreakStatement(BreakStatement breakStatement)voidaddContinueStatement(ContinueStatement continueStatement)voidaddGlobal(VariableDeclaration global)voidaddLabelStatement(LabelStatement labelStatement)voidaddValueDeclaration(FieldDeclaration fieldDeclaration)voidaddValueDeclaration(FunctionDeclaration functionDeclaration)voidaddValueDeclaration(ParamVariableDeclaration paramDeclaration)voidaddValueDeclaration(VariableDeclaration variableDeclaration)voidconnectToLocal(DeclaredReferenceExpression referenceExpression)voidenterScope(Node nodeToScope)voidenterScopeIfExists(Node nodeToScope)@Nullable CompoundStatementgetCurrentBlock()@Nullable FunctionDeclarationgetCurrentFunction()java.lang.StringgetCurrentNamePrefix()@Nullable RecordDeclarationgetCurrentRecord()ScopegetCurrentScope()@Nullable DeclarationgetDeclarationForName(java.lang.String name)@Nullable ScopegetFirstScopeThat(Scope searchScope, java.util.function.Predicate<Scope> predicate)@Nullable ScopegetFirstScopeThat(java.util.function.Predicate<Scope> predicate)java.lang.StringgetFullNamePrefix()java.util.List<ValueDeclaration>getGlobals()@Nullable LabelStatementgetLabelStatement(java.lang.String labelString)LanguageFrontendgetLang()ScopegetScopeOfStatment(Node node)java.util.List<Scope>getScopesThat(java.util.function.Predicate<Scope> predicate)<T> java.util.List<Scope>getUniqueScopesThat(java.util.function.Predicate<Scope> predicate, java.util.function.Function<Scope,T> uniqueProperty)booleanisBreakable(Scope scope)booleanisContinuable(Scope scope)booleanisInBlock()booleanisInFunction()booleanisInRecord()@Nullable ScopeleaveScope(@NonNull Node nodeToLeave)Remove all scopes above the specified one including the specified one.@Nullable ScopeleaveScopeIfExists(Node nodeToLeave)@Nullable ValueDeclarationresolve(DeclaredReferenceExpression ref)voidsetLang(LanguageFrontend lang)
-
-
-
Method Detail
-
getLang
public LanguageFrontend getLang()
-
setLang
public void setLang(LanguageFrontend lang)
-
isInBlock
public boolean isInBlock()
-
isInFunction
public boolean isInFunction()
-
isInRecord
public boolean isInRecord()
-
getCurrentBlock
public @Nullable CompoundStatement getCurrentBlock()
-
getCurrentFunction
public @Nullable FunctionDeclaration getCurrentFunction()
-
getCurrentRecord
public @Nullable RecordDeclaration getCurrentRecord()
-
getGlobals
public java.util.List<ValueDeclaration> getGlobals()
-
getCurrentScope
public Scope getCurrentScope()
-
addGlobal
public void addGlobal(VariableDeclaration global)
-
enterScopeIfExists
public void enterScopeIfExists(Node nodeToScope)
-
enterScope
public void enterScope(Node nodeToScope)
-
isBreakable
public boolean isBreakable(Scope scope)
-
isContinuable
public boolean isContinuable(Scope scope)
-
leaveScope
public @Nullable Scope leaveScope(@NonNull Node nodeToLeave)
Remove all scopes above the specified one including the specified one.- Parameters:
nodeToLeave- - The scope is defined by its astNode- Returns:
- the scope is returned for processing
-
getFirstScopeThat
public @Nullable Scope getFirstScopeThat(java.util.function.Predicate<Scope> predicate)
-
getFirstScopeThat
public @Nullable Scope getFirstScopeThat(Scope searchScope, java.util.function.Predicate<Scope> predicate)
-
getScopesThat
public java.util.List<Scope> getScopesThat(java.util.function.Predicate<Scope> predicate)
-
getUniqueScopesThat
public <T> java.util.List<Scope> getUniqueScopesThat(java.util.function.Predicate<Scope> predicate, java.util.function.Function<Scope,T> uniqueProperty)
-
addBreakStatement
public void addBreakStatement(BreakStatement breakStatement)
-
addContinueStatement
public void addContinueStatement(ContinueStatement continueStatement)
-
addLabelStatement
public void addLabelStatement(LabelStatement labelStatement)
-
getLabelStatement
public @Nullable LabelStatement getLabelStatement(java.lang.String labelString)
-
addValueDeclaration
public void addValueDeclaration(VariableDeclaration variableDeclaration)
-
addValueDeclaration
public void addValueDeclaration(ParamVariableDeclaration paramDeclaration)
-
addValueDeclaration
public void addValueDeclaration(FieldDeclaration fieldDeclaration)
-
addValueDeclaration
public void addValueDeclaration(FunctionDeclaration functionDeclaration)
-
getCurrentNamePrefix
public java.lang.String getCurrentNamePrefix()
-
getFullNamePrefix
public java.lang.String getFullNamePrefix()
-
resolve
public @Nullable ValueDeclaration resolve(DeclaredReferenceExpression ref)
-
connectToLocal
public void connectToLocal(DeclaredReferenceExpression referenceExpression)
-
getDeclarationForName
public @Nullable Declaration getDeclarationForName(java.lang.String name)
-
-