Snippets

Michael Eichberg [OPAL - 0.8.15] Method call target resolution

Created by Michael Eichberg last modified
// The following code demonstrates how to determine the target of a method invokation.
// This snippet can be run using the SCALA Repl in OPAL (; project BytecodeRepresentation ;  console)

// (0) General setup
import org.opalj.collection.immutable._; import org.opalj.br._ ; import org.opalj.br.analyses._; import org.opalj.br.instructions._
val p = Project(/*some jar/folder with jars/classes*/org.opalj.bytecode.JRELibraryFolder)

// (1) Finding the call targets of invoke static calls
p.allMethodsWithBody.foreach {m => 
    m.body.get.instructions.foreach{ 
      case i : INVOKESTATIC => 
        val callTargets = p.staticCall(i)
        // let's report unresolved call targets...
        if(callTargets.isEmpty) println(i)
      case _ => ()
   }
}

// (3) Finding the call targets of instance based calls (where the runtime type of the instance is known)
p.instanceCall(ObjectType("java/langutil/LinkedHashMap"),ObjectType("java/util/AbstractCollection"),"spliterator",MethodDescriptor(IndexedSeq(),ObjectType("java/util/Spliterator"))).map(m => m.toJava)
// => default method

p.instanceCall(ObjectType.String,ObjectType("java/util/HashMap"),"reinitialize",MethodDescriptor.NoArgsAndReturnVoid)
// => <NO METHOD> (reinitialize is only package visible)
p.instanceCall(ObjectType("java/util/LinkedHashMap"),ObjectType("java/util/HashMap"),"reinitialize",MethodDescriptor.NoArgsAndReturnVoid)
// => package visible reinitialize method

/////// HANDLING POLYMORPHIC CALLS
p.instanceCall(ObjectType.Object/*IRRELEVANT*/,ObjectType.MethodHandle,"invoke",MethodDescriptor.NoArgsAndReturnVoid)
p.instanceCall(ObjectType.Object/*IRRELEVANT*/,ObjectType.MethodHandle,"invoke",MethodDescriptor.JustReturnsDouble)
p.instanceCall(ObjectType.Object/*IRRELEVANT*/,ObjectType.MethodHandle,"invokeExact",MethodDescriptor.NoArgsAndReturnVoid)
p.instanceCall(ObjectType.Object/*IRRELEVANT*/,ObjectType.MethodHandle,"invokeExact",MethodDescriptor.SignaturePolymorphicMethod)

p.instanceCall(ObjectType.Object/*IRRELEVANT*/,ObjectType.MethodHandle,"invokeExacter",MethodDescriptor.NoArgsAndReturnVoid) 
// should not resolve (name does not exist)

p.instanceCall(ObjectType.Object/*IRRELEVANT*/,ObjectType.MethodHandle,"invokeWithArguments",MethodDescriptor.NoArgsAndReturnVoid) 
// should not resolve (invokeWithArguments is not signature polymorphic because the flags don't fit!)

p.instanceCall(ObjectType.Object/*IRRELEVANT*/,ObjectType.MethodHandle,"invokeWithArguments",MethodDescriptor.SignaturePolymorphicMethod) 
// should resolve as usual


// (4) Handling invokeinterface based calls
/**
  The interface javax.swing.text.rtf.RTFAttribute defines the method "int domain()" which 
  is implemented (for the class that implement the interface) by
  javax.swing.text.rtf.RTFAttributes$GenericAttribute which, however, is NOT already a subtype
  of the interface!
**/
p.interfaceCall(ObjectType("javax/swing/text/rtf/RTFAttribute"),"domain",MethodDescriptor.JustReturnsInteger).map(m => m.toJava)

// This returns all toString methods which belong to some type which inherits from subtype;
// as seen above not all methods may be defined by types which inherit from Serializable!
p.interfaceCall(ObjectType("java/io/Serializable"),"toString",MethodDescriptor.JustReturnsString).map(m => m.toJava)

Comments (1)

  1. okeyoyna

    mt2 wslikserverler www.zafer2.com editsizserverler emekserverler.net emekserverler.com onlineokeyoynaa.com canliokeyoynaa.com duzokeyoynaa.com okey-net.com bursaokey.com izmirokey.com ankaraokey.org istanbulokey.net agarprivateserver agario agario agario OKEY izmirokey bursaokey okey-net ankaraokey istanbulokey onlineokeyoynaa duzokeyoynaa canliokeyoynaa mt2 emekserverler emekserverler www.zafer2.com agario.zafer2.com editsizserverler wslikserverler altyazilifilm agarprivateserver agario agario okey oyna okey oyna metin2 pvp serverler okey okey okey okey okey OKEY OKEY OKEY OKEY OKEY realokey realokey realokey realokey realokey realokey realokey realokey realokey.com realokey.com realokey.com realokey.com realokey.com realokey.com realokey.com realokey.com realokey.com realokey.com realokey.com OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY OKEY

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.