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();