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 class
TypeAnalysis.AddMappingsForArgumentVisitor
(package private) static class
TypeAnalysis.ExpressionToInfer
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<TypeAnalysis.ExpressionToInfer>
_allExpressions
private java.util.Set<Variable>
_allVariables
private java.util.Map<Variable,java.util.List<TypeAnalysis.ExpressionToInfer>>
_assignmentExpressions
private DecompilerContext
_context
private boolean
_doneInitializing
private CoreMetadataFactory
_factory
private java.util.IdentityHashMap<Variable,TypeReference>
_inferredVariableTypes
private boolean
_preserveMetadataGenericTypes
private boolean
_preserveMetadataTypes
private java.util.Map<Variable,java.util.Set<TypeReference>>
_previouslyInferred
private java.util.Set<Variable>
_singleLoadVariables
private java.util.Set<Variable>
_singleStoreVariables
private java.util.Stack<Expression>
_stack
private static int
FLAG_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 TypeReference
adjustType(TypeReference type, int flags)
private boolean
allDone(java.util.List<TypeAnalysis.ExpressionToInfer> expressions)
private boolean
anyDone(java.util.List<TypeAnalysis.ExpressionToInfer> expressions)
private TypeReference
cleanTypeArguments(TypeReference newType, TypeReference alternateType)
private void
createDependencyGraph(Node node)
private TypeReference
doBinaryNumericPromotion(TypeReference type)
private TypeReference
doInferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren, int flags)
private static TypeReference
ensureReferenceType(TypeReference mappedType)
private void
findNestedAssignments(Expression expression, TypeAnalysis.ExpressionToInfer parent)
(package private) static TypeReference
getFieldType(FieldReference field)
private static int
getInformationAmount(TypeReference type)
private void
identifySingleLoadVariables()
private TypeReference
inferBinaryArguments(Expression left, Expression right, TypeReference expectedType, boolean forceInferChildren, TypeReference leftPreferred, TypeReference rightPreferred, int operandFlags)
private TypeReference
inferBinaryExpression(AstCode code, java.util.List<Expression> arguments, int flags)
private TypeReference
inferCall(Expression expression, TypeReference expectedType, boolean forceInferChildren)
private TypeReference
inferDynamicCall(Expression expression, TypeReference expectedType, boolean forceInferChildren)
private TypeReference
inferInitObject(Expression expression, TypeReference expectedType, boolean forceInferChildren, MethodReference operand, java.util.List<Expression> arguments)
private TypeReference
inferTypeForExpression(Expression expression, TypeReference expectedType)
private TypeReference
inferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren)
private TypeReference
inferTypeForExpression(Expression expression, TypeReference expectedType, boolean forceInferChildren, int flags)
private TypeReference
inferTypeForExpression(Expression expression, TypeReference expectedType, int flags)
private TypeReference
inferTypeForVariable(Variable v, TypeReference expectedType)
private TypeReference
inferTypeForVariable(Variable v, TypeReference expectedType, boolean favorExpectedOverActual, int flags)
private TypeReference
inferTypeForVariable(Variable v, TypeReference expectedType, int flags)
private void
inferTypesForVariables(boolean assignVariableTypesBasedOnPartialInformation)
private void
invalidateDependentExpressions(Expression expression, Variable variable)
static boolean
isBoolean(TypeReference type)
private boolean
isSameType(TypeReference t1, TypeReference t2)
private boolean
isSingleStoreBoolean(Variable variable)
private boolean
isThisParameter(Variable variable)
static void
reset(DecompilerContext context, Block method)
static void
run(DecompilerContext context, Block method)
private void
runInference()
private void
runInference(Expression expression)
private void
runInference(Expression expression, int flags)
private boolean
shouldInferVariableType(Variable variable)
private static boolean
shouldResetVariableType(Variable variable, boolean preserveTypesFromMetadata, boolean preserveGenericTypesFromMetadata)
(package private) static TypeReference
substituteTypeArguments(TypeReference type, MemberReference member)
static <T> boolean
trueForAll(java.lang.Iterable<T> sequence, Predicate<T> condition)
private TypeReference
typeWithMoreInformation(TypeReference leftPreferred, TypeReference rightPreferred)
private void
verifyResults()
-
-
-
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)
-
-