Bug 483954: [otdre] OT/Equinox does not weave in base-super class
StandardJavaElementContentProvider
This reverts parts of commit 15bdba22ade94d96f8fe1f1e3fac7fd599f57fdf.
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/MethodSpec.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/MethodSpec.java
index f362984..08496a8 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/MethodSpec.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/MethodSpec.java
@@ -727,6 +727,10 @@
return this.resolvedMethod != null && this.resolvedMethod.isStatic();
}
+ public boolean isFinal() {
+ return this.resolvedMethod != null && this.resolvedMethod.isFinal();
+ }
+
public int getTranslationFlags() {
int translations = 0;
if (this.argNeedsTranslation != null)
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/OTDynCallinBindingsAttribute.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/OTDynCallinBindingsAttribute.java
index 10d41ba..54379c8 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/OTDynCallinBindingsAttribute.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/OTDynCallinBindingsAttribute.java
@@ -180,6 +180,7 @@
private class BaseMethod {
static final int CALLIN = 1;
static final int STATIC = 2;
+ static final int FINAL = 4;
char[] baseMethodName, baseMethodSignature, declaringBaseClassName;
int callinID, baseFlags, translationFlags;
BaseMethod(char[] baseMethodName, char[] baseMethodSignature, char[] declaringBaseClassName, int callinID, int baseFlags, int translationFlags) {
@@ -252,12 +253,10 @@
baseFlags |= BaseMethod.CALLIN;
if (baseSpec.isStatic())
baseFlags |= BaseMethod.STATIC;
- MethodBinding baseMethod = baseSpec.resolvedMethod;
- char[] weavableBaseClass = (baseMethod.isFinal() || baseMethod.isStatic())
- ? baseMethod.declaringClass.constantPoolName()
- : baseClassName;
+ if (baseSpec.isFinal())
+ baseFlags |= BaseMethod.FINAL;
mapping.addBaseMethod(i, baseSpec.codegenSeletor(), baseSpec.signature(WeavingScheme.OTDRE),
- weavableBaseClass,
+ baseSpec.resolvedMethod.declaringClass.constantPoolName(),
baseSpec.getCallinId(this.theTeam), baseFlags, baseSpec.getTranslationFlags());
}
mapping.setSMAPinfo(callinDecl);
diff --git a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmClassVisitor.java b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmClassVisitor.java
index 2d06acf..bd4bc6d 100644
--- a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmClassVisitor.java
+++ b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmClassVisitor.java
@@ -44,6 +44,10 @@
private static boolean DEBUG_ATTRIBUTES = System.getProperty("otdre.debug.attributes") != null;
+ static final int CALLIN = 1;
+ static final int STATIC = 2;
+ static final int FINAL = 4;
+
private AsmBoundClass clazz;
public AsmClassVisitor(AsmBoundClass clazz) {
@@ -115,18 +119,19 @@
clazz.boundBaseClasses.add(baseClassName.replace('/', '.'));
String[] baseMethodNames = multiBindings[i].getBaseMethodNames();
String[] baseMethodSignatures = multiBindings[i].getBaseMethodSignatures();
- String[] weavableBaseClassNames = multiBindings[i].getDeclaringBaseClassName();
+ String[] declaringBaseClassNames = multiBindings[i].getDeclaringBaseClassName();
int callinModifier = multiBindings[i].getCallinModifier();
int[] callinIds = multiBindings[i].getCallinIds();
int[] baseFlags = multiBindings[i].getBaseFlags();
boolean handleCovariantReturn = multiBindings[i].isHandleCovariantReturn();
for (int j = 0; j < baseMethodNames.length; j++) {
- String weavableBaseClassName = weavableBaseClassNames[j];
+ String declaringBaseClassName = declaringBaseClassNames[j];
+ String weavableBaseClass = (baseFlags[j] & (STATIC | FINAL)) != 0 ? declaringBaseClassName : baseClassName;
Binding binding = new Binding(clazz, roleClassName, callinLabel, baseClassName,
- baseMethodNames[j], baseMethodSignatures[j], weavableBaseClassName,
+ baseMethodNames[j], baseMethodSignatures[j], weavableBaseClass,
callinModifier, callinIds[j], baseFlags[j], handleCovariantReturn);
clazz.addBinding(binding);
- clazz.boundBaseClasses.add(weavableBaseClassName.replace('/', '.'));
+ clazz.boundBaseClasses.add(declaringBaseClassName.replace('/', '.'));
}
}
} else if (attribute.type.equals(Attributes.ATTRIBUTE_CALLIN_PRECEDENCE)) {
diff --git a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/MoveCodeToCallOrigAdapter.java b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/MoveCodeToCallOrigAdapter.java
index 52672eb..277fdce 100644
--- a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/MoveCodeToCallOrigAdapter.java
+++ b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/MoveCodeToCallOrigAdapter.java
@@ -16,6 +16,7 @@
**********************************************************************/
package org.eclipse.objectteams.otredyn.bytecode.asm;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
@@ -65,6 +66,11 @@
superIsWeavable = weavingContext.isWeavable(clazz.getSuperClassName());
if (superIsWeavable)
superclass = clazz.getSuperclass();
+ try {
+ throw new IOException("create move " + clazz.getName());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
public boolean transform() {
@@ -74,8 +80,6 @@
MethodNode callOrig = getMethod(this.callOrig);
Type returnType = Type.getReturnType(orgMethod.desc);
-
-
InsnList newInstructions = new InsnList();