import org.opalj.collection.immutable._; import org.opalj.br._ ; import org.opalj.br.analyses._; import org.opalj.br.instructions._; import org.opalj.collection.immutable.ConstArray.find; import org.opalj.util.PerformanceEvaluation.time
-implicit val p = Project(new java.io.File("OPAL/bi/target/scala-2.11/resource_managed/test/cg.jar"))
+// implicit val p = Project(new java.io.File("OPAL/bi/target/scala-2.11/resource_managed/test/cg.jar"))
+implicit val p = Project(new java.io.File("OPAL/bi/target/scala-2.11/resource_managed/test/cg.jar"),org.opalj.bytecode.RTJar)
TypeExtensibilityKey.AllClosed = true // <= "HACK" only necessary as long as we don't have a decent "isExtensiblity" analysis
val typeExtensibility = p.get(TypeExtensibilityKey)
val typeBasedCallTargets = p.get(TypeBasedCallTargetsKey)
typeBasedCallTargets.specialCall(ObjectType("cg/default_methods/Super"),"<init>",MethodDescriptor("()V")).map(m => m.toJava(p.classFile(m))) // EXPECTED: Set(java8methodresolution.Super{ public void <init>() })
+// ALWAYS OVERRIDDEN ABSTRACT METHOD
+val candidates = p.virtualCall("foo",ObjectType("cg/always_overridden/Super"),"doIt",MethodDescriptor("()V"))
+typeBasedCallTargets.filterAlwaysOverriddenMethods(candidates)
// GET CALL TARGETS OF INTERFACE METHOD INVOKES (INVOKEINTERFACE)
typeBasedCallTargets.interfaceCall(ObjectType("cg/default_methods/ISuperAlt"),"compute",MethodDescriptor("(II)I"))
val pts = p.virtualCall("cg/visibility/a",invokeVirtuals(0)._2).map(m => m.toJava(p.classFile(m)))
val tts = typeBasedCallTargets.virtualCall("cg/visibility/a",invokeVirtuals(0)._2)
-tts eq typeBasedCallTargets.virtualCall("cg/visibility/a",invokeVirtuals(0)._2) // => true (results are cached)
+tts eq typeBasedCallTargets.virtualCall("cg/visibility/a",invokeVirtuals(0)._2)// => true (results are cached)
p.virtualCall("cg/visibility/a",invokeVirtuals(0)._2).map(m => m.toJava(p.classFile(m)))
//res: scala.collection.immutable.Set[String] = Set(cg.visibility.a.C{ protected void printIt() }, cg.visibility.a.A{ void printIt() })
p.virtualCall("cg/visibility/b",invokeVirtuals(0)._2).map(m => m.toJava(p.classFile(m)))
//res: scala.collection.immutable.Set[String] = Set(cg.visibility.b.B{ protected void printIt() }, cg.visibility.a.C{ protected void printIt() })
+// LOOKUP OF ARRAY BASED METHOD CALLS
+typeBasedCallTargets.virtualCall("N/A",ArrayType(ObjectType("java/lang/Object")),"hashCode",MethodDescriptor("()I"))
+typeBasedCallTargets.virtualCall("foo",ObjectType("cg/always_overridden/Super"),"doIt",MethodDescriptor("()V"))