Class TypeAnalysis
java.lang.Object
com.strobel.decompiler.ast.TypeAnalysis
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final class(package private) static final class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final List<TypeAnalysis.ExpressionToInfer> private final Map<Variable, List<TypeAnalysis.ExpressionToInfer>> private DecompilerContextprivate booleanprivate CoreMetadataFactoryprivate final IdentityHashMap<Variable, TypeReference> private booleanprivate booleanprivate final Map<Variable, Set<TypeReference>> private final Stack<Expression> private static final int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static TypeReferenceadjustType(TypeReference type, int flags) private booleanallDone(List<TypeAnalysis.ExpressionToInfer> expressions) private booleananyDone(List<TypeAnalysis.ExpressionToInfer> expressions) private TypeReferencecleanTypeArguments(TypeReference newType, TypeReference alternateType) private voidcreateDependencyGraph(Node node) private TypeReferenceprivate 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 intprivate voidprivate TypeReferenceinferBinaryArguments(Expression left, Expression right, TypeReference expectedType, boolean forceInferChildren, TypeReference leftPreferred, TypeReference rightPreferred, int operandFlags) private TypeReferenceinferBinaryExpression(AstCode code, 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, 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 voidprivate 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(Iterable<T> sequence, Predicate<T> condition) private TypeReferencetypeWithMoreInformation(TypeReference leftPreferred, TypeReference rightPreferred) private void
-
Field Details
-
FLAG_BOOLEAN_PROHIBITED
private static final int FLAG_BOOLEAN_PROHIBITED- See Also:
-
_allExpressions
-
_singleStoreVariables
-
_singleLoadVariables
-
_allVariables
-
_assignmentExpressions
-
_previouslyInferred
-
_inferredVariableTypes
-
_stack
-
_context
-
_factory
-
_preserveMetadataTypes
private boolean _preserveMetadataTypes -
_preserveMetadataGenericTypes
private boolean _preserveMetadataGenericTypes -
_doneInitializing
private boolean _doneInitializing
-
-
Constructor Details
-
TypeAnalysis
public TypeAnalysis()
-
-
Method Details
-
run
-
reset
-
createDependencyGraph
-
findNestedAssignments
-
isSingleStoreBoolean
-
identifySingleLoadVariables
private void identifySingleLoadVariables() -
runInference
private void runInference() -
verifyResults
private void verifyResults() -
inferTypesForVariables
private void inferTypesForVariables(boolean assignVariableTypesBasedOnPartialInformation) -
isThisParameter
-
shouldInferVariableType
-
shouldResetVariableType
private static boolean shouldResetVariableType(Variable variable, boolean preserveTypesFromMetadata, boolean preserveGenericTypesFromMetadata) -
runInference
-
runInference
-
invalidateDependentExpressions
-
inferTypeForExpression
-
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, List<Expression> arguments) -
cleanTypeArguments
-
inferBinaryExpression
-
inferDynamicCall
private TypeReference inferDynamicCall(Expression expression, TypeReference expectedType, boolean forceInferChildren) -
inferCall
private TypeReference inferCall(Expression expression, TypeReference expectedType, boolean forceInferChildren) -
inferTypeForVariable
-
inferTypeForVariable
-
inferTypeForVariable
private TypeReference inferTypeForVariable(Variable v, TypeReference expectedType, boolean favorExpectedOverActual, int flags) -
adjustType
-
doBinaryNumericPromotion
-
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
-
getFieldType
-
substituteTypeArguments
-
isSameType
-
anyDone
-
allDone
-
trueForAll
-
isBoolean
-
ensureReferenceType
-