Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVikas Chandra2018-10-04 11:25:54 +0000
committerVikas Chandra2018-10-04 17:08:34 +0000
commit88f712cbd9b15568a81f84030855fedf709b4dfc (patch)
treef7b1f1d0cb7ae13e0a93c86015c72df363febf3d
parent6efc10e66a8941995a7428a714337708e8476018 (diff)
downloadeclipse.pde.ui-88f712cbd9b15568a81f84030855fedf709b4dfc.tar.gz
eclipse.pde.ui-88f712cbd9b15568a81f84030855fedf709b4dfc.tar.xz
eclipse.pde.ui-88f712cbd9b15568a81f84030855fedf709b4dfc.zip
Bug 539598 - 281 API tools junit failures with I20180927-0135 with JavaI20181004-1800
11 Change-Id: I23980d72391417ba5488f3ff09211c794ce80190 Signed-off-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java10
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/SignatureDecoder.java2
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/TypeStructureBuilder.java79
3 files changed, 73 insertions, 18 deletions
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 878e9e3f20..2fe807ba95 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
@@ -82,7 +82,7 @@ public class ReferenceExtractor extends ClassVisitor {
protected List<Reference> references;
public ClassFileSignatureVisitor() {
- super(Opcodes.ASM7_EXPERIMENTAL);
+ super(Opcodes.ASM6);
this.references = new ArrayList<>();
}
@@ -250,7 +250,7 @@ public class ReferenceExtractor extends ClassVisitor {
* @param mv
*/
public ClassFileMethodVisitor(MethodVisitor mv, String name, int argumentcount) {
- super(Opcodes.ASM7_EXPERIMENTAL, mv);
+ super(Opcodes.ASM6, mv);
this.argumentcount = argumentcount;
this.linePositionTracker = new LinePositionTracker();
this.lastLineNumber = -1;
@@ -634,7 +634,7 @@ public class ReferenceExtractor extends ClassVisitor {
class ClassFileFieldVisitor extends FieldVisitor {
ClassFileFieldVisitor() {
- super(Opcodes.ASM7_EXPERIMENTAL);
+ super(Opcodes.ASM6);
}
@Override
@@ -990,7 +990,7 @@ public class ReferenceExtractor extends ClassVisitor {
* {@link ReferenceModifiers}
*/
public ReferenceExtractor(IApiType type, Set<Reference> collector, int referenceKinds) {
- super(Opcodes.ASM7_EXPERIMENTAL, new ClassNode());
+ super(Opcodes.ASM6, new ClassNode());
fType = type;
this.collector = collector;
fReferenceKinds = referenceKinds;
@@ -1007,7 +1007,7 @@ public class ReferenceExtractor extends ClassVisitor {
* @param tracker
*/
protected ReferenceExtractor(IApiType type, Set<Reference> collector, int referenceKinds, FieldTracker tracker) {
- super(Opcodes.ASM7_EXPERIMENTAL, new ClassNode());
+ super(Opcodes.ASM6, 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 097f46d99d..490598b7b9 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
@@ -32,7 +32,7 @@ final class SignatureDecoder extends SignatureVisitor {
SignatureDescriptor signatureDescriptor;
public SignatureDecoder(SignatureDescriptor signatureDescriptor) {
- super(Opcodes.ASM7_EXPERIMENTAL);
+ super(Opcodes.ASM6);
this.signatureDescriptor = signatureDescriptor;
}
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 a068b02358..e5b6babb93 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
@@ -17,6 +17,8 @@ package org.eclipse.pde.api.tools.internal.model;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
+import java.util.Arrays;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
@@ -24,6 +26,11 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
+import org.eclipse.jdt.launching.AbstractVMInstall;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.api.tools.internal.model.StubArchiveApiTypeContainer.ArchiveApiTypeRoot;
import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
@@ -48,20 +55,34 @@ public class TypeStructureBuilder extends ClassVisitor {
IApiTypeRoot fFile;
/**
- * Builds a type structure for a class file. Note that if an API component
- * is not specified, then some operations on the resulting {@link IApiType}
- * will not be available (navigating super types, member types, etc).
+ * Builds a type structure for a class file. Note that if an API component is
+ * not specified, then some operations on the resulting {@link IApiType} will
+ * not be available (navigating super types, member types, etc). This
+ * constructor uses ASM7_EXPERIMENTAL
*
- * @param cv class file visitor
- * @param component originating API component or <code>null</code> if
- * unknown
+ * @param cv class file visitor
+ * @param component originating API component or <code>null</code> if unknown
*/
- TypeStructureBuilder(ClassVisitor cv, IApiComponent component, IApiTypeRoot file) {
+ TypeStructureBuilder(boolean useExperimental, ClassVisitor cv, IApiComponent component, IApiTypeRoot file) {
super(Opcodes.ASM7_EXPERIMENTAL, cv);
fComponent = component;
fFile = file;
}
+ /**
+ * Builds a type structure for a class file. Note that if an API component is
+ * not specified, then some operations on the resulting {@link IApiType} will
+ * not be available (navigating super types, member types, etc).
+ *
+ * @param cv class file visitor
+ * @param component originating API component or <code>null</code> if unknown
+ */
+ TypeStructureBuilder(ClassVisitor cv, IApiComponent component, IApiTypeRoot file) {
+ super(Opcodes.ASM6, cv);
+ fComponent = component;
+ fFile = file;
+ }
+
@Override
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
StringBuilder simpleSig = new StringBuilder();
@@ -154,7 +175,7 @@ public class TypeStructureBuilder extends ClassVisitor {
}
}
final ApiMethod method = fType.addMethod(name, desc, signature, laccess, names);
- return new MethodVisitor(Opcodes.ASM7_EXPERIMENTAL,
+ return new MethodVisitor(Opcodes.ASM6,
super.visitMethod(laccess, name, desc, signature, exceptions)) {
@Override
public AnnotationVisitor visitAnnotation(String sig, boolean visible) {
@@ -190,7 +211,7 @@ public class TypeStructureBuilder extends ClassVisitor {
int traceCount = 0;
public AnnotationDefaultVisitor(ApiMethod method) {
- super(Opcodes.ASM7_EXPERIMENTAL);
+ super(Opcodes.ASM6);
this.method = method;
}
@@ -258,7 +279,41 @@ public class TypeStructureBuilder extends ClassVisitor {
* @return
*/
public static IApiType buildTypeStructure(byte[] bytes, IApiComponent component, IApiTypeRoot file) {
- TypeStructureBuilder visitor = new TypeStructureBuilder(new ClassNode(), component, file);
+ boolean useExperimental = false;
+ try {
+ String[] executionEnvironments = component.getExecutionEnvironments();
+ if (executionEnvironments.length == 1) {
+ String string = executionEnvironments[0];
+ IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
+ IExecutionEnvironment env = manager.getEnvironment(string);
+ IVMInstall[] compatibleVMs = env.getCompatibleVMs();
+ Arrays.sort(compatibleVMs, new Comparator<IVMInstall>() {
+ @Override
+ public int compare(IVMInstall o1, IVMInstall o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+ });
+ for (IVMInstall ivmInstall : compatibleVMs) {
+ if (ivmInstall instanceof AbstractVMInstall) {
+ String javaVersion = ((AbstractVMInstall) ivmInstall).getJavaVersion();
+ if (javaVersion.equals("11")) { //$NON-NLS-1$
+ useExperimental = true;
+ }
+ break; // take the 1st one
+ }
+ }
+
+ }
+
+ } catch (Exception e1) {
+ // do nothing
+ }
+ // Till ASM7 is incorporated, use ASM7_EXPERIMENTAL to
+ // avoidOperationUnsupportedException if Java 11 is on build path. If not Java
+ // 11 then use ASM6
+ TypeStructureBuilder visitor = useExperimental
+ ? new TypeStructureBuilder(useExperimental, new ClassNode(), component, file)
+ : new TypeStructureBuilder(new ClassNode(), component, file);
try {
ClassReader classReader = new ClassReader(bytes);
classReader.accept(visitor, ClassReader.SKIP_CODE | ClassReader.SKIP_FRAMES);
@@ -308,7 +363,7 @@ public class TypeStructureBuilder extends ClassVisitor {
String typeName;
public EnclosingMethodSetter(ClassVisitor cv, String typeName) {
- super(Opcodes.ASM7_EXPERIMENTAL, cv);
+ super(Opcodes.ASM6, cv);
this.typeName = typeName.replace('.', '/');
}
@@ -341,7 +396,7 @@ public class TypeStructureBuilder extends ClassVisitor {
protected EnclosingMethodSetter setter;
public TypeNameFinder(MethodVisitor mv, EnclosingMethodSetter enclosingMethodSetter) {
- super(Opcodes.ASM7_EXPERIMENTAL, mv);
+ super(Opcodes.ASM6, mv);
this.setter = enclosingMethodSetter;
}

Back to the top