aboutsummaryrefslogtreecommitdiffstats
path: root/bcel-builder/src
diff options
context:
space:
mode:
authorAndy Clement <aclement@pivotal.io>2018-10-01 16:10:02 -0700
committerAndy Clement <aclement@pivotal.io>2018-10-01 16:10:02 -0700
commit749b9cb3ca8e4680fca4252b0d782b7154eccb75 (patch)
treec2abf1231aac79a08469c92b319b4882991bf3b7 /bcel-builder/src
parentf6d9aaaf05eca3aaf06d3a769a83f302b0501dca (diff)
downloadaspectj-749b9cb3ca8e4680fca4252b0d782b7154eccb75.tar.gz
aspectj-749b9cb3ca8e4680fca4252b0d782b7154eccb75.zip
More fixes for 1.9.2V1_9_2_RC2
- update to more recent JDT to pickup Nestmates fix - bcel updated for NestMembers/NestHost attributes - testcases for nestmates
Diffstat (limited to 'bcel-builder/src')
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/Constants.java10
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java5
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java4
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java118
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java131
5 files changed, 265 insertions, 3 deletions
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/Constants.java b/bcel-builder/src/org/aspectj/apache/bcel/Constants.java
index 9ef04f4ff..c75496527 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/Constants.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/Constants.java
@@ -651,8 +651,12 @@ public interface Constants {
public static final byte ATTR_MODULE = 23;
public static final byte ATTR_MODULE_PACKAGES = 24;
public static final byte ATTR_MODULE_MAIN_CLASS = 25;
-
- public static final short KNOWN_ATTRIBUTES = 26;
+
+ // J11:
+ public static final byte ATTR_NEST_HOST = 26;
+ public static final byte ATTR_NEST_MEMBERS = 27;
+
+ public static final short KNOWN_ATTRIBUTES = 28;
public static final String[] ATTRIBUTE_NAMES = {
"SourceFile", "ConstantValue", "Code", "Exceptions", "LineNumberTable", "LocalVariableTable",
@@ -660,7 +664,7 @@ public interface Constants {
"RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", "RuntimeVisibleParameterAnnotations",
"RuntimeInvisibleParameterAnnotations", "LocalVariableTypeTable", "EnclosingMethod",
"AnnotationDefault","BootstrapMethods", "RuntimeVisibleTypeAnnotations", "RuntimeInvisibleTypeAnnotations",
- "MethodParameters", "Module", "ModulePackages", "ModuleMainClass"
+ "MethodParameters", "Module", "ModulePackages", "ModuleMainClass", "NestHost", "NestMembers"
};
/**
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java
index edc8d22c9..daeb59a38 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/Attribute.java
@@ -173,6 +173,10 @@ public abstract class Attribute implements Cloneable, Node, Serializable {
return new ModulePackages(idx, len, file, cpool);
case Constants.ATTR_MODULE_MAIN_CLASS:
return new ModuleMainClass(idx, len, file, cpool);
+ case Constants.ATTR_NEST_HOST:
+ return new NestHost(idx, len, file, cpool);
+ case Constants.ATTR_NEST_MEMBERS:
+ return new NestMembers(idx, len, file, cpool);
default:
throw new IllegalStateException();
}
@@ -203,6 +207,7 @@ public abstract class Attribute implements Cloneable, Node, Serializable {
return Constants.ATTRIBUTE_NAMES[tag];
}
+ @Override
public abstract void accept(ClassVisitor v);
}
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java
index 654cd8146..5c60f818f 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/ClassVisitor.java
@@ -173,4 +173,8 @@ public interface ClassVisitor {
public void visitModule(Module module);
public void visitModulePackages(ModulePackages modulePackage);
public void visitModuleMainClass(ModuleMainClass moduleMainClass);
+
+ // J11:
+ public void visitNestHost(NestHost nestHost);
+ public void visitNestMembers(NestMembers nestMembers);
}
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java
new file mode 100644
index 000000000..52d312659
--- /dev/null
+++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestHost.java
@@ -0,0 +1,118 @@
+package org.aspectj.apache.bcel.classfile;
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache BCEL" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache BCEL", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import org.aspectj.apache.bcel.Constants;
+
+/**
+ * https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-4.html#jvms-4.7.28
+ *
+ * @see Attribute
+ */
+public final class NestHost extends Attribute {
+ private int hostClassIndex;
+
+ public NestHost(NestHost c) {
+ this(c.getNameIndex(), c.getLength(), c.getHostClassIndex(), c.getConstantPool());
+ }
+
+ public NestHost(int nameIndex, int length, int hostClassIndex, ConstantPool cp) {
+ super(Constants.ATTR_NEST_MEMBERS, nameIndex, length, cp);
+ this.hostClassIndex = hostClassIndex;
+ }
+
+ NestHost(int nameIndex, int length, DataInputStream file, ConstantPool constant_pool) throws IOException {
+ this(nameIndex, length, 0, constant_pool);
+ hostClassIndex = file.readUnsignedShort();
+ }
+
+ @Override
+ public void accept(ClassVisitor v) {
+ v.visitNestHost(this);
+ }
+
+ @Override
+ public final void dump(DataOutputStream file) throws IOException {
+ super.dump(file);
+ file.writeShort(hostClassIndex);
+ }
+
+ public final int getHostClassIndex() {
+ return hostClassIndex;
+ }
+
+ public final void setHostClassIndex(int hostClassIndex) {
+ this.hostClassIndex = hostClassIndex;
+ }
+
+ public final String getHostClassName() {
+ ConstantClass constantClass = (ConstantClass)cpool.getConstant(hostClassIndex,Constants.CONSTANT_Class);
+ return constantClass.getClassname(cpool);
+ }
+
+ @Override
+ public final String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append("NestHost(");
+ ConstantClass constantClass = (ConstantClass)cpool.getConstant(hostClassIndex,Constants.CONSTANT_Class);
+ buf.append(constantClass.getClassname(cpool));
+ buf.append(")");
+ return buf.toString();
+ }
+}
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java
new file mode 100644
index 000000000..9d273966f
--- /dev/null
+++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/NestMembers.java
@@ -0,0 +1,131 @@
+package org.aspectj.apache.bcel.classfile;
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache BCEL" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache BCEL", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import org.aspectj.apache.bcel.Constants;
+
+/**
+ * https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-4.html#jvms-4.7.29
+ *
+ * @see Attribute
+ */
+public final class NestMembers extends Attribute {
+ private int numberOfClasses;
+ private int[] classes; // CONSTANT_Class_info references
+
+ public NestMembers(NestMembers c) {
+ this(c.getNameIndex(), c.getLength(), c.getClasses(), c.getConstantPool());
+ }
+
+ public NestMembers(int nameIndex, int length, int[] classes, ConstantPool cp) {
+ super(Constants.ATTR_NEST_MEMBERS, nameIndex, length, cp);
+ setClasses(classes);
+ }
+
+ NestMembers(int nameIndex, int length, DataInputStream file, ConstantPool constant_pool) throws IOException {
+ this(nameIndex, length, (int[]) null, constant_pool);
+ numberOfClasses = file.readUnsignedShort();
+ classes = new int[numberOfClasses];
+ for (int i = 0; i < numberOfClasses; i++) {
+ classes[i] = file.readUnsignedShort();
+ }
+ }
+
+ @Override
+ public void accept(ClassVisitor v) {
+ v.visitNestMembers(this);
+ }
+
+ @Override
+ public final void dump(DataOutputStream file) throws IOException {
+ super.dump(file);
+ file.writeShort(numberOfClasses);
+ for (int i = 0; i < numberOfClasses; i++) {
+ file.writeShort(classes[i]);
+ }
+ }
+
+ public final int[] getClasses() {
+ return classes;
+ }
+
+ public final void setClasses(int[] inner_classes) {
+ this.classes = inner_classes;
+ numberOfClasses = (inner_classes == null) ? 0 : inner_classes.length;
+ }
+
+ public final String[] getClassesNames() {
+ String[] result = new String[numberOfClasses];
+ for (int i = 0; i < numberOfClasses; i++) {
+ ConstantClass constantClass = (ConstantClass)cpool.getConstant(classes[i],Constants.CONSTANT_Class);
+ result[i] = constantClass.getClassname(cpool);
+ }
+ return result;
+ }
+
+ @Override
+ public final String toString() {
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < numberOfClasses; i++) {
+ ConstantClass constantClass = (ConstantClass)cpool.getConstant(classes[i],Constants.CONSTANT_Class);
+ buf.append(constantClass.getClassname(cpool)).append(" ");
+ }
+ return "NestMembers("+buf.toString().trim()+")";
+ }
+}