trait PerformInvocations extends MethodCallsHandling
Mix in this trait if methods that are called by invokeXYZ
instructions should
actually be interpreted using a custom domain.
- Self Type
- PerformInvocations with ValuesFactory with ReferenceValuesDomain with Configuration with TheProject with TheCode
- Source
- PerformInvocations.scala
- Alphabetic
- By Inheritance
- PerformInvocations
- MethodCallsHandling
- MethodCallsDomain
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- abstract type CalledMethodDomain <: TargetDomain with MethodCallResults
- type MethodCallResult = Computation[(PerformInvocations.this)#DomainValue, (PerformInvocations.this)#ExceptionValues]
- Definition Classes
- MethodCallsDomain
Abstract Value Members
- abstract def calledMethodAI: AI[_ >: (PerformInvocations.this)#CalledMethodDomain]
The abstract interpreter that will be used for the abstract interpretation.
- abstract def calledMethodDomain(method: Method): (PerformInvocations.this)#CalledMethodDomain
The domain that will be used to perform the abstract interpretation of the called method.
The domain that will be used to perform the abstract interpretation of the called method.
In general, explicit support is required to identify recursive calls if the domain also follows method invocations.
- Attributes
- protected[this]
- abstract def invokedynamic(pc: Int, bootstrapMethod: BootstrapMethod, name: String, methodDescriptor: MethodDescriptor, operands: (PerformInvocations.this)#Operands): (PerformInvocations.this)#MethodCallResult
- Definition Classes
- MethodCallsDomain
- abstract def shouldInvocationBePerformed(method: Method): Boolean
Returns
true
if the given method should be invoked.
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def MethodCallResult(potentialExceptions: Iterable[(PerformInvocations.this)#ExceptionValue]): (PerformInvocations.this)#MethodCallResult
Factory method called to create a MethodCallResult.
Factory method called to create a MethodCallResult.
- Attributes
- protected[this]
- Definition Classes
- MethodCallsHandling
- def MethodCallResult(returnValue: (PerformInvocations.this)#DomainValue, exceptions: Iterable[(PerformInvocations.this)#ExceptionValue]): (PerformInvocations.this)#MethodCallResult
Factory method called to create a MethodCallResult.
Factory method called to create a MethodCallResult.
- Attributes
- protected[this]
- Definition Classes
- MethodCallsHandling
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- def doInvoke(pc: Int, method: Method, operands: (PerformInvocations.this)#Operands, fallback: () => (PerformInvocations.this)#MethodCallResult): (PerformInvocations.this)#MethodCallResult
Performs the invocation of the given method using the given operands.
Performs the invocation of the given method using the given operands.
- Attributes
- protected[this]
- def doInvoke(method: Method, calledMethodDomain: (PerformInvocations.this)#CalledMethodDomain)(parameters: CalledMethodDomain.Locals): AIResult { val domain: calledMethodDomain.type }
- Attributes
- protected[this]
- def doInvokeNonVirtual(pc: Int, declaringClass: ObjectType, isInterface: Boolean, name: String, descriptor: MethodDescriptor, operands: (PerformInvocations.this)#Operands, fallback: () => (PerformInvocations.this)#MethodCallResult): (PerformInvocations.this)#MethodCallResult
- Attributes
- protected[this]
- def doInvokeVirtual(pc: Int, declaringClass: ReferenceType, isInterface: Boolean, name: String, descriptor: MethodDescriptor, operands: (PerformInvocations.this)#Operands, fallback: () => (PerformInvocations.this)#MethodCallResult): (PerformInvocations.this)#MethodCallResult
The default implementation only supports the case where we can precisely resolve the target.
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def getPotentialExceptions(pc: Int): List[(PerformInvocations.this)#ExceptionValue]
- Attributes
- protected[this]
- Definition Classes
- MethodCallsHandling
- def handleInstanceBasedInvoke(pc: Int, methodDescriptor: MethodDescriptor, targetMethods: Set[Method], receiverIsNull: Answer, operands: (PerformInvocations.this)#Operands): (PerformInvocations.this)#MethodCallResult
- methodDescriptor
The method descriptor as specified by the invoke instruction. In case of the invocation of a signature polymorphic method using org.opalj.br.instructions.INVOKEVIRTUAL the descriptor of the invoked method may differ from the descriptor used by the method. Nevertheless, the MethodCallResult has to satisfy the requirements of the caller. In particular regarding the return type.
- Attributes
- protected[this]
- Definition Classes
- MethodCallsHandling
- def handleInstanceBasedInvoke(pc: Int, methodDescriptor: MethodDescriptor, operands: (PerformInvocations.this)#Operands): (PerformInvocations.this)#MethodCallResult
- Attributes
- protected[this]
- Definition Classes
- MethodCallsHandling
- def handleInstanceBasedInvoke(pc: Int, methodDescriptor: MethodDescriptor, receiverIsNull: Answer): (PerformInvocations.this)#MethodCallResult
- Attributes
- protected[this]
- Definition Classes
- MethodCallsHandling
- def handleInvoke(pc: Int, methodDescriptor: MethodDescriptor): (PerformInvocations.this)#MethodCallResult
- Attributes
- protected[this]
- Definition Classes
- MethodCallsHandling
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def invokeinterface(pc: Int, declaringClass: ObjectType, name: String, descriptor: MethodDescriptor, operands: (PerformInvocations.this)#Operands): (PerformInvocations.this)#MethodCallResult
- Definition Classes
- PerformInvocations → MethodCallsDomain
- def invokespecial(pc: Int, declaringClass: ObjectType, isInterface: Boolean, name: String, descriptor: MethodDescriptor, operands: (PerformInvocations.this)#Operands): (PerformInvocations.this)#MethodCallResult
- Definition Classes
- PerformInvocations → MethodCallsDomain
- def invokestatic(pc: Int, declaringClass: ObjectType, isInterface: Boolean, name: String, descriptor: MethodDescriptor, operands: (PerformInvocations.this)#Operands): (PerformInvocations.this)#MethodCallResult
For those
invokestatic
calls for which we have no concrete method (e.g., the respective class file was never loaded or the method is native) or if we have a recursive invocation, the super implementation is called.For those
invokestatic
calls for which we have no concrete method (e.g., the respective class file was never loaded or the method is native) or if we have a recursive invocation, the super implementation is called.- Definition Classes
- PerformInvocations → MethodCallsDomain
- def invokevirtual(pc: Int, declaringClass: ReferenceType, name: String, descriptor: MethodDescriptor, operands: (PerformInvocations.this)#Operands): (PerformInvocations.this)#MethodCallResult
- Definition Classes
- PerformInvocations → MethodCallsDomain
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def testAndDoInvoke(pc: Int, method: Method, operands: (PerformInvocations.this)#Operands, fallback: () => (PerformInvocations.this)#MethodCallResult): (PerformInvocations.this)#MethodCallResult
- Attributes
- protected[this]
- def toString(): String
- Definition Classes
- AnyRef → Any
- def transformResult(callerPC: Int, calledMethod: Method, originalOperands: (PerformInvocations.this)#Operands, calledMethodDomain: (PerformInvocations.this)#CalledMethodDomain)(passedParameters: CalledMethodDomain.Locals, result: AIResult { val domain: calledMethodDomain.type }): (PerformInvocations.this)#MethodCallResult
Converts the results (
DomainValue
s) of the evaluation of the called method into the calling domain.Converts the results (
DomainValue
s) of the evaluation of the called method into the calling domain.If the returned value is one of the parameters (determined using reference identity), then the parameter is mapped back to the original operand.
- Attributes
- protected[this]
- def useExceptionsThrownByCalledMethod: Boolean
If
true
the exceptions thrown by the called method will be used during the evaluation of the calling method. - final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated