Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2014-09-09 19:07:12 +0000
committerStephan Herrmann2014-09-09 19:07:12 +0000
commit62c97a87c2f975a85b07ac7fd89d1a9f6044b124 (patch)
tree3194ec8df4e0a46a0b57648f7c84ac90bfe71ec7
parent3037f2d92d5a64a072acc1bf789bc8a387498614 (diff)
downloadorg.eclipse.objectteams-62c97a87c2f975a85b07ac7fd89d1a9f6044b124.tar.gz
org.eclipse.objectteams-62c97a87c2f975a85b07ac7fd89d1a9f6044b124.tar.xz
org.eclipse.objectteams-62c97a87c2f975a85b07ac7fd89d1a9f6044b124.zip
Bug 443642 - [otdre] Failure to detect all base classes during class
scanning
-rw-r--r--plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/AsmClassVisitor.java4
-rw-r--r--plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/Attributes.java23
2 files changed, 27 insertions, 0 deletions
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 01875403f..10e74bd72 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
@@ -21,6 +21,7 @@ import java.util.HashSet;
import org.eclipse.objectteams.otredyn.bytecode.Binding;
import org.eclipse.objectteams.otredyn.bytecode.asm.Attributes.CallinBindingsAttribute;
import org.eclipse.objectteams.otredyn.bytecode.asm.Attributes.OTClassFlagsAttribute;
+import org.eclipse.objectteams.otredyn.bytecode.asm.Attributes.RoleBaseBindingsAttribute;
import org.eclipse.objectteams.otredyn.bytecode.asm.Attributes.CallinBindingsAttribute.MultiBinding;
import org.eclipse.objectteams.otredyn.bytecode.asm.Attributes.CallinPrecedenceAttribute;
import org.eclipse.objectteams.otredyn.bytecode.asm.Attributes.OTSpecialAccessAttribute;
@@ -122,6 +123,9 @@ class AsmClassVisitor extends ClassVisitor {
clazz.setOTClassFlags(((OTClassFlagsAttribute)attribute).flags);
} else if (attribute.type.equals(Attributes.ATTRIBUTE_OT_SPECIAL_ACCESS)) {
((OTSpecialAccessAttribute)attribute).registerAt(clazz);
+ } else if (attribute.type.equals(Attributes.ATTRIBUTE_ROLE_BASE_BINDINGS)) {
+ for (String base : ((RoleBaseBindingsAttribute) attribute).bases)
+ clazz.boundBaseClasses.add(base.replace('/', '.'));
}
}
diff --git a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/Attributes.java b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/Attributes.java
index 35ea8bb68..031df641f 100644
--- a/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/Attributes.java
+++ b/plugins/org.eclipse.objectteams.otredyn/src/org/eclipse/objectteams/otredyn/bytecode/asm/Attributes.java
@@ -35,6 +35,7 @@ import org.objectweb.asm.Label;
*/
abstract class Attributes {
protected final static String ATTRIBUTE_OT_DYN_CALLIN_BINDINGS="OTDynCallinBindings";
+ protected final static String ATTRIBUTE_ROLE_BASE_BINDINGS = "CallinRoleBaseBindings";
protected final static String ATTRIBUTE_CALLIN_PRECEDENCE = "CallinPrecedence";
protected final static String ATTRIBUTE_OT_CLASS_FLAGS = "OTClassFlags";
protected final static String ATTRIBUTE_OT_SPECIAL_ACCESS = "OTSpecialAccess";
@@ -44,6 +45,7 @@ abstract class Attributes {
protected final static Attribute[] attributes = {
new CallinBindingsAttribute(0),
+ new RoleBaseBindingsAttribute(0),
new CallinPrecedenceAttribute(0),
new OTClassFlagsAttribute(0),
new OTSpecialAccessAttribute(),
@@ -216,6 +218,27 @@ abstract class Attributes {
return buf.toString();
}
}
+ protected static class RoleBaseBindingsAttribute extends Attribute {
+ String[] roles;
+ String[] bases;
+ protected RoleBaseBindingsAttribute(int elementCount) {
+ super(ATTRIBUTE_ROLE_BASE_BINDINGS);
+ roles = new String[elementCount];
+ bases = new String[elementCount];
+ }
+ @Override
+ protected Attribute read(ClassReader cr, int off, int len,
+ char[] buf, int codeOff, Label[] labels)
+ {
+ int elementCount = cr.readShort(off); off += 2;
+ RoleBaseBindingsAttribute attr = new RoleBaseBindingsAttribute(elementCount);
+ for (int i = 0; i < elementCount; i++) {
+ attr.roles[i] = cr.readUTF8(off, buf); off += 2;
+ attr.bases[i] = cr.readUTF8(off, buf); off += 2;
+ }
+ return attr;
+ }
+ }
protected static class CallinPrecedenceAttribute extends Attribute {
String[] labels;
public CallinPrecedenceAttribute(int elementCount) {

Back to the top