Class VariableUsageResolver

java.lang.Object
de.fraunhofer.aisec.cpg.passes.Pass
de.fraunhofer.aisec.cpg.passes.VariableUsageResolver
All Implemented Interfaces:
java.util.function.Consumer<TranslationResult>

public class VariableUsageResolver
extends Pass
Creates new connections between the place where a variable is declared and where it is used.

A field access is modeled with a MemberExpression. After AST building, its base and member references are set to DeclaredReferenceExpression stubs. This pass resolves those references and makes the member point to the appropriate FieldDeclaration and the base to the "this" FieldDeclaration of the containing class. It is also capable of resolving references to fields that are inherited from a superclass and thus not declared in the actual base class. When base or member declarations are not found in the graph, a new "inferred" FieldDeclaration is being created that is then used to collect all usages to the same unknown declaration. DeclaredReferenceExpression stubs are removed from the graph after being resolved.

A local variable access is modeled directly with a DeclaredReferenceExpression. This step of the pass doesn't remove the DeclaredReferenceExpression nodes like in the field usage case but rather makes their "refersTo" point to the appropriate ValueDeclaration.

  • Field Summary

    Fields inherited from class de.fraunhofer.aisec.cpg.passes.Pass

    lang
  • Constructor Summary

    Constructors
    Constructor Description
    VariableUsageResolver()  
  • Method Summary

    Modifier and Type Method Description
    void accept​(TranslationResult result)  
    void cleanup()  

    Methods inherited from class de.fraunhofer.aisec.cpg.passes.Pass

    getLang, setLang, supportsLanguageFrontend

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.util.function.Consumer

    andThen
  • Constructor Details

    • VariableUsageResolver

      public VariableUsageResolver()
  • Method Details