Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Rennie2012-10-02 20:55:21 +0000
committerMike Rennie2012-10-02 20:55:21 +0000
commit4200791c7c22eab68a5dfeddf9c3a6ad47373cd0 (patch)
tree967c57636bc3577cbb3fb25a2baa3ddba9e792fc
parentc9e86c0aacf8786bc65ff89c7d76960bca2bd124 (diff)
downloadeclipse.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
-rw-r--r--apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF2
-rw-r--r--apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java10
-rw-r--r--apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF2
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceExtractor.java50
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java10
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/SignatureDecoder.java9
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/TypeStructureBuilder.java37
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java12
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java39
-rw-r--r--apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java1
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;
}

Back to the top