Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2015-10-24 22:33:11 +0000
committerStephan Herrmann2015-10-24 22:33:11 +0000
commitdd52d2e7883042f6e1efd0ac56273c909b4c9391 (patch)
tree4656b90983785e71d396c8b2184ba290515dceec
parent59bcb95a7e53047d1143712450762f9d9e3212bb (diff)
downloadorg.eclipse.objectteams-dd52d2e7883042f6e1efd0ac56273c909b4c9391.tar.gz
org.eclipse.objectteams-dd52d2e7883042f6e1efd0ac56273c909b4c9391.tar.xz
org.eclipse.objectteams-dd52d2e7883042f6e1efd0ac56273c909b4c9391.zip
Bug 469176: [otdre] multiple fields _OT$roleSet
- follow-up: always use '.' separated names in calls to IWeavingContext
-rw-r--r--plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/AbstractBoundClass.java2
-rw-r--r--plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmWritableBoundClass.java21
-rw-r--r--plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/transformer/IWeavingContext.java3
3 files changed, 13 insertions, 13 deletions
diff --git a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/AbstractBoundClass.java b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/AbstractBoundClass.java
index a907ee6cc..5a79d2ebe 100644
--- a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/AbstractBoundClass.java
+++ b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/AbstractBoundClass.java
@@ -1005,7 +1005,7 @@ public abstract class AbstractBoundClass implements IBoundClass {
}
Method superMethod = superClass.getMethod(task);
if (superMethod.isImplemented()) {
- isWeavable = weavingContext.isWeavable(superClass.getInternalName());
+ isWeavable = weavingContext.isWeavable(superClass.getName());
break;
}
superClass = superClass.getSuperclass();
diff --git a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmWritableBoundClass.java b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmWritableBoundClass.java
index f19073986..b4d4b16c9 100644
--- a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmWritableBoundClass.java
+++ b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmWritableBoundClass.java
@@ -372,24 +372,23 @@ class AsmWritableBoundClass extends AsmBoundClass {
if (isInterface())
methodModifiers |= Opcodes.ACC_ABSTRACT;
- String superClassName = getSuperClassName().replace('.', '/');
+ String superClassName = getSuperClassName();
boolean superIsWeavable = weavingContext.isWeavable(superClassName);
- if (!superIsWeavable)
- superClassName = null;
+ String internalSuperClassName = superIsWeavable ? getInternalSuperClassName() : null;
if (!isInterface() && !superIsWeavable)
addField(ConstantMembers.roleSet, Opcodes.ACC_PUBLIC);
- addEmptyMethod(ConstantMembers.callOrig, methodModifiers, null, null, superClassName);
- addEmptyMethod(ConstantMembers.callAllBindingsClient, methodModifiers, null, null, superClassName);
+ addEmptyMethod(ConstantMembers.callOrig, methodModifiers, null, null, internalSuperClassName);
+ addEmptyMethod(ConstantMembers.callAllBindingsClient, methodModifiers, null, null, internalSuperClassName);
// the methods callOrigStatic and accessStatic have to already exist to call it in a concrete team
if (!isInterface()) {
addEmptyMethod(getCallOrigStatic(), Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, null, null, null);
addEmptyMethod(ConstantMembers.accessStatic, Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, null, null, null);
}
- addEmptyMethod(ConstantMembers.access, methodModifiers, null, null, superClassName);
+ addEmptyMethod(ConstantMembers.access, methodModifiers, null, null, internalSuperClassName);
addEmptyMethod(ConstantMembers.addOrRemoveRole, methodModifiers, null, null, null);
if (!isInterface())
@@ -434,8 +433,8 @@ class AsmWritableBoundClass extends AsmBoundClass {
@Override
protected void prepareForFirstTransformation() {
if (!isTransformed && !isInterface()) {
- String superClassName = this.weavingContext.isWeavable(getSuperClassName()) ? getInternalSuperClassName() : null;
- nodes.add(new CreateSwitchAdapter(ConstantMembers.callOrig, superClassName));
+ String internalSuperClassName = this.weavingContext.isWeavable(getSuperClassName()) ? getInternalSuperClassName() : null;
+ nodes.add(new CreateSwitchAdapter(ConstantMembers.callOrig, internalSuperClassName));
nodes.add(new CreateSwitchForCallAllBindingsNode());
nodes.add(new CreateAddRemoveRoleMethod());
isTransformed = true;
@@ -461,9 +460,9 @@ class AsmWritableBoundClass extends AsmBoundClass {
@Override
protected void prepareForFirstMemberAccess() {
if (!isTransformedForMemberAccess && !isInterface()) {
- String superClassName = this.weavingContext.isWeavable(getSuperClassName()) ? getInternalSuperClassName() : null;
- nodes.add(new CreateSwitchForAccessAdapter(ConstantMembers.access, superClassName, this));
- nodes.add(new CreateSwitchForAccessAdapter(ConstantMembers.accessStatic, superClassName, this));
+ String internalSuperClassName = this.weavingContext.isWeavable(getSuperClassName()) ? getInternalSuperClassName() : null;
+ nodes.add(new CreateSwitchForAccessAdapter(ConstantMembers.access, internalSuperClassName, this));
+ nodes.add(new CreateSwitchForAccessAdapter(ConstantMembers.accessStatic, internalSuperClassName, this));
isTransformedForMemberAccess = true;
}
diff --git a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/transformer/IWeavingContext.java b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/transformer/IWeavingContext.java
index 0f05a5d12..48e2c5f1a 100644
--- a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/transformer/IWeavingContext.java
+++ b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/transformer/IWeavingContext.java
@@ -41,7 +41,8 @@ public interface IWeavingContext {
* <br/>
* When answering <code>false</code> the class can be immediately rewoven,
* and the weaving context does not directly participate in this.
- * @param className
+ * @param className full qualified classname, dot-separated for packages
+ * and dollar-separated for nested classes.
* @param task
* @return <code>true</code> indicates the task has been scheduled for later.
*/

Back to the top