### 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.8 diff -u -r1.8 IncrementalApiBuilder.java --- src/org/eclipse/pde/api/tools/internal/builder/IncrementalApiBuilder.java 22 Apr 2009 16:07:48 -0000 1.8 +++ src/org/eclipse/pde/api/tools/internal/builder/IncrementalApiBuilder.java 29 Apr 2009 15:51:05 -0000 @@ -172,9 +172,9 @@ try { SubMonitor localmonitor = SubMonitor.convert(monitor, BuilderMessages.api_analysis_on_0, 6); collectAffectedSourceFiles(project, state); - this.builder.updateMonitor(localmonitor, 1); + Util.updateMonitor(localmonitor, 1); localmonitor.subTask(NLS.bind(BuilderMessages.ApiAnalysisBuilder_finding_affected_source_files, project.getName())); - this.builder.updateMonitor(localmonitor, 0); + Util.updateMonitor(localmonitor, 0); if (this.context.hasTypes()) { IPluginModelBase currentModel = this.builder.getCurrentModel(); if (currentModel != null) { @@ -184,7 +184,7 @@ return; } extClean(project, buildstate, localmonitor.newChild(1)); - this.builder.updateMonitor(localmonitor, 1); + Util.updateMonitor(localmonitor, 1); this.builder.getAnalyzer().analyzeComponent(buildstate, null, null, @@ -192,9 +192,9 @@ comp, this.context, localmonitor.newChild(1)); - this.builder.updateMonitor(localmonitor, 1); + Util.updateMonitor(localmonitor, 1); this.builder.createMarkers(); - this.builder.updateMonitor(localmonitor, 1); + Util.updateMonitor(localmonitor, 1); } } } @@ -376,7 +376,7 @@ for (int i = 0; i < types.length; i++) { state.cleanup(types[i]); } - this.builder.updateMonitor(monitor, 0); + Util.updateMonitor(monitor, 0); IResource resource = project.findMember(ApiAnalysisBuilder.MANIFEST_PATH); if (resource != null) { try { @@ -390,7 +390,7 @@ markers[i].delete(); } } - this.builder.updateMonitor(monitor, 0); + Util.updateMonitor(monitor, 0); //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); @@ -400,7 +400,7 @@ markers[i].delete(); } } - this.builder.updateMonitor(monitor, 0); + Util.updateMonitor(monitor, 0); } catch (CoreException e) { ApiPlugin.log(e); } 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.104 diff -u -r1.104 ApiAnalysisBuilder.java --- src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java 22 Apr 2009 16:07:48 -0000 1.104 +++ src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java 29 Apr 2009 15:51:04 -0000 @@ -29,7 +29,6 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jdt.core.IClasspathAttribute; @@ -208,7 +207,7 @@ if (DEBUG) { System.out.println("\nStarting build of " + this.currentproject.getName() + " @ " + new Date(System.currentTimeMillis())); //$NON-NLS-1$ //$NON-NLS-2$ } - updateMonitor(monitor, 0); + Util.updateMonitor(monitor, 0); SubMonitor localMonitor = SubMonitor.convert(monitor, BuilderMessages.api_analysis_builder, 8); IApiBaseline wbaseline = ApiPlugin.getDefault().getApiBaselineManager().getWorkspaceBaseline(); if (wbaseline == null) { @@ -277,7 +276,7 @@ } } } - updateMonitor(monitor, 0); + Util.updateMonitor(monitor, 0); } catch(CoreException e) { IStatus status = e.getStatus(); if (status == null || status.getCode() != ApiPlugin.REPORT_BASELINE_IS_DISPOSED) { @@ -285,7 +284,7 @@ } ApiPlugin.log(e); } finally { - updateMonitor(monitor, 0); + Util.updateMonitor(monitor, 0); if(this.analyzer != null) { this.analyzer.dispose(); this.analyzer = null; @@ -297,7 +296,7 @@ baseline.close(); } } - updateMonitor(monitor, 0); + Util.updateMonitor(monitor, 0); if (this.buildstate != null) { for(int i = 0, max = projects.length; i < max; i++) { IProject project = projects[i]; @@ -307,7 +306,7 @@ } BuildState.saveBuiltState(this.currentproject, this.buildstate); this.buildstate = null; - updateMonitor(monitor, 0); + Util.updateMonitor(monitor, 0); } if(monitor != null) { monitor.done(); @@ -356,15 +355,15 @@ IPluginModelBase currentModel = getCurrentModel(); if (currentModel != null) { localMonitor.subTask(BuilderMessages.building_workspace_profile); - updateMonitor(localMonitor, 1); + Util.updateMonitor(localMonitor, 1); String id = currentModel.getBundleDescription().getSymbolicName(); // Compatibility checks IApiComponent apiComponent = wbaseline.getApiComponent(id); if(apiComponent != null) { getAnalyzer().analyzeComponent(this.buildstate, null, null, baseline, apiComponent, new BuildContext(), localMonitor.newChild(1)); - updateMonitor(localMonitor, 1); + Util.updateMonitor(localMonitor, 1); createMarkers(); - updateMonitor(localMonitor, 1); + Util.updateMonitor(localMonitor, 1); } } } @@ -549,22 +548,6 @@ return buff.toString(); } - /** - * Updates the given monitor with the given tick count and polls for cancellation. If the monitor - * is cancelled an {@link OperationCanceledException} is thrown - * @param monitor - * @param ticks - * @throws OperationCanceledException - */ - void updateMonitor(IProgressMonitor monitor, int ticks) throws OperationCanceledException { - if(monitor != null) { - monitor.worked(ticks); - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } - } - } - /* (non-Javadoc) * @see org.eclipse.core.resources.IncrementalProjectBuilder#clean(org.eclipse.core.runtime.IProgressMonitor) */ @@ -577,10 +560,10 @@ cleanupCompatibilityMarkers(this.currentproject); cleanupUnsupportedTagMarkers(this.currentproject); this.currentproject.deleteMarkers(IApiMarkerConstants.UNUSED_FILTER_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE); - updateMonitor(localmonitor, 1); + Util.updateMonitor(localmonitor, 1); //clean up the .api_settings cleanupApiDescription(this.currentproject); - updateMonitor(localmonitor, 1); + Util.updateMonitor(localmonitor, 1); } finally { BuildState.setLastBuiltState(this.currentproject, null); Index: src/org/eclipse/pde/api/tools/internal/util/Util.java =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java,v retrieving revision 1.128 diff -u -r1.128 Util.java --- src/org/eclipse/pde/api/tools/internal/util/Util.java 22 Apr 2009 16:07:48 -0000 1.128 +++ src/org/eclipse/pde/api/tools/internal/util/Util.java 29 Apr 2009 15:51:05 -0000 @@ -1012,6 +1012,24 @@ return null; } + /** + * Updates a given progress monitor the given amount of work. + * Throws an {@link OperationCanceledException} if the monitor has been canceled. + * + * @param monitor + * @param work + * @throws OperationCanceledException + */ + public static void updateMonitor(IProgressMonitor monitor, int work) throws OperationCanceledException { + if(monitor == null) { + return; + } + if(monitor.isCanceled()) { + throw new OperationCanceledException(); + } + monitor.worked(work); + } + private static IMember getMethod(IType type, String key) { boolean isGeneric = false; int indexOfTypeVariable = key.indexOf('<'); #P org.eclipse.pde.api.tools.ui Index: src/org/eclipse/pde/api/tools/ui/internal/markers/markermessages.properties =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/markermessages.properties,v retrieving revision 1.24 diff -u -r1.24 markermessages.properties --- src/org/eclipse/pde/api/tools/ui/internal/markers/markermessages.properties 28 Apr 2009 19:07:23 -0000 1.24 +++ src/org/eclipse/pde/api/tools/ui/internal/markers/markermessages.properties 29 Apr 2009 15:51:07 -0000 @@ -44,6 +44,7 @@ SinceTagResolution_invalid1=Change @since tag value to be {0} SinceTagResolution_invalid2=Change @since tag value to be {0} UnsupportedTagResolution_remove_unsupported_tag=Remove unsupported ''{0}'' tag. +UnsupportedTagResolution_remove_unsupported_tags=Remove unsupported Javadoc tags UpdateSinceTagOperation_title=Update @since tag UpdateProjectSettingsResolution_0=Set problem severity to ''Ignore'' : {0} UpdateProjectSettingsOperation_0=Set problem severity to ''Ignore'' : {0} Index: src/org/eclipse/pde/api/tools/ui/internal/markers/UnsupportedTagResolution.java =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/UnsupportedTagResolution.java,v retrieving revision 1.3 diff -u -r1.3 UnsupportedTagResolution.java --- src/org/eclipse/pde/api/tools/ui/internal/markers/UnsupportedTagResolution.java 5 Nov 2008 20:03:53 -0000 1.3 +++ src/org/eclipse/pde/api/tools/ui/internal/markers/UnsupportedTagResolution.java 29 Apr 2009 15:51:07 -0000 @@ -10,27 +10,28 @@ *******************************************************************************/ package org.eclipse.pde.api.tools.ui.internal.markers; +import java.util.HashSet; + import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; import org.eclipse.osgi.util.NLS; import org.eclipse.pde.api.tools.internal.provisional.IApiMarkerConstants; +import org.eclipse.pde.api.tools.internal.util.Util; import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin; import org.eclipse.pde.api.tools.ui.internal.IApiToolsConstants; import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.IMarkerResolution2; -import org.eclipse.ui.progress.UIJob; +import org.eclipse.ui.views.markers.WorkbenchMarkerResolution; /** * Marker resolution for unsupported API Javadoc tags * * @since 1.0.0 */ -public class UnsupportedTagResolution implements IMarkerResolution2 { +public class UnsupportedTagResolution extends WorkbenchMarkerResolution { protected IMarker fBackingMarker = null; + private boolean plural = false; /** * Constructor @@ -44,6 +45,9 @@ * @see org.eclipse.ui.IMarkerResolution2#getDescription() */ public String getDescription() { + if(this.plural) { + return MarkerMessages.UnsupportedTagResolution_remove_unsupported_tags; + } return getLabel(); } @@ -58,6 +62,9 @@ * @see org.eclipse.ui.IMarkerResolution#getLabel() */ public String getLabel() { + if(this.plural) { + return getDescription(); + } try { String arg = (String) fBackingMarker.getAttribute(IApiMarkerConstants.MARKER_ATTR_MESSAGE_ARGUMENTS); String[] args = arg.split("#"); //$NON-NLS-1$ @@ -71,15 +78,32 @@ * @see org.eclipse.ui.IMarkerResolution#run(org.eclipse.core.resources.IMarker) */ public void run(IMarker marker) { - UIJob job = new UIJob(getLabel()) { - public IStatus runInUIThread(IProgressMonitor monitor) { - RemoveUnsupportedTagOperation op = new RemoveUnsupportedTagOperation(fBackingMarker); - op.run(monitor); - return Status.OK_STATUS; - } - }; - job.setSystem(true); - job.schedule(); + RemoveUnsupportedTagOperation op = new RemoveUnsupportedTagOperation(new IMarker[] {marker}); + op.schedule(); } + /* (non-Javadoc) + * @see org.eclipse.ui.views.markers.WorkbenchMarkerResolution#run(org.eclipse.core.resources.IMarker[], org.eclipse.core.runtime.IProgressMonitor) + */ + public void run(IMarker[] markers, IProgressMonitor monitor) { + RemoveUnsupportedTagOperation op = new RemoveUnsupportedTagOperation(markers); + op.schedule(); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.views.markers.WorkbenchMarkerResolution#findOtherMarkers(org.eclipse.core.resources.IMarker[]) + */ + public IMarker[] findOtherMarkers(IMarker[] markers) { + HashSet mset = new HashSet(markers.length); + for (int i = 0; i < markers.length; i++) { + if(Util.isApiProblemMarker(markers[i]) && + !fBackingMarker.equals(markers[i]) && + markers[i].getAttribute(IApiMarkerConstants.API_MARKER_ATTR_ID, -1) == IApiMarkerConstants.UNSUPPORTED_TAG_MARKER_ID) { + mset.add(markers[i]); + } + } + int size = mset.size(); + plural = size > 0; + return (IMarker[]) mset.toArray(new IMarker[size]); + } } Index: src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedTagOperation.java =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedTagOperation.java,v retrieving revision 1.5 diff -u -r1.5 RemoveUnsupportedTagOperation.java --- src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedTagOperation.java 5 Nov 2008 20:03:53 -0000 1.5 +++ src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedTagOperation.java 29 Apr 2009 15:51:07 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008 IBM Corporation and others. + * Copyright (c) 2008, 2009 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,15 +10,19 @@ *******************************************************************************/ package org.eclipse.pde.api.tools.ui.internal.markers; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; @@ -34,119 +38,116 @@ import org.eclipse.jdt.core.dom.rewrite.ListRewrite; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.pde.api.tools.internal.provisional.IApiMarkerConstants; +import org.eclipse.pde.api.tools.internal.util.Util; import org.eclipse.text.edits.TextEdit; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.progress.UIJob; /** * The operation for removing an unsupported API Javadoc tag from a member * * @since 1.0.0 */ -public class RemoveUnsupportedTagOperation { +public class RemoveUnsupportedTagOperation extends UIJob { /** * The backing marker for the quick-fix */ - private IMarker fBackingMarker = null; + private IMarker[] markers = null; /** * Constructor * @param marker */ - public RemoveUnsupportedTagOperation(IMarker marker) { - fBackingMarker = marker; + public RemoveUnsupportedTagOperation(IMarker[] markers) { + super(MarkerMessages.UnsupportedTagResolution_remove_unsupported_tags); + this.markers = markers; } - - /** - * Runs the operation reporting progress to the supplied monitor - * @param monitor + + /* (non-Javadoc) + * @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor) */ - public void run(IProgressMonitor monitor) { - if(monitor != null && monitor.isCanceled()) { - return; - } - IProgressMonitor localMonitor = SubMonitor.convert(monitor, MarkerMessages.RemoveUnsupportedTagOperation_removeing_unsupported_tag, 5); - // retrieve the AST node compilation unit - IResource resource = fBackingMarker.getResource(); - IJavaElement javaElement = JavaCore.create(resource); - try { - if (javaElement != null && javaElement.getElementType() == IJavaElement.COMPILATION_UNIT) { - ICompilationUnit compilationUnit = (ICompilationUnit) javaElement; - if (!compilationUnit.isWorkingCopy()) { - // open an editor of the corresponding unit to "show" the quick-fix change - JavaUI.openInEditor(compilationUnit); - } - if(localMonitor.isCanceled()) { - return; - } - localMonitor.worked(1); - ASTParser parser = ASTParser.newParser(AST.JLS3); - parser.setSource(compilationUnit); - Integer charStartAttribute = null; - charStartAttribute = (Integer) fBackingMarker.getAttribute(IMarker.CHAR_START); - int intValue = charStartAttribute.intValue(); - parser.setFocalPosition(intValue); - Map options = compilationUnit.getJavaProject().getOptions(true); - options.put(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, JavaCore.ENABLED); - parser.setCompilerOptions(options); - final CompilationUnit unit = (CompilationUnit) parser.createAST(new NullProgressMonitor()); - NodeFinder finder = new NodeFinder(intValue); - unit.accept(finder); - if(localMonitor.isCanceled()) { - return; - } - localMonitor.worked(1); - BodyDeclaration node = finder.getNode(); - if (node != null) { - unit.recordModifications(); - AST ast = unit.getAST(); - ASTRewrite rewrite = ASTRewrite.create(ast); - Javadoc docnode = node.getJavadoc(); - if (docnode == null) { - return; - } else { - List tags = docnode.tags(); - String arg = (String) fBackingMarker.getAttribute(IApiMarkerConstants.MARKER_ATTR_MESSAGE_ARGUMENTS); - String[] args = arg.split("#"); //$NON-NLS-1$ - TagElement tag = null; - for (Iterator iterator = tags.iterator(); iterator.hasNext();) { - tag = (TagElement) iterator.next(); - if (args[0].equals(tag.getTagName()) && tag.getStartPosition() == intValue) { - break; - } - } - if(tag == null) { - return; - } - ListRewrite lrewrite = rewrite.getListRewrite(docnode, Javadoc.TAGS_PROPERTY); - lrewrite.remove(tag, null); - if(localMonitor.isCanceled()) { - return; - } - localMonitor.worked(1); + public IStatus runInUIThread(IProgressMonitor monitor) { + SubMonitor localMonitor = SubMonitor.convert(monitor, MarkerMessages.RemoveUnsupportedTagOperation_removeing_unsupported_tag, this.markers.length + 6); + HashMap seen = new HashMap(); + for (int i = 0; i < this.markers.length; i++) { + // retrieve the AST node compilation unit + IResource resource = this.markers[i].getResource(); + IJavaElement javaElement = JavaCore.create(resource); + try { + if (javaElement != null && javaElement.getElementType() == IJavaElement.COMPILATION_UNIT) { + ICompilationUnit compilationUnit = (ICompilationUnit) javaElement; + if(!seen.containsKey(compilationUnit)) { + seen.put(compilationUnit, Boolean.valueOf(compilationUnit.hasUnsavedChanges())); } - try { - TextEdit edit = rewrite.rewriteAST(); - compilationUnit.applyTextEdit(edit, monitor); - if(localMonitor.isCanceled()) { - return; - } - localMonitor.worked(1); + if (!compilationUnit.isWorkingCopy()) { + // open an editor of the corresponding unit to "show" the quick-fix change + JavaUI.openInEditor(compilationUnit); } - finally { + if(!compilationUnit.isConsistent()) { compilationUnit.reconcile(ICompilationUnit.NO_AST, false, null, null); - if(localMonitor.isCanceled()) { - return; + Util.updateMonitor(localMonitor, 1); + } + Util.updateMonitor(localMonitor, 1); + ASTParser parser = ASTParser.newParser(AST.JLS3); + parser.setSource(compilationUnit); + Integer charStartAttribute = null; + charStartAttribute = (Integer) this.markers[i].getAttribute(IMarker.CHAR_START); + int intValue = charStartAttribute.intValue(); + parser.setFocalPosition(intValue); + Map options = compilationUnit.getJavaProject().getOptions(true); + options.put(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, JavaCore.ENABLED); + parser.setCompilerOptions(options); + final CompilationUnit unit = (CompilationUnit) parser.createAST(new NullProgressMonitor()); + NodeFinder finder = new NodeFinder(intValue); + unit.accept(finder); + Util.updateMonitor(localMonitor, 1); + BodyDeclaration node = finder.getNode(); + if (node != null) { + unit.recordModifications(); + AST ast = unit.getAST(); + ASTRewrite rewrite = ASTRewrite.create(ast); + Javadoc docnode = node.getJavadoc(); + if (docnode == null) { + return Status.CANCEL_STATUS; + } else { + List tags = docnode.tags(); + String arg = (String) this.markers[i].getAttribute(IApiMarkerConstants.MARKER_ATTR_MESSAGE_ARGUMENTS); + String[] args = arg.split("#"); //$NON-NLS-1$ + TagElement tag = null; + for (Iterator iterator = tags.iterator(); iterator.hasNext();) { + tag = (TagElement) iterator.next(); + if (args[0].equals(tag.getTagName()) && tag.getStartPosition() == intValue) { + break; + } + } + if(tag == null) { + return Status.CANCEL_STATUS; + } + ListRewrite lrewrite = rewrite.getListRewrite(docnode, Javadoc.TAGS_PROPERTY); + lrewrite.remove(tag, null); + Util.updateMonitor(localMonitor, 1); } - localMonitor.worked(1); + TextEdit edit = rewrite.rewriteAST(); + compilationUnit.applyTextEdit(edit, monitor); + Util.updateMonitor(localMonitor, 1); } } } - + catch(JavaModelException jme) {} + catch (PartInitException e) {} + catch (CoreException e) {} } - catch(JavaModelException jme) {} - catch (PartInitException e) {} - catch (CoreException e) {} + //try saving the compilation units if they were in a saved state when the quick-fix started + Map.Entry entry = null; + for (Iterator itr = seen.entrySet().iterator(); itr.hasNext();) { + entry = (Entry) itr.next(); + if(!((Boolean)entry.getValue()).booleanValue()) { + try { + ((ICompilationUnit)entry.getKey()).commitWorkingCopy(true, null); + } catch (JavaModelException jme) {} + } + } + return Status.OK_STATUS; } - } Index: src/org/eclipse/pde/api/tools/ui/internal/markers/MarkerMessages.java =================================================================== RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/MarkerMessages.java,v retrieving revision 1.16 diff -u -r1.16 MarkerMessages.java --- src/org/eclipse/pde/api/tools/ui/internal/markers/MarkerMessages.java 28 Apr 2009 19:07:23 -0000 1.16 +++ src/org/eclipse/pde/api/tools/ui/internal/markers/MarkerMessages.java 29 Apr 2009 15:51:07 -0000 @@ -60,6 +60,7 @@ public static String SinceTagResolution_invalid2; public static String UnsupportedTagResolution_remove_unsupported_tag; + public static String UnsupportedTagResolution_remove_unsupported_tags; public static String UpdateSinceTagOperation_title; public static String VersionNumberingResolution_major0;