Bug 481150 - [otdre] skip classes that are known to contain a JSR
instruction
diff --git a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/OTWeavingHook.java b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/OTWeavingHook.java
index 46436cf..25e836d 100644
--- a/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/OTWeavingHook.java
+++ b/plugins/org.eclipse.objectteams.otequinox/src/org/eclipse/objectteams/internal/osgi/weaving/OTWeavingHook.java
@@ -228,6 +228,8 @@
if (isEclipseLoggingClass(bundleName, className))
return;
+ if (isClassWithJSR(className))
+ return;
if (BCELPatcher.BCEL_PLUGIN_ID.equals(bundleName)) {
BCELPatcher.fixBCEL(wovenClass);
@@ -275,6 +277,19 @@
}
}
+ private boolean isClassWithJSR(String className) {
+ // ASM cannot handle JSR instruction:
+ // java.lang.RuntimeException: JSR/RET are not supported with computeFrames option
+ // at org.objectweb.asm.Frame.execute(Frame.java:1178)
+ // at org.objectweb.asm.MethodWriter.visitJumpInsn(MethodWriter.java:984)
+ // at org.objectweb.asm.commons.AdviceAdapter.visitJumpInsn(AdviceAdapter.java:503)
+ // at org.objectweb.asm.ClassReader.readCode(ClassReader.java:1335)
+ // at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1017)
+ // at org.objectweb.asm.ClassReader.accept(ClassReader.java:693)
+ // Hence any class known to contain that instruction is excluded:
+ return "org.apache.felix.gogo.runtime.Pipe".equals(className);
+ }
+
private boolean isEclipseLoggingClass(String bundleName, String className) {
if (bundleName.equals("org.eclipse.ui.workbench")) {
if (className.equals("org.eclipse.ui.statushandlers.StatusAdapter"))