diff options
author | Vikas Chandra | 2018-10-04 11:25:54 +0000 |
---|---|---|
committer | Vikas Chandra | 2018-10-04 17:08:34 +0000 |
commit | 88f712cbd9b15568a81f84030855fedf709b4dfc (patch) | |
tree | f7b1f1d0cb7ae13e0a93c86015c72df363febf3d | |
parent | 6efc10e66a8941995a7428a714337708e8476018 (diff) | |
download | eclipse.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>
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; } |