Package de.fraunhofer.aisec.cpg.passes
Class TypeResolver
java.lang.Object
de.fraunhofer.aisec.cpg.passes.Pass
de.fraunhofer.aisec.cpg.passes.TypeResolver
- All Implemented Interfaces:
java.util.function.Consumer<TranslationResult>
public class TypeResolver extends Pass
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Set<Type>firstOrderTypesprotected java.util.Map<Type,java.util.List<Type>>typeState -
Constructor Summary
Constructors Constructor Description TypeResolver() -
Method Summary
Modifier and Type Method Description voidaccept(TranslationResult translationResult)Pass on the TypeSystem: Sets RecordDeclaration Relationship from ObjectType to RecordDeclarationprotected voidaddType(Type type)Responsible for storing new types into typeStatevoidcleanup()protected voidensureUniqueSecondaryTypeEdge(de.fraunhofer.aisec.cpg.graph.Node node)ensures that the if a nodes contains secondary type edges, those types are also merged and no duplicate is leftprotected java.util.Set<Type>ensureUniqueSubTypes(java.util.Set<Type> subTypes)protected voidensureUniqueType(de.fraunhofer.aisec.cpg.graph.Node node)voidhandle(de.fraunhofer.aisec.cpg.graph.Node node)Creates the recordDeclaration relationship between ObjectTypes and RecordDeclaration (from the Type to the Class)TypeobtainType(Type type)Ensures that two different Types that are created at different Points are still the same object in order to only store one node into the databaseprotected voidprocessSecondOrderTypes(Type type)Reduce the SecondOrderTypes to store only the unique SecondOrderTypesprotected voidremoveDuplicatesInFields(Type t)Visits all FirstOrderTypes and replace all the fields like returnVal or parameters for FunctionPointertype or Generics for ObjectTypeprotected voidremoveDuplicateTypes()protected voidupdateType(de.fraunhofer.aisec.cpg.graph.Node node, java.util.Collection<Type> types)Methods inherited from class de.fraunhofer.aisec.cpg.passes.Pass
getLang, setLang, supportsLanguageFrontendMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.util.function.Consumer
andThen
-
Field Details
-
firstOrderTypes
-
typeState
-
-
Constructor Details
-
TypeResolver
public TypeResolver()
-
-
Method Details
-
processSecondOrderTypes
Reduce the SecondOrderTypes to store only the unique SecondOrderTypes- Parameters:
type- SecondOrderType that is to be eliminated if an equal is already in typeState or is added if not
-
obtainType
Ensures that two different Types that are created at different Points are still the same object in order to only store one node into the database- Parameters:
type- newly created Type- Returns:
- If the same type was already stored in the typeState Map the stored one is returned. In the other case the parameter type is stored into the map and the parameter type is returned
-
addType
Responsible for storing new types into typeState- Parameters:
type- new type
-
removeDuplicateTypes
protected void removeDuplicateTypes() -
removeDuplicatesInFields
Visits all FirstOrderTypes and replace all the fields like returnVal or parameters for FunctionPointertype or Generics for ObjectType- Parameters:
t- FirstOrderType
-
accept
Pass on the TypeSystem: Sets RecordDeclaration Relationship from ObjectType to RecordDeclaration- Parameters:
translationResult-
-
ensureUniqueSubTypes
-
ensureUniqueType
protected void ensureUniqueType(de.fraunhofer.aisec.cpg.graph.Node node) -
ensureUniqueSecondaryTypeEdge
protected void ensureUniqueSecondaryTypeEdge(de.fraunhofer.aisec.cpg.graph.Node node)ensures that the if a nodes contains secondary type edges, those types are also merged and no duplicate is left- Parameters:
node- implementingHasType.SecondaryTypeEdge
-
updateType
protected void updateType(de.fraunhofer.aisec.cpg.graph.Node node, java.util.Collection<Type> types) -
handle
public void handle(de.fraunhofer.aisec.cpg.graph.Node node)Creates the recordDeclaration relationship between ObjectTypes and RecordDeclaration (from the Type to the Class)- Parameters:
node-
-
cleanup
public void cleanup()
-