Package proguard.evaluation.executor
Interface Executor
-
- All Known Implementing Classes:
JavaReflectionApiExecutor
,ReflectionExecutor
,ReflectiveModelExecutor
,StringReflectionExecutor
public interface Executor
This abstract class specifies a modular component which can be added to aExecutingInvocationUnit
in order to extend its capabilities. AnExecutor
specifies which method calls it supports, what methods return their own instance and how a method result is calculated.
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static interface
Executor.Builder<T extends Executor>
A builder for the executor.
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description MethodResult
getMethodResult(MethodExecutionInfo methodData, ValueCalculator valueCalculator)
Calculate the result of a given method.java.util.Set<MethodSignature>
getSupportedMethodSignatures()
Get a list of method signatures that indicate which methods are supported by this executor.
-
-
-
Method Detail
-
getMethodResult
MethodResult getMethodResult(MethodExecutionInfo methodData, ValueCalculator valueCalculator)
Calculate the result of a given method. This is the return value for a non-constructor method (null if it returnsvoid ) and the instantiated object for a constructor.- Parameters:
methodData
- Information about the called method.valueCalculator
- a function mapping the result of a method invocation (can be an Object with the result if the executor calculates a real value or aModel
) to the appropriateValue
used by the analysis. Should also be used to create values of unknown value since the executor might be able to provide additional information on them even if the value itself is not known (e.g., on the identifier of the returned value).- Returns:
- The result of the method call, including information on the returned value or values or
arguments on which side effects happened during the method execution. If the executor is
not able to provide any additional information for any reason the returned value should be
MethodResult.invalidResult()
, so that the caller can know that execution failed and just provide its best approximation of the result.
-
getSupportedMethodSignatures
java.util.Set<MethodSignature> getSupportedMethodSignatures()
Get a list of method signatures that indicate which methods are supported by this executor.The returned methods should be exactly the ones that the executor is expected to be able to handle. The invocation unit does not make any additional assumption on the executors available to execute a method and will match them iff the signature of the target method matches exactly.
Only full method signatures should be returned, the invocation unit does not support wildcards.
- Returns:
- a set of methods the executor can handle.
-
-