diff options
author | Mike Rennie | 2012-10-02 20:55:21 +0000 |
---|---|---|
committer | Mike Rennie | 2012-10-02 20:55:21 +0000 |
commit | 4200791c7c22eab68a5dfeddf9c3a6ad47373cd0 (patch) | |
tree | 967c57636bc3577cbb3fb25a2baa3ddba9e792fc | |
parent | c9e86c0aacf8786bc65ff89c7d76960bca2bd124 (diff) | |
download | eclipse.pde.ui-mrennie/bug390930.tar.gz eclipse.pde.ui-mrennie/bug390930.tar.xz eclipse.pde.ui-mrennie/bug390930.zip |
Bug 390930 - adopt asm v4 - part1mrennie/bug390930
10 files changed, 117 insertions, 55 deletions
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 6d2f088ea0..8bc8a23892 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 @@ Require-Bundle: org.eclipse.core.runtime, 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="4.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.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java index c287541b9a..496e07e867 100644 --- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java +++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java @@ -81,8 +81,14 @@ public class BadClassfileTests extends TestCase { public void testClassfileScanner() throws Exception { writePreamble("testClassfileScanner()"); IApiTypeRoot root = container.findTypeRoot(CLASSFILE); - IApiType type = root.getStructure(); - assertNull("The type must be null", type); + try { + IApiType type = root.getStructure(); + assertNull("The type must be null", type); + } + catch(IllegalArgumentException iae) { + return; + } + fail("SHould have gotten an IllegalArgumentException"); } /** 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 015f9c735e..9505b54c48 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 @@ Require-Bundle: org.eclipse.osgi;bundle-version="[3.4.0,4.0.0)", 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="4.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 23e0f9c171..93c4bc1897 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 @@ -34,11 +34,10 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiMethod; 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 @@ import org.objectweb.asm.tree.ClassNode; * * @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 @@ public class ReferenceExtractor extends ClassAdapter { * MethodSignature = (visitFormalTypeParameter visitClassBound? visitInterfaceBound* )* (visitParameterType visitReturnType visitExceptionType* ) * TypeSignature = visitBaseType | visitTypeVariable | visitArrayType | (visitClassType visitTypeArgument* (visitInnerClassType visitTypeArgument* )* visitEnd</tt> ) ) */ - class ClassFileSignatureVisitor implements SignatureVisitor { + class ClassFileSignatureVisitor extends SignatureVisitor { protected int kind = -1; protected int originalkind = -1; @@ -72,6 +71,7 @@ public class ReferenceExtractor extends ClassAdapter { protected List references; public ClassFileSignatureVisitor() { + super(Opcodes.ASM4); this.references = new ArrayList(); } @@ -222,7 +222,7 @@ public class ReferenceExtractor extends ClassAdapter { * Visitor used to visit the methods of a type * [ visitCode ( visitFrame | visit<i>X</i>Insn | visitLabel | visitTryCatchBlock | visitLocalVariable | visitLineNumber)* visitMaxs ] visitEnd */ - class ClassFileMethodVisitor extends MethodAdapter { + class ClassFileMethodVisitor extends MethodVisitor { int argumentcount = 0; LinePositionTracker linePositionTracker; /** @@ -241,7 +241,7 @@ public class ReferenceExtractor extends ClassAdapter { * @param mv */ public ClassFileMethodVisitor(MethodVisitor mv, String name, int argumentcount) { - super(mv); + super(Opcodes.ASM4, mv); this.argumentcount = argumentcount; this.linePositionTracker = new LinePositionTracker(); this.lastLineNumber = -1; @@ -264,10 +264,13 @@ public class ReferenceExtractor extends ClassAdapter { */ public void visitVarInsn(int opcode, int var) { switch(opcode) { - case Opcodes.ASTORE : + case Opcodes.ASTORE : { if (this.lastLineNumber != -1) { this.localVariableMarker = new LocalLineNumberMarker(this.lastLineNumber, var); } + break; + } + default: return; } } @@ -277,19 +280,21 @@ public class ReferenceExtractor extends ClassAdapter { public void visitFieldInsn(int opcode, String owner, String name, String desc) { int refType = -1; switch (opcode) { - case Opcodes.PUTSTATIC: - refType = IReference.REF_PUTSTATIC; - break; - case Opcodes.PUTFIELD: - refType = IReference.REF_PUTFIELD; - break; - case Opcodes.GETSTATIC: - refType = IReference.REF_GETSTATIC; - break; - case Opcodes.GETFIELD: - refType = IReference.REF_GETFIELD; - break; + case Opcodes.PUTSTATIC: + refType = IReference.REF_PUTSTATIC; + break; + case Opcodes.PUTFIELD: + refType = IReference.REF_PUTFIELD; + break; + case Opcodes.GETSTATIC: + refType = IReference.REF_GETSTATIC; + break; + case Opcodes.GETFIELD: + refType = IReference.REF_GETFIELD; + break; + default: break; } + if (refType != -1) { Reference reference = ReferenceExtractor.this.addFieldReference(Type.getObjectType(owner), name, refType); if (reference != null) { @@ -386,6 +391,7 @@ public class ReferenceExtractor extends ClassAdapter { kind = IReference.REF_INTERFACEMETHOD; break; } + default: break; } if(kind != -1) { Reference reference = ReferenceExtractor.this.addMethodReference(declaringType, name, desc, kind); @@ -482,7 +488,9 @@ public class ReferenceExtractor extends ClassAdapter { this.linePositionTracker.addLocation((Reference) iterator.next()); } } + break; } + default: break; } if(kind != -1) { Reference reference = ReferenceExtractor.this.addTypeReference(type, kind); @@ -883,7 +891,7 @@ public class ReferenceExtractor extends ClassAdapter { * @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.ASM4, new ClassNode()); fType = type; this.collector = collector; fReferenceKinds = referenceKinds; @@ -899,7 +907,7 @@ public class ReferenceExtractor extends ClassAdapter { * @param tracker */ protected ReferenceExtractor(IApiType type, Set collector, int referenceKinds, FieldTracker tracker) { - super(new ClassNode()); + super(Opcodes.ASM4, 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/ClassFileComparator.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java index 5251a128ee..9fb44115a8 100644 --- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java +++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java @@ -992,6 +992,7 @@ public class ClassFileComparator { buffer = new StringBuffer(); buffer.append(type.getName()).append('.').append(member.getName()); return String.valueOf(buffer); + default: break; } return null; } @@ -3335,10 +3336,11 @@ public class ClassFileComparator { */ private int getElementType(IApiMember member) { switch (member.getType()) { - case IApiElement.TYPE: - return getElementType((IApiType)member); - case IApiElement.METHOD: - return getElementType((IApiMethod)member); + case IApiElement.TYPE: + return getElementType((IApiType)member); + case IApiElement.METHOD: + return getElementType((IApiMethod)member); + default: break; } return IDelta.FIELD_ELEMENT_TYPE; } 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 0f861c775e..69988e391b 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, 2012 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 @@ final class SignatureDecoder implements SignatureVisitor { SignatureDescriptor signatureDescriptor; public SignatureDecoder(SignatureDescriptor signatureDescriptor) { + super(Opcodes.ASM4); this.signatureDescriptor = signatureDescriptor; } public SignatureVisitor visitArrayType() { @@ -60,6 +62,7 @@ final class SignatureDecoder implements SignatureVisitor { case NORMAL_TYPE_ARGUMENT : this.signatureDescriptor.addTypeArgument(classTypeName); break; + default: break; } this.mode = DEFAULT; } @@ -115,6 +118,8 @@ final class SignatureDecoder implements SignatureVisitor { 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/TypeStructureBuilder.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/TypeStructureBuilder.java index 4ce62637ca..47a2907b71 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 @@ -14,8 +14,6 @@ package org.eclipse.pde.api.tools.internal.model; 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; @@ -27,21 +25,18 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent; 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; @@ -56,7 +51,7 @@ public class TypeStructureBuilder extends ClassAdapter { * @param component originating API component or <code>null</code> if unknown */ TypeStructureBuilder(ClassVisitor cv, IApiComponent component, IApiTypeRoot file) { - super(cv); + super(Opcodes.ASM4, cv); fComponent = component; fFile = file; } @@ -160,7 +155,7 @@ public class TypeStructureBuilder extends ClassAdapter { } } final ApiMethod method = fType.addMethod(name, desc, signature, laccess, names); - return new MethodAdapter(super.visitMethod(laccess, name, desc, signature, exceptions)) { + return new MethodVisitor(Opcodes.ASM4, 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(); @@ -168,17 +163,11 @@ public class TypeStructureBuilder extends ClassAdapter { return super.visitAnnotation(sig, visible); } public AnnotationVisitor visitAnnotationDefault() { - return new TraceAnnotationVisitor() { + return new AnnotationVisitor(Opcodes.ASM4) { 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); - } + //TODO need to figure out how to get the default value + //method.setDefaultValue(def); + }; }; } }; @@ -201,6 +190,10 @@ public class TypeStructureBuilder extends ClassAdapter { } catch (ArrayIndexOutOfBoundsException e) { ApiPlugin.log(e); } + catch(IllegalArgumentException iae) { + ApiPlugin.log(iae); + return null; + } return visitor.fType; } /** @@ -231,14 +224,14 @@ public class TypeStructureBuilder extends ClassAdapter { } } } - static class EnclosingMethodSetter extends ClassAdapter { + static class EnclosingMethodSetter extends ClassVisitor { String name; String signature; boolean found = false; String typeName; public EnclosingMethodSetter(ClassVisitor cv, String typeName) { - super(cv); + super(Opcodes.ASM4, cv); this.typeName = typeName.replace('.', '/'); } public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { @@ -264,11 +257,11 @@ public class TypeStructureBuilder extends ClassAdapter { 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.ASM4, mv); this.setter = enclosingMethodSetter; } public void visitTypeInsn(int opcode, String type) { diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java index a46dff0f37..acd706385d 100644 --- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java +++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java @@ -153,6 +153,7 @@ public class TagScanner { } break; } + default: break; } } return false; @@ -299,6 +300,7 @@ public class TagScanner { } break; } + default: break; } return pruned; } @@ -517,7 +519,15 @@ public class TagScanner { } throw new CoreException(new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, MessageFormat.format("Error reading compilation unit: {0}", new String[]{source.getName()}), e)); //$NON-NLS-1$ - } finally { + } + catch(IllegalArgumentException iae) { + if (ApiPlugin.DEBUG_TAG_SCANNER) { + System.err.println(source.getName()); + } + throw new CoreException(new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, + MessageFormat.format("Error reading compilation unit: {0}", new String[]{source.getName()}), iae)); //$NON-NLS-1$ + } + finally { if (inputStream != null) { try { inputStream.close(); diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java index 967c17a3c5..9e650ca9af 100644 --- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java +++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java @@ -19,6 +19,7 @@ import org.eclipse.pde.api.tools.internal.builder.Reference; import org.eclipse.pde.api.tools.internal.builder.ReferenceAnalyzer; import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin; import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations; +import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore; import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers; import org.eclipse.pde.api.tools.internal.provisional.builder.IApiProblemDetector; import org.eclipse.pde.api.tools.internal.provisional.builder.IReference; @@ -29,6 +30,7 @@ import org.eclipse.pde.api.tools.internal.provisional.model.IApiMember; import org.eclipse.pde.api.tools.internal.provisional.model.IApiScope; import org.eclipse.pde.api.tools.internal.provisional.model.IApiType; import org.eclipse.pde.api.tools.internal.provisional.model.IApiTypeContainer; +import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem; import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchRequestor; /** @@ -47,6 +49,18 @@ public class UseSearchRequestor implements IApiSearchRequestor { private Set fComponentIds = null; /** + * The current {@link IApiFilterStore} from the current {@link IApiComponent} context we are visiting + */ + private IApiFilterStore currentStore = null; + + /** + * An {@link IApiFilterStore} that was set from an external source + * + * @see #setGlobalFilterStore + */ + private IApiFilterStore globalStore = null; + + /** * The mask to use while searching */ private int fSearchMask = 0; @@ -94,12 +108,14 @@ public class UseSearchRequestor implements IApiSearchRequestor { if(includesIllegalUse()) { fAnalyzer.buildProblemDetectors(component, ProblemDetectorBuilder.K_USE, null); } + currentStore = component.getFilterStore(); return true; } } catch(CoreException ce) { //do nothing, return false } + currentStore = null; return false; } @@ -195,7 +211,10 @@ public class UseSearchRequestor implements IApiSearchRequestor { Reference ref = (Reference) reference; ref.setFlags(IReference.F_ILLEGAL); try { - ref.addProblems(((AbstractProblemDetector)detectors[i]).createProblem(reference)); + IApiProblem pb = ((AbstractProblemDetector)detectors[i]).createProblem(reference); + if(!isFiltered(pb)) { + ref.addProblems(pb); + } } catch (CoreException e) { ApiPlugin.log(e); } @@ -205,6 +224,16 @@ public class UseSearchRequestor implements IApiSearchRequestor { return false; } + /** + * Returns if the given problem is filtered + * @param problem + * @return <code>true</code> is filtered, false otherwise + */ + boolean isFiltered(IApiProblem problem) throws CoreException { + return (currentStore != null && currentStore.isFiltered(problem)) || + (globalStore != null && globalStore.isFiltered(problem)); + } + /* (non-Javadoc) * @see org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchRequestor#getReferenceKinds() */ @@ -260,4 +289,12 @@ public class UseSearchRequestor implements IApiSearchRequestor { public void setJarPatterns(String[] patterns) { jarPatterns = patterns; } + + /** + * Allows a global {@link IApiFilterStore} to be used to filter all references found during the scan + * @param store the store to set or <code>null</code> to remove the store + */ + public void setGlobalFilterStore(IApiFilterStore store) { + globalStore = store; + } } diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java index a77df21cde..98aa3ae838 100644 --- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java +++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java @@ -664,6 +664,7 @@ public final class Util { return "CLASS_ELEMENT_TYPE"; //$NON-NLS-1$ case IDelta.TYPE_PARAMETER_ELEMENT_TYPE : return "TYPE_PARAMETER_ELEMENT_TYPE"; //$NON-NLS-1$ + default: break; } return UNKNOWN_ELEMENT_KIND; } |