diff --git a/apitools/org.eclipse.pde.api.tools.generator/src/org/eclipse/pde/api/tools/generator/EEGenerator.java b/apitools/org.eclipse.pde.api.tools.generator/src/org/eclipse/pde/api/tools/generator/EEGenerator.java
index cf4ce84..d9a0d1c 100644
--- a/apitools/org.eclipse.pde.api.tools.generator/src/org/eclipse/pde/api/tools/generator/EEGenerator.java
+++ b/apitools/org.eclipse.pde.api.tools.generator/src/org/eclipse/pde/api/tools/generator/EEGenerator.java
@@ -63,11 +63,10 @@
import org.eclipse.pde.api.tools.internal.provisional.ProfileModifiers;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassAdapter;
import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodAdapter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.w3c.dom.DOMException;
@@ -1167,7 +1166,7 @@
/**
* Class adapter
*/
- static class StubClassAdapter extends ClassAdapter {
+ static class StubClassAdapter extends ClassVisitor {
static final int IGNORE_CLASS_FILE = 0x100;
int flags;
@@ -1180,7 +1179,7 @@
* @param stubtype
*/
public StubClassAdapter(Type stubtype) {
- super(new ClassWriter(0));
+ super(Opcodes.ASM5, new ClassWriter(0));
this.type = stubtype;
}
@@ -1268,7 +1267,7 @@
return null;
}
final StubMethod method = this.stub.addMethod(methodName, desc);
- return new MethodAdapter(super.visitMethod(access, methodName, desc, signature, exceptions)) {
+ return new MethodVisitor(Opcodes.ASM5, super.visitMethod(access, methodName, desc, signature, exceptions)) {
@Override
public AnnotationVisitor visitAnnotation(String sig, boolean visible) {
if (visible && "Ljava/lang/invoke/MethodHandle$PolymorphicSignature;".equals(sig)) { //$NON-NLS-1$
diff --git a/apitools/org.eclipse.pde.api.tools.tests/API Tools Test Suite.launch b/apitools/org.eclipse.pde.api.tools.tests/API Tools Test Suite.launch
index d5f098e..2040997 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/API Tools Test Suite.launch
+++ b/apitools/org.eclipse.pde.api.tools.tests/API Tools Test Suite.launch
@@ -14,7 +14,7 @@
-
+
diff --git a/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
index 4985616..78fe116 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
+++ b/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
@@ -22,7 +22,7 @@
org.eclipse.jdt.core.tests.builder;bundle-version="[3.8.0,4.0.0)",
org.eclipse.jdt.core.tests.compiler;bundle-version="[3.8.0,4.0.0)",
org.eclipse.ant.core,
- org.objectweb.asm;bundle-version="[3.2.0,4.0.0)",
+ org.objectweb.asm;bundle-version="5.0.0",
org.eclipse.jface;bundle-version="3.8.0"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Export-Package: org.eclipse.pde.api.tools.anttasks.tests,
diff --git a/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
index ff54acb..0e7a4e2 100644
--- a/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
+++ b/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
@@ -14,7 +14,7 @@
org.eclipse.text;bundle-version="[3.4.0,4.0.0)",
org.eclipse.core.filebuffers;bundle-version="[3.4.0,4.0.0)",
org.eclipse.ant.core;bundle-version="[3.1.300,4.0.0)",
- org.objectweb.asm;bundle-version="[3.2.0,4.0.0)",
+ org.objectweb.asm;bundle-version="5.0.0",
org.eclipse.team.core;bundle-version="[3.4.0,4.0.0)",
org.eclipse.core.filesystem;bundle-version="[1.2.0,2.0.0)",
org.eclipse.equinox.frameworkadmin;bundle-version="[2.0.0,3.0.0)",
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
index f269577..b206096 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2013 IBM Corporation and others.
+ * Copyright (c) 2007, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -34,11 +34,10 @@
import org.eclipse.pde.api.tools.internal.provisional.model.IApiType;
import org.eclipse.pde.api.tools.internal.util.Signatures;
import org.eclipse.pde.api.tools.internal.util.Util;
-import org.objectweb.asm.ClassAdapter;
import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodAdapter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
@@ -51,7 +50,7 @@
*
* @since 1.0.0
*/
-public class ReferenceExtractor extends ClassAdapter {
+public class ReferenceExtractor extends ClassVisitor {
/**
* A visitor for visiting java 5+ signatures
@@ -61,7 +60,7 @@
* MethodSignature = (visitFormalTypeParameter visitClassBound? visitInterfaceBound* )* (visitParameterType visitReturnType visitExceptionType* )
* TypeSignature = visitBaseType | visitTypeVariable | visitArrayType | (visitClassType visitTypeArgument* (visitInnerClassType visitTypeArgument* )* visitEnd ) )
*/
- class ClassFileSignatureVisitor implements SignatureVisitor {
+ class ClassFileSignatureVisitor extends SignatureVisitor {
protected int kind = -1;
protected int originalkind = -1;
@@ -72,6 +71,7 @@
protected List references;
public ClassFileSignatureVisitor() {
+ super(Opcodes.ASM5);
this.references = new ArrayList();
}
@@ -222,7 +222,7 @@
* Visitor used to visit the methods of a type
* [ visitCode ( visitFrame | visitXInsn | visitLabel | visitTryCatchBlock | visitLocalVariable | visitLineNumber)* visitMaxs ] visitEnd
*/
- class ClassFileMethodVisitor extends MethodAdapter {
+ class ClassFileMethodVisitor extends MethodVisitor {
int argumentcount = 0;
LinePositionTracker linePositionTracker;
/**
@@ -241,7 +241,7 @@
* @param mv
*/
public ClassFileMethodVisitor(MethodVisitor mv, String name, int argumentcount) {
- super(mv);
+ super(Opcodes.ASM5, mv);
this.argumentcount = argumentcount;
this.linePositionTracker = new LinePositionTracker();
this.lastLineNumber = -1;
@@ -909,7 +909,7 @@
* @param referenceKinds kinds of references to extract as defined by {@link ReferenceModifiers}
*/
public ReferenceExtractor(IApiType type, Set collector, int referenceKinds) {
- super(new ClassNode());
+ super(Opcodes.ASM5, new ClassNode());
fType = type;
this.collector = collector;
fReferenceKinds = referenceKinds;
@@ -925,7 +925,7 @@
* @param tracker
*/
protected ReferenceExtractor(IApiType type, Set collector, int referenceKinds, FieldTracker tracker) {
- super(new ClassNode());
+ super(Opcodes.ASM5, new ClassNode());
fType = type;
this.collector = collector;
fReferenceKinds = referenceKinds;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/SignatureDecoder.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/SignatureDecoder.java
index 0f861c7..7209c81 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/SignatureDecoder.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/SignatureDecoder.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,12 +10,13 @@
*******************************************************************************/
package org.eclipse.pde.api.tools.internal.comparator;
+import org.objectweb.asm.Opcodes;
import org.objectweb.asm.signature.SignatureVisitor;
/**
* This class is used to decode a generic signature for class or method
*/
-final class SignatureDecoder implements SignatureVisitor {
+final class SignatureDecoder extends SignatureVisitor {
static final int CLASS_BOUND = 1;
static final int DEFAULT = 0;
static final int INTERFACE_BOUND = 2;
@@ -28,6 +29,7 @@
SignatureDescriptor signatureDescriptor;
public SignatureDecoder(SignatureDescriptor signatureDescriptor) {
+ super(Opcodes.ASM5);
this.signatureDescriptor = signatureDescriptor;
}
public SignatureVisitor visitArrayType() {
@@ -59,6 +61,8 @@
case SUPER_TYPE_ARGUMENT :
case NORMAL_TYPE_ARGUMENT :
this.signatureDescriptor.addTypeArgument(classTypeName);
+ break;
+ default:
break;
}
this.mode = DEFAULT;
@@ -115,6 +119,9 @@
break;
case SignatureVisitor.INSTANCEOF :
this.mode= NORMAL_TYPE_ARGUMENT;
+ break;
+ default:
+ break;
}
return this;
}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
index e463b6c..760fd6c 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
@@ -834,7 +834,6 @@
}
return new String(Util.getInputStreamAsCharArray(stream, -1, IApiCoreConstants.UTF_8));
} catch(IOException e) {
- //TODO abort
ApiPlugin.log(e);
} finally {
closingZipFileAndStream(stream, jarFile);
@@ -1178,9 +1177,11 @@
temp = new String[] { ProfileModifiers.J2SE_1_5_NAME };
} else if (ProfileModifiers.isJAVASE_1_6(values)) {
temp = new String[] { ProfileModifiers.JAVASE_1_6_NAME };
- } else {
- // this is 1.7
+ } else if (ProfileModifiers.isJAVASE_1_7(values)) {
temp = new String[] { ProfileModifiers.JAVASE_1_7_NAME };
+ } else {
+ // this is 1.8
+ temp = new String[] { ProfileModifiers.JAVASE_1_8_NAME };
}
}
if (ProfileModifiers.isCDC_Foundation(values)) {
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/TypeStructureBuilder.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/TypeStructureBuilder.java
index 8275598..f1c7f5e 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/TypeStructureBuilder.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/TypeStructureBuilder.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2013 IBM Corporation and others.
+ * Copyright (c) 2007, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -14,8 +14,6 @@
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
@@ -30,21 +28,18 @@
import org.eclipse.pde.api.tools.internal.provisional.model.IApiType;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiTypeRoot;
import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassAdapter;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodAdapter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.util.TraceAnnotationVisitor;
/**
* Class adapter used to create an API type structure
*/
-public class TypeStructureBuilder extends ClassAdapter {
+public class TypeStructureBuilder extends ClassVisitor {
ApiType fType;
IApiComponent fComponent;
IApiTypeRoot fFile;
@@ -59,13 +54,13 @@
* @param component originating API component or null
if unknown
*/
TypeStructureBuilder(ClassVisitor cv, IApiComponent component, IApiTypeRoot file) {
- super(cv);
+ super(Opcodes.ASM5, cv);
fComponent = component;
fFile = file;
}
- /**
- * @see org.objectweb.asm.ClassAdapter#visit(int, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
+ /* (non-Javadoc)
+ * @see org.objectweb.asm.ClassVisitor#visit(int, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
*/
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
StringBuffer simpleSig = new StringBuffer();
@@ -96,8 +91,9 @@
}
super.visit(version, laccess, name, signature, superName, interfaces);
}
- /**
- * @see org.objectweb.asm.ClassAdapter#visitInnerClass(java.lang.String, java.lang.String, java.lang.String, int)
+
+ /* (non-Javadoc)
+ * @see org.objectweb.asm.ClassVisitor#visitInnerClass(java.lang.String, java.lang.String, java.lang.String, int)
*/
public void visitInnerClass(String name, String outerName, String innerName, int access) {
super.visitInnerClass(name, outerName, innerName, access);
@@ -127,14 +123,14 @@
}
/* (non-Javadoc)
- * @see org.objectweb.asm.ClassAdapter#visitOuterClass(java.lang.String, java.lang.String, java.lang.String)
+ * @see org.objectweb.asm.ClassVisitor#visitOuterClass(java.lang.String, java.lang.String, java.lang.String)
*/
public void visitOuterClass(String owner, String name, String desc) {
fType.setEnclosingMethodInfo(name, desc);
}
/* (non-Javadoc)
- * @see org.objectweb.asm.ClassAdapter#visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
+ * @see org.objectweb.asm.ClassVisitor#visitField(int, java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
*/
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
int laccess = access;
@@ -147,7 +143,7 @@
}
/* (non-Javadoc)
- * @see org.objectweb.asm.ClassAdapter#visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
+ * @see org.objectweb.asm.ClassVisitor#visitMethod(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String[])
*/
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
String[] names = null;
@@ -163,7 +159,7 @@
}
}
final ApiMethod method = fType.addMethod(name, desc, signature, laccess, names);
- return new MethodAdapter(super.visitMethod(laccess, name, desc, signature, exceptions)) {
+ return new MethodVisitor(Opcodes.ASM5, super.visitMethod(laccess, name, desc, signature, exceptions)) {
public AnnotationVisitor visitAnnotation(String sig, boolean visible) {
if (visible && "Ljava/lang/invoke/MethodHandle$PolymorphicSignature;".equals(sig)) { //$NON-NLS-1$
method.isPolymorphic();
@@ -171,18 +167,7 @@
return super.visitAnnotation(sig, visible);
}
public AnnotationVisitor visitAnnotationDefault() {
- return new TraceAnnotationVisitor() {
- public void visitEnd() {
- super.visitEnd();
- StringWriter stringWriter = new StringWriter();
- PrintWriter writer = new PrintWriter(stringWriter);
- print(writer);
- writer.flush();
- writer.close();
- String def = String.valueOf(stringWriter.getBuffer());
- method.setDefaultValue(def);
- }
- };
+ return new AnnotationDefaultVisitor(method);
}
};
}
@@ -201,18 +186,28 @@
try {
ClassReader classReader = new ClassReader(bytes);
classReader.accept(visitor, ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES);
- } catch (ArrayIndexOutOfBoundsException e) {
- if(ApiPlugin.DEBUG_BUILDER) {
- IStatus status = new Status(IStatus.ERROR,
- ApiPlugin.PLUGIN_ID,
- NLS.bind(Messages.TypeStructureBuilder_badClassFileEncountered, file.getTypeName()),
- e);
- ApiPlugin.log(status);
- }
- return null;
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ return logAndReturn(file, e);
+ }
+ catch(IllegalArgumentException iae){
+ //thrown from ASM 5.0 for bad bytcodes
+ return logAndReturn(file, iae);
}
return visitor.fType;
}
+
+ private static IApiType logAndReturn(IApiTypeRoot file, Exception e) {
+ if(ApiPlugin.DEBUG_BUILDER) {
+ IStatus status = new Status(IStatus.ERROR,
+ ApiPlugin.PLUGIN_ID,
+ NLS.bind(Messages.TypeStructureBuilder_badClassFileEncountered, file.getTypeName()),
+ e);
+ ApiPlugin.log(status);
+ }
+ return null;
+ }
+
/**
* Builds a type structure with the given .class file bytes in the specified
* API component.
@@ -241,14 +236,73 @@
}
}
}
- static class EnclosingMethodSetter extends ClassAdapter {
+ /**
+ * Visit the default value for an annotation
+ */
+ static class AnnotationDefaultVisitor extends AnnotationVisitor {
+ ApiMethod method;
+ Object value;
+ StringBuffer buff = new StringBuffer();
+ boolean trace = false;
+ int traceCount = 0;
+
+ public AnnotationDefaultVisitor(ApiMethod method) {
+ super(Opcodes.ASM5);
+ this.method = method;
+ }
+ public void visit(String name, Object value) {
+ if(trace) {
+ appendValue(value);
+ traceCount++;
+ return;
+ }
+ this.value = value;
+ }
+ public AnnotationVisitor visitAnnotation(String name, String desc) {
+ trace = true;
+ return this;
+ }
+ public void visitEnum(String name, String desc, String value) {
+ if(trace) {
+ appendValue(value);
+ traceCount++;
+ return;
+ }
+ this.value = value;
+ }
+ public AnnotationVisitor visitArray(String name) {
+ trace = true;
+ return this;
+ }
+ public void visitEnd() {
+ if(trace) {
+ this.value = buff.toString();
+ traceCount--;
+ trace = traceCount != 0;
+ }
+ else {
+ method.setDefaultValue(this.value == null ? null : this.value.toString());
+ }
+ }
+ void appendValue(Object val) {
+ if(val != null) {
+ if(buff.length() < 1) {
+ buff.append(val.toString());
+ }
+ else {
+ buff.append(',').append(val.toString());
+ }
+ }
+ }
+ }
+ static class EnclosingMethodSetter extends ClassVisitor {
String name;
String signature;
boolean found = false;
String typeName;
public EnclosingMethodSetter(ClassVisitor cv, String typeName) {
- super(cv);
+ super(Opcodes.ASM5, cv);
this.typeName = typeName.replace('.', '/');
}
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
@@ -274,11 +328,11 @@
return null;
}
}
- static class TypeNameFinder extends MethodAdapter {
+ static class TypeNameFinder extends MethodVisitor {
protected EnclosingMethodSetter setter;
public TypeNameFinder(MethodVisitor mv, EnclosingMethodSetter enclosingMethodSetter) {
- super(mv);
+ super(Opcodes.ASM5, mv);
this.setter = enclosingMethodSetter;
}
public void visitTypeInsn(int opcode, String type) {