### Eclipse Workspace Patch 1.0 #P org.eclipse.pde.api.tools Index: src/org/eclipse/pde/api/tools/internal/builder/IncrementalApiBuilder.java =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IncrementalApiBuilder.java,v retrieving revision 1.3 diff -u -r1.3 IncrementalApiBuilder.java --- src/org/eclipse/pde/api/tools/internal/builder/IncrementalApiBuilder.java 2 Apr 2009 18:38:41 -0000 1.3 +++ src/org/eclipse/pde/api/tools/internal/builder/IncrementalApiBuilder.java 3 Apr 2009 17:16:58 -0000 @@ -349,12 +349,7 @@ if(type == null) { continue; } - this.builder.updateMonitor(monitor, 0); - this.builder.cleanupUnsupportedTagMarkers(file); - this.builder.updateMonitor(monitor, 0); - this.builder.cleanupCompatibilityMarkers(file); - this.builder.updateMonitor(monitor, 0); - this.builder.cleanupUsageMarkers(file); + this.builder.cleanupMarkers(file); this.builder.updateMonitor(monitor, 0); cnames.add(type.getFullyQualifiedName()); try { @@ -376,15 +371,31 @@ IResource resource = project.findMember(ApiAnalysisBuilder.MANIFEST_PATH); if (resource != null) { try { + //TODO we should find a way to cache markers to type names, that way to get all + //the manifest markers for a given type name is time of O(1) IMarker[] markers = resource.findMarkers(IApiMarkerConstants.COMPATIBILITY_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); + String tname = null; for (int i = 0; i < markers.length; i++) { - if(tnames.contains(Util.getTypeNameFromMarker(markers[i]))) { + tname = Util.getTypeNameFromMarker(markers[i]); + if(tnames.contains(tname) || cnames.contains(tname)) { markers[i].delete(); } } + //TODO we should find a way to cache markers to type names, that way to get all + //the manifest markers for a given type name is time of O(1) markers = resource.findMarkers(IApiMarkerConstants.SINCE_TAGS_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); for (int i = 0; i < markers.length; i++) { - if(tnames.contains(Util.getTypeNameFromMarker(markers[i]))) { + tname = Util.getTypeNameFromMarker(markers[i]); + if(tnames.contains(tname) || cnames.contains(tname)) { + markers[i].delete(); + } + } + //TODO we should find a way to cache markers to type names, that way to get all + //the manifest markers for a given type name is time of O(1) + markers = resource.findMarkers(IApiMarkerConstants.UNUSED_FILTER_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); + for (int i = 0; i < markers.length; i++) { + tname = Util.getTypeNameFromMarker(markers[i]); + if(tnames.contains(tname) || cnames.contains(tname)) { markers[i].delete(); } } Index: src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java,v retrieving revision 1.92 diff -u -r1.92 BaseApiAnalyzer.java --- src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java 31 Mar 2009 13:21:02 -0000 1.92 +++ src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java 3 Apr 2009 17:16:58 -0000 @@ -27,7 +27,6 @@ import java.util.jar.JarFile; import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; @@ -292,26 +291,30 @@ if(typenames != null || changedTypes != null) { //incremental Set typeNamesSet = null; + IResource resource = null; if (typenames != null) { typeNamesSet = new HashSet(); for (int i = 0; i < typenames.length; i++) { - String typeName = typenames[i]; - typeNamesSet.add(typeName); - checkUnusedProblemFilters(store, project, typeName); + typeNamesSet.add(typenames[i]); + resource = Util.getResource(project, fJavaProject.findType(typenames[i])); + if(resource != null) { + createUnusedApiFilterProblems(store.getUnusedFilters(resource, typenames[i])); + } } } if (changedTypes != null) { // check the ones not already checked as part of type names check for (int i = 0; i < changedTypes.length; i++) { - String typeName = changedTypes[i]; - if (typeNamesSet == null || !typeNamesSet.remove(typeName)) { - checkUnusedProblemFilters(store, project, typeName); + if (typeNamesSet == null || !typeNamesSet.remove(changedTypes[i])) { + resource = Util.getResource(project, fJavaProject.findType(changedTypes[i])); + if(resource != null) { + createUnusedApiFilterProblems(store.getUnusedFilters(resource, changedTypes[i])); + } } } } } else { //full build, clean up all old markers - project.deleteMarkers(IApiMarkerConstants.UNUSED_FILTER_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE); createUnusedApiFilterProblems(store.getUnusedFilters(null, null)); } } @@ -323,49 +326,6 @@ } } - private void checkUnusedProblemFilters(ApiFilterStore store, - IProject project, String typeName) throws JavaModelException, - CoreException { - IType element = fJavaProject.findType(typeName); - IResource resource = Util.getResource(project, element); - if(resource != null) { - if (!Util.isManifest(resource.getProjectRelativePath())) { - resource.deleteMarkers(IApiMarkerConstants.UNUSED_FILTER_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE); - IResource manifestFile = project.findMember(Util.MANIFEST_PROJECT_RELATIVE_PATH); - if (manifestFile != null) { - try { - IMarker[] markers = manifestFile.findMarkers(IApiMarkerConstants.UNUSED_FILTER_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); - loop: for (int j = 0, max = markers.length; j < max; j++) { - IMarker marker = markers[j]; - String typeNameFromMarker = Util.getTypeNameFromMarker(marker); - if (typeName.equals(typeNameFromMarker)) { - marker.delete(); - continue loop; - } - } - } catch (CoreException e) { - ApiPlugin.log(e.getStatus()); - } - } - } else { - try { - IMarker[] markers = resource.findMarkers(IApiMarkerConstants.UNUSED_FILTER_PROBLEM_MARKER, false, IResource.DEPTH_ZERO); - loop: for (int j = 0, max = markers.length; j < max; j++) { - IMarker marker = markers[j]; - String typeNameFromMarker = Util.getTypeNameFromMarker(marker); - if (typeName.equals(typeNameFromMarker)) { - marker.delete(); - continue loop; - } - } - } catch (CoreException e) { - ApiPlugin.log(e.getStatus()); - } - } - createUnusedApiFilterProblems(store.getUnusedFilters(resource, typeName)); - } - } - /** * Creates a new unused {@link IApiProblemFilter} problem * @param filters the filters to create the problems for @@ -376,9 +336,10 @@ return; } IApiProblemFilter filter = null; + IApiProblem problem = null; for (int i = 0; i < filters.length; i++) { filter = filters[i]; - IApiProblem problem = filter.getUnderlyingProblem(); + problem = filter.getUnderlyingProblem(); if(problem == null) { return; } Index: src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java,v retrieving revision 1.98 diff -u -r1.98 ApiAnalysisBuilder.java --- src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java 31 Mar 2009 13:21:02 -0000 1.98 +++ src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java 3 Apr 2009 17:16:58 -0000 @@ -128,6 +128,7 @@ * @param resource */ void cleanupMarkers(IResource resource) { + cleanUnusedFilterMarkers(resource); cleanupUsageMarkers(resource); cleanupCompatibilityMarkers(resource); cleanupUnsupportedTagMarkers(resource); @@ -183,6 +184,21 @@ } } + /** + * Cleans up the unused API filter problems from the given resource + * @param resource + */ + void cleanUnusedFilterMarkers(IResource resource) { + try { + if(resource != null && resource.isAccessible()) { + resource.deleteMarkers(IApiMarkerConstants.UNUSED_FILTER_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE); + } + } + catch(CoreException ce) { + ApiPlugin.log(ce.getStatus()); + } + } + /* (non-Javadoc) * @see org.eclipse.core.resources.IncrementalProjectBuilder#build(int, java.util.Map, org.eclipse.core.runtime.IProgressMonitor) */ #P org.eclipse.pde.api.tools.tests Index: src/org/eclipse/pde/api/tools/builder/tests/usage/UnusedApiProblemFilterTests.java =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/usage/UnusedApiProblemFilterTests.java,v retrieving revision 1.12 diff -u -r1.12 UnusedApiProblemFilterTests.java --- src/org/eclipse/pde/api/tools/builder/tests/usage/UnusedApiProblemFilterTests.java 28 Mar 2009 17:50:02 -0000 1.12 +++ src/org/eclipse/pde/api/tools/builder/tests/usage/UnusedApiProblemFilterTests.java 3 Apr 2009 17:16:59 -0000 @@ -209,13 +209,13 @@ inc); } -// public void testUnusedFilter2F() throws Exception { -// x2(false); -// } -// -// public void testUnusedFilter2I() throws Exception { -// x2(true); -// } + public void testUnusedFilter2F() throws Exception { + x2(false); + } + + public void testUnusedFilter2I() throws Exception { + x2(true); + } /** * Tests that there is no problem reported for a compilation unit that has been deleted, which has an api