Package com.strobel.decompiler.ast
Class TypeAnalysis
- java.lang.Object
-
- com.strobel.decompiler.ast.TypeAnalysis
-
public final class TypeAnalysis extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classTypeAnalysis.AddMappingsForArgumentVisitor(package private) static classTypeAnalysis.ExpressionToInfer
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<TypeAnalysis.ExpressionToInfer>_allExpressionsprivate java.util.Set<Variable>_allVariablesprivate java.util.Map<Variable,java.util.List<TypeAnalysis.ExpressionToInfer>>_assignmentExpressionsprivate DecompilerContext_contextprivate boolean_doneInitializingprivate CoreMetadataFactory_factoryprivate java.util.IdentityHashMap<Variable,TypeReference>_inferredVariableTypesprivate boolean_preserveMetadataGenericTypesprivate boolean_preserveMetadataTypesprivate java.util.Map<Variable,java.util.Set<TypeReference>>_previouslyInferredprivate java.util.Set<Variable>_singleLoadVariablesprivate java.util.Set<Variable>_singleStoreVariablesprivate java.util.Stack<Expression>_stackprivate static intFLAG_BOOLEAN_PROHIBITED
-
Constructor Summary
Constructors Constructor Description TypeAnalysis()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static TypeReferenceadjustType(TypeReference type, int flags)private booleanallDone(java.util.List<TypeAnalysis.ExpressionToInfer> expressions)private booleananyDone(java.util.List<TypeAnalysis.ExpressionToInfer> expressions)private TypeReferencecleanTypeArguments(TypeReference newType, TypeReference alternateType)private voidcreateDependencyGraph(Node node)private TypeReferencedoBinaryNumericPromotion(TypeReference type)private TypeReferencedoInferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren, int flags)private static TypeReferenceensureReferenceType(TypeReference mappedType)private voidfindNestedAssignments(Expression expression, TypeAnalysis.ExpressionToInfer parent)(package private) static TypeReferencegetFieldType(FieldReference field)private static intgetInformationAmount(TypeReference type)private voididentifySingleLoadVariables()private TypeReferenceinferBinaryArguments(Expression left, Expression right, TypeReference expectedType, boolean forceInferChildren, TypeReference leftPreferred, TypeReference rightPreferred, int operandFlags)private TypeReferenceinferBinaryExpression(AstCode code, java.util.List<Expression> arguments, int flags)private TypeReferenceinferCall(Expression expression, TypeReference expectedType, boolean forceInferChildren)private TypeReferenceinferDynamicCall(Expression expression, TypeReference expectedType, boolean forceInferChildren)private TypeReferenceinferInitObject(Expression expression, TypeReference expectedType, boolean forceInferChildren, MethodReference operand, java.util.List<Expression> arguments)private TypeReferenceinferTypeForExpression(Expression expression, TypeReference expectedType)private TypeReferenceinferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren)private TypeReferenceinferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren, int flags)private TypeReferenceinferTypeForExpression(Expression expression, TypeReference expectedType, int flags)private TypeReferenceinferTypeForVariable(Variable v, TypeReference expectedType)private TypeReferenceinferTypeForVariable(Variable v, TypeReference expectedType, boolean favorExpectedOverActual, int flags)private TypeReferenceinferTypeForVariable(Variable v, TypeReference expectedType, int flags)private voidinferTypesForVariables(boolean assignVariableTypesBasedOnPartialInformation)private voidinvalidateDependentExpressions(Expression expression, Variable variable)static booleanisBoolean(TypeReference type)private booleanisSameType(TypeReference t1, TypeReference t2)private booleanisSingleStoreBoolean(Variable variable)private booleanisThisParameter(Variable variable)static voidreset(DecompilerContext context, Block method)static voidrun(DecompilerContext context, Block method)private voidrunInference()private voidrunInference(Expression expression)private voidrunInference(Expression expression, int flags)private booleanshouldInferVariableType(Variable variable)private static booleanshouldResetVariableType(Variable variable, boolean preserveTypesFromMetadata, boolean preserveGenericTypesFromMetadata)(package private) static TypeReferencesubstituteTypeArguments(TypeReference type, MemberReference member)static <T> booleantrueForAll(java.lang.Iterable<T> sequence, Predicate<T> condition)private TypeReferencetypeWithMoreInformation(TypeReference leftPreferred, TypeReference rightPreferred)private voidverifyResults()
-
-
-
Field Detail
-
FLAG_BOOLEAN_PROHIBITED
private static final int FLAG_BOOLEAN_PROHIBITED
- See Also:
- Constant Field Values
-
_allExpressions
private final java.util.List<TypeAnalysis.ExpressionToInfer> _allExpressions
-
_singleStoreVariables
private final java.util.Set<Variable> _singleStoreVariables
-
_singleLoadVariables
private final java.util.Set<Variable> _singleLoadVariables
-
_allVariables
private final java.util.Set<Variable> _allVariables
-
_assignmentExpressions
private final java.util.Map<Variable,java.util.List<TypeAnalysis.ExpressionToInfer>> _assignmentExpressions
-
_previouslyInferred
private final java.util.Map<Variable,java.util.Set<TypeReference>> _previouslyInferred
-
_inferredVariableTypes
private final java.util.IdentityHashMap<Variable,TypeReference> _inferredVariableTypes
-
_stack
private final java.util.Stack<Expression> _stack
-
_context
private DecompilerContext _context
-
_factory
private CoreMetadataFactory _factory
-
_preserveMetadataTypes
private boolean _preserveMetadataTypes
-
_preserveMetadataGenericTypes
private boolean _preserveMetadataGenericTypes
-
_doneInitializing
private boolean _doneInitializing
-
-
Method Detail
-
run
public static void run(DecompilerContext context, Block method)
-
reset
public static void reset(DecompilerContext context, Block method)
-
createDependencyGraph
private void createDependencyGraph(Node node)
-
findNestedAssignments
private void findNestedAssignments(Expression expression, TypeAnalysis.ExpressionToInfer parent)
-
isSingleStoreBoolean
private boolean isSingleStoreBoolean(Variable variable)
-
identifySingleLoadVariables
private void identifySingleLoadVariables()
-
runInference
private void runInference()
-
verifyResults
private void verifyResults()
-
inferTypesForVariables
private void inferTypesForVariables(boolean assignVariableTypesBasedOnPartialInformation)
-
isThisParameter
private boolean isThisParameter(Variable variable)
-
shouldInferVariableType
private boolean shouldInferVariableType(Variable variable)
-
shouldResetVariableType
private static boolean shouldResetVariableType(Variable variable, boolean preserveTypesFromMetadata, boolean preserveGenericTypesFromMetadata)
-
runInference
private void runInference(Expression expression)
-
runInference
private void runInference(Expression expression, int flags)
-
invalidateDependentExpressions
private void invalidateDependentExpressions(Expression expression, Variable variable)
-
inferTypeForExpression
private TypeReference inferTypeForExpression(Expression expression, TypeReference expectedType)
-
inferTypeForExpression
private TypeReference inferTypeForExpression(Expression expression, TypeReference expectedType, int flags)
-
inferTypeForExpression
private TypeReference inferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren)
-
inferTypeForExpression
private TypeReference inferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren, int flags)
-
doInferTypeForExpression
private TypeReference doInferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren, int flags)
-
inferInitObject
private TypeReference inferInitObject(Expression expression, TypeReference expectedType, boolean forceInferChildren, MethodReference operand, java.util.List<Expression> arguments)
-
cleanTypeArguments
private TypeReference cleanTypeArguments(TypeReference newType, TypeReference alternateType)
-
inferBinaryExpression
private TypeReference inferBinaryExpression(AstCode code, java.util.List<Expression> arguments, int flags)
-
inferDynamicCall
private TypeReference inferDynamicCall(Expression expression, TypeReference expectedType, boolean forceInferChildren)
-
inferCall
private TypeReference inferCall(Expression expression, TypeReference expectedType, boolean forceInferChildren)
-
inferTypeForVariable
private TypeReference inferTypeForVariable(Variable v, TypeReference expectedType)
-
inferTypeForVariable
private TypeReference inferTypeForVariable(Variable v, TypeReference expectedType, int flags)
-
inferTypeForVariable
private TypeReference inferTypeForVariable(Variable v, TypeReference expectedType, boolean favorExpectedOverActual, int flags)
-
adjustType
private static TypeReference adjustType(TypeReference type, int flags)
-
doBinaryNumericPromotion
private TypeReference doBinaryNumericPromotion(TypeReference type)
-
inferBinaryArguments
private TypeReference inferBinaryArguments(Expression left, Expression right, TypeReference expectedType, boolean forceInferChildren, TypeReference leftPreferred, TypeReference rightPreferred, int operandFlags)
-
typeWithMoreInformation
private TypeReference typeWithMoreInformation(TypeReference leftPreferred, TypeReference rightPreferred)
-
getInformationAmount
private static int getInformationAmount(TypeReference type)
-
getFieldType
static TypeReference getFieldType(FieldReference field)
-
substituteTypeArguments
static TypeReference substituteTypeArguments(TypeReference type, MemberReference member)
-
isSameType
private boolean isSameType(TypeReference t1, TypeReference t2)
-
anyDone
private boolean anyDone(java.util.List<TypeAnalysis.ExpressionToInfer> expressions)
-
allDone
private boolean allDone(java.util.List<TypeAnalysis.ExpressionToInfer> expressions)
-
trueForAll
public static <T> boolean trueForAll(java.lang.Iterable<T> sequence, Predicate<T> condition)
-
isBoolean
public static boolean isBoolean(TypeReference type)
-
ensureReferenceType
private static TypeReference ensureReferenceType(TypeReference mappedType)
-
-