Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 131672 Details for
Bug 216329
[api tooling] Refactoring participants required for filters
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
start
216329.patch (text/plain), 41.60 KB, created by
Michael Rennie
on 2009-04-13 12:42:04 EDT
(
hide
)
Description:
start
Filename:
MIME Type:
Creator:
Michael Rennie
Created:
2009-04-13 12:42:04 EDT
Size:
41.60 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.pde.api.tools.ui >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools.ui/META-INF/MANIFEST.MF,v >retrieving revision 1.16 >diff -u -r1.16 MANIFEST.MF >--- META-INF/MANIFEST.MF 23 Feb 2009 18:02:00 -0000 1.16 >+++ META-INF/MANIFEST.MF 13 Apr 2009 16:36:38 -0000 >@@ -32,5 +32,6 @@ > org.eclipse.pde.api.tools.ui.internal.markers;x-friends:="org.eclipse.pde.api.tools.tests", > org.eclipse.pde.api.tools.ui.internal.preferences;x-friends:="org.eclipse.pde.api.tools.tests", > org.eclipse.pde.api.tools.ui.internal.properties;x-friends:="org.eclipse.pde.api.tools.tests", >+ org.eclipse.pde.api.tools.ui.internal.refactoring;x-internal:=true, > org.eclipse.pde.api.tools.ui.internal.wizards;x-friends:="org.eclipse.pde.api.tools.tests" > Import-Package: com.ibm.icu.text;version="3.6.1" >Index: plugin.properties >=================================================================== >RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools.ui/plugin.properties,v >retrieving revision 1.16 >diff -u -r1.16 plugin.properties >--- plugin.properties 14 Oct 2008 15:34:02 -0000 1.16 >+++ plugin.properties 13 Apr 2009 16:36:38 -0000 >@@ -42,4 +42,7 @@ > MarkerCategory.name = API Problems > ApiToolsJavadocProposals.name = API Tools Javadoc Proposals > MarkerGroupingEntryLabel=API Usage and Compatibility >-ApiToolsProposalCategory.name = PDE API Tools Proposals >\ No newline at end of file >+ApiToolsProposalCategory.name = PDE API Tools Proposals >+FilterDeleteParticipant.name = API Problem Filter Delete Participant >+FilterRenameParticipant.name = API Problem Filter Rename Participant >+FilterMoveParticipant.name = API Problem Filter Move Participant >\ No newline at end of file >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools.ui/plugin.xml,v >retrieving revision 1.20 >diff -u -r1.20 plugin.xml >--- plugin.xml 4 Dec 2008 17:18:18 -0000 1.20 >+++ plugin.xml 13 Apr 2009 16:36:38 -0000 >@@ -270,4 +270,145 @@ > markerType="org.eclipse.pde.api.tools.unused_filters"> > </markerResolutionGenerator> > </extension> >+ <extension >+ point="org.eclipse.ltk.core.refactoring.renameParticipants"> >+ <renameParticipant >+ class="org.eclipse.pde.api.tools.ui.internal.refactoring.FilterRenameParticipant" >+ id="org.eclipse.pde.api.tools.ui.filter.rename.participant" >+ name="%FilterRenameParticipant.name"> >+ <enablement> >+ <with >+ variable="affectedNatures"> >+ <iterate >+ operator="or"> >+ <equals >+ value="org.eclipse.pde.api.tools.apiAnalysisNature"> >+ </equals> >+ </iterate> >+ </with> >+ <with >+ variable="element"> >+ <instanceof >+ value="org.eclipse.jdt.core.IType"> >+ </instanceof> >+ </with> >+ </enablement> >+ </renameParticipant> >+ <renameParticipant >+ class="org.eclipse.pde.api.tools.ui.internal.refactoring.FilterRenameParticipant" >+ id="org.eclipse.pde.api.tools.ui.filter.rename.participant" >+ name="%FilterRenameParticipant.name"> >+ <enablement> >+ <with >+ variable="affectedNatures"> >+ <iterate >+ operator="or"> >+ <equals >+ value="org.eclipse.pde.api.tools.apiAnalysisNature"> >+ </equals> >+ </iterate> >+ </with> >+ <with >+ variable="element"> >+ <instanceof >+ value="org.eclipse.jdt.core.IPackageFragment"> >+ </instanceof> >+ </with> >+ </enablement> >+ </renameParticipant> >+ </extension> >+ <extension >+ point="org.eclipse.ltk.core.refactoring.moveParticipants"> >+ <moveParticipant >+ class="org.eclipse.pde.api.tools.ui.internal.refactoring.FilterMoveParticipant" >+ id="org.eclipse.pde.api.tools.ui.filter.move.participant" >+ name="%FilterMoveParticipant.name"> >+ <enablement> >+ <with >+ variable="affectedNatures"> >+ <iterate >+ operator="or"> >+ <equals >+ value="org.eclipse.pde.api.tools.apiAnalysisNature"> >+ </equals> >+ </iterate> >+ </with> >+ <with >+ variable="element"> >+ <instanceof >+ value="org.eclipse.jdt.core.IType"> >+ </instanceof> >+ </with> >+ </enablement> >+ </moveParticipant> >+ <moveParticipant >+ class="org.eclipse.pde.api.tools.ui.internal.refactoring.FilterMoveParticipant" >+ id="org.eclipse.pde.api.tools.ui.filter.move.participant" >+ name="%FilterMoveParticipant.name"> >+ <enablement> >+ <with >+ variable="affectedNatures"> >+ <iterate >+ operator="or"> >+ <equals >+ value="org.eclipse.pde.api.tools.apiAnalysisNature"> >+ </equals> >+ </iterate> >+ </with> >+ <with >+ variable="element"> >+ <instanceof >+ value="org.eclipse.jdt.core.IPackageFragment"> >+ </instanceof> >+ </with> >+ </enablement> >+ </moveParticipant> >+ </extension> >+ <extension >+ point="org.eclipse.ltk.core.refactoring.deleteParticipants"> >+ <deleteParticipant >+ class="org.eclipse.pde.api.tools.ui.internal.refactoring.FilterDeleteParticipant" >+ id="org.eclipse.pde.api.tools.ui.filter.delete.participant" >+ name="%FilterDeleteParticipant.name"> >+ <enablement> >+ <with >+ variable="affectedNatures"> >+ <iterate >+ operator="or"> >+ <equals >+ value="org.eclipse.pde.api.tools.apiAnalysisNature"> >+ </equals> >+ </iterate> >+ </with> >+ <with >+ variable="element"> >+ <instanceof >+ value="org.eclipse.jdt.core.IType"> >+ </instanceof> >+ </with> >+ </enablement> >+ </deleteParticipant> >+ <deleteParticipant >+ class="org.eclipse.pde.api.tools.ui.internal.refactoring.FilterDeleteParticipant" >+ id="org.eclipse.pde.api.tools.ui.filter.delete.participant" >+ name="%FilterDeleteParticipant.name"> >+ <enablement> >+ <with >+ variable="affectedNatures"> >+ <iterate >+ operator="or"> >+ <equals >+ value="org.eclipse.pde.api.tools.apiAnalysisNature"> >+ </equals> >+ </iterate> >+ </with> >+ <with >+ variable="element"> >+ <instanceof >+ value="org.eclipse.jdt.core.IPackageFragment"> >+ </instanceof> >+ </with> >+ </enablement> >+ </deleteParticipant> >+ </extension> > </plugin> >Index: src/org/eclipse/pde/api/tools/ui/internal/refactoring/TypeFilterChange.java >=================================================================== >RCS file: src/org/eclipse/pde/api/tools/ui/internal/refactoring/TypeFilterChange.java >diff -N src/org/eclipse/pde/api/tools/ui/internal/refactoring/TypeFilterChange.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/pde/api/tools/ui/internal/refactoring/TypeFilterChange.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,60 @@ >+/******************************************************************************* >+ * Copyright (c) 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 >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.pde.api.tools.ui.internal.refactoring; >+ >+import org.eclipse.ltk.core.refactoring.Change; >+import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore; >+import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter; >+ >+/** >+ * A change object for {@link org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter}s >+ * This change can handle adds / renames and removes. >+ * >+ * @since 1.0.1 >+ */ >+public class TypeFilterChange extends FilterChange { >+ >+ String newname = null; >+ String newpath = null; >+ >+ /** >+ * Constructor >+ * @param store the store the filter is to be updated in >+ * @param filter the filter being changed >+ * @param primaryname the name of the primary type (the name of the resource) >+ * @param newname the new value to set in the filter >+ * @param newpath >+ * @param kind the kind of the change >+ */ >+ public TypeFilterChange(IApiFilterStore store, IApiProblemFilter filter, String newname, String newpath, int kind) { >+ super(store, filter, kind); >+ this.newname = newname; >+ this.newpath = newpath; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.pde.api.tools.ui.internal.refactoring.FilterChange#performAdd() >+ */ >+ protected Change performAdd() { >+ this.store.addFilters(new IApiProblemFilter[] {this.filter}); >+ return new TypeFilterChange(this.store, this.filter, null, null, DELETE); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.pde.api.tools.ui.internal.refactoring.FilterChange#performDelete() >+ */ >+ protected Change performDelete() { >+ if(this.store.removeFilters(new IApiProblemFilter[] {this.filter})) { >+ return new TypeFilterChange(this.store, this.filter, null, null, ADD); >+ } >+ return null; >+ } >+} >Index: src/org/eclipse/pde/api/tools/ui/internal/refactoring/RefactoringUtils.java >=================================================================== >RCS file: src/org/eclipse/pde/api/tools/ui/internal/refactoring/RefactoringUtils.java >diff -N src/org/eclipse/pde/api/tools/ui/internal/refactoring/RefactoringUtils.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/pde/api/tools/ui/internal/refactoring/RefactoringUtils.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,250 @@ >+/******************************************************************************* >+ * Copyright (c) 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 >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.pde.api.tools.ui.internal.refactoring; >+ >+import java.util.HashSet; >+ >+import org.eclipse.core.resources.IProject; >+import org.eclipse.core.resources.IResource; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.jdt.core.ICompilationUnit; >+import org.eclipse.jdt.core.IPackageFragment; >+import org.eclipse.jdt.core.IType; >+import org.eclipse.jdt.core.JavaModelException; >+import org.eclipse.ltk.core.refactoring.Change; >+import org.eclipse.ltk.core.refactoring.CompositeChange; >+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin; >+import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore; >+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent; >+import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter; >+ >+/** >+ * Helper class to create API tools refactoring changes >+ * >+ * @since 1.0.1 >+ */ >+public class RefactoringUtils { >+ >+ /** >+ * Creates the {@link Change} for updating the filter store >+ * when a type is deleted >+ * >+ * @param type the type being deleted >+ * @return the change to the filter store >+ */ >+ static Change createDeleteFilterChanges(IType type) { >+ try { >+ IResource resource = type.getUnderlyingResource(); >+ if(resource != null) { >+ IApiFilterStore store = resolveFilterStore(resource.getProject()); >+ IApiProblemFilter[] filters = store.getFilters(resource); >+ if(filters.length != 0) { >+ CompositeChange cchange = new CompositeChange(RefactoringMessages.RefactoringUtils_remove_usused_filters); >+ for (int i = 0; i < filters.length; i++) { >+ cchange.add(new TypeFilterChange(store, filters[i], null, null, FilterChange.DELETE)); >+ } >+ return cchange; >+ } >+ } >+ } >+ catch(CoreException ce) {} >+ return null; >+ } >+ >+ /** >+ * Creates the {@link Change} for updating a filter store when a package fragment is deleted >+ * @param fragment the fragment that has been deleted >+ * @return the {@link Change} for the package fragment deletion >+ */ >+ static Change createDeleteFilterChanges(IPackageFragment fragment) { >+ try { >+ IResource resource = fragment.getUnderlyingResource(); >+ if(resource != null) { >+ IApiFilterStore store = resolveFilterStore(resource.getProject()); >+ IApiProblemFilter[] filters = collectAllAffectedFilters(store, collectAffectedTypes(fragment)); >+ if(filters.length != 0) { >+ CompositeChange cchange = new CompositeChange(RefactoringMessages.RefactoringUtils_remove_usused_filters); >+ for (int i = 0; i < filters.length; i++) { >+ cchange.add(new TypeFilterChange(store, filters[i], null, null, FilterChange.DELETE)); >+ } >+ return cchange; >+ } >+ } >+ } >+ catch(CoreException ce) {} >+ return null; >+ } >+ >+ /** >+ * Collects the complete set of {@link IApiProblemFilter}s for the given collection of {@link IType}s >+ * @param types >+ * @return the complete collection of {@link IApiProblemFilter}s or an empty list, never <code>null</code> >+ */ >+ static IApiProblemFilter[] collectAllAffectedFilters(IApiFilterStore store, IType[] types) { >+ HashSet filters = new HashSet(); >+ IApiProblemFilter[] fs = null; >+ IResource resource = null; >+ for (int i = 0; i < types.length; i++) { >+ try { >+ resource = types[i].getUnderlyingResource(); >+ if(resource == null) { >+ continue; >+ } >+ fs = store.getFilters(resource); >+ for (int j = 0; j < fs.length; j++) { >+ filters.add(fs[j]); >+ } >+ } >+ catch(JavaModelException jme) { >+ //do nothing >+ } >+ } >+ return (IApiProblemFilter[]) filters.toArray(new IApiProblemFilter[filters.size()]); >+ } >+ >+ /** >+ * Collects the complete list of {@link IType}s affected from within the {@link IPackageFragment} >+ * @param fragment >+ * @return the complete collection of affected {@link IType}s or an empty list, never <code>null</code> >+ */ >+ static IType[] collectAffectedTypes(IPackageFragment fragment) { >+ HashSet types = new HashSet(); >+ try { >+ if(fragment.containsJavaResources()) { >+ ICompilationUnit[] cunits = fragment.getCompilationUnits(); >+ IType type = null; >+ for (int i = 0; i < cunits.length; i++) { >+ type = cunits[i].findPrimaryType(); >+ if(type == null) { >+ continue; >+ } >+ types.add(type); >+ } >+ } >+ } >+ catch(JavaModelException jme) { >+ //do nothing >+ } >+ return (IType[]) types.toArray(new IType[types.size()]); >+ } >+ >+ /** >+ * Creates the {@link Change} for updating {@link IApiProblemFilter}s >+ * that are affected by the rename of a type >+ * >+ * @param type the type being renamed >+ * @param newname the new name to be set on the resource >+ * @return the rename type change for updating filters >+ */ >+ static Change createRenameFilterChanges(IType type, String newname) { >+ return createDeleteFilterChanges(type); >+ } >+ >+ /** >+ * Creates the {@link Change} for {@link IApiProblemFilter}s affected by >+ * a package fragment rename >+ * @param fragment >+ * @param newname >+ * @return the change for the package fragment rename >+ */ >+ static Change createRenameFilterChanges(IPackageFragment fragment, String newname) { >+ return createDeleteFilterChanges(fragment); >+ } >+ >+ /** >+ * Creates the {@link Change} for updating {@link IApiProblemFilter}s >+ * that are affected by moving a type >+ * @param type the type being moved >+ * @param destination where the resource is being moved to >+ * @return the move type change for updating filters >+ */ >+ static Change createMoveFilterChanges(IType type, String destination) { >+ return createDeleteFilterChanges(type); >+ } >+ >+ /** >+ * Creates the {@link Change} for {@link IApiProblemFilter}s affected by >+ * moving a package fragment >+ * @param fragment >+ * @param destination >+ * @return the change for moving a package fragment >+ */ >+ static Change createMoveFilterChanges(IPackageFragment fragment, String destination) { >+ return createDeleteFilterChanges(fragment); >+ } >+ >+ /** >+ * Gets the {@link IApiFilterStore} for the given {@link IProject} >+ * @param project >+ * @return the filter store for the given project or <code>null</code> >+ * @throws CoreException >+ */ >+ static IApiFilterStore resolveFilterStore(IProject project) throws CoreException { >+ IApiComponent component = ApiPlugin.getDefault().getApiBaselineManager().getWorkspaceBaseline().getApiComponent(project.getName()); >+ if(component != null) { >+ return component.getFilterStore(); >+ } >+ return null; >+ } >+ >+ /** >+ * Returns the new fully qualified name for the filter >+ * @param type >+ * @param newname >+ * @return >+ */ >+ static String getNewQualifiedName(IType type, String newname) { >+ IType dtype = type.getDeclaringType(); >+ String newqname = newname; >+ if (dtype == null) { >+ IPackageFragment packageFragment = type.getPackageFragment(); >+ if (!packageFragment.isDefaultPackage()) { >+ newqname = packageFragment.getElementName() + '.' + newname; >+ } >+ } >+ else { >+ newqname = dtype.getFullyQualifiedName() + '$' + newname; >+ } >+ return newqname; >+ } >+ >+ /** >+ * Returns the new type name with the new package qualification >+ * @param newname >+ * @param oldtypename >+ * @return the new fully qualified type name >+ */ >+ static String getNewQualifiedName(String newname, String oldtypename) { >+ //TODO switch out the package resolution >+ return oldtypename; >+ } >+ >+ /** >+ * Returns a new path string given the type name. >+ * This method basically removes the last segment of the path, appends the new name >+ * and resets the extension >+ * @param oldpath >+ * @param typename >+ * @return the new resource path to use >+ */ >+ static String getNewResourcePath(IPath oldpath, String typename) { >+ if(typename.indexOf('$') < 0) { >+ String ext = oldpath.getFileExtension(); >+ IPath newpath = oldpath.removeLastSegments(1).append(typename); >+ if(ext != null) { >+ return newpath.addFileExtension(ext).toString(); >+ } >+ return newpath.toString(); >+ } >+ return oldpath.toString(); >+ } >+} >Index: src/org/eclipse/pde/api/tools/ui/internal/refactoring/RefactoringMessages.java >=================================================================== >RCS file: src/org/eclipse/pde/api/tools/ui/internal/refactoring/RefactoringMessages.java >diff -N src/org/eclipse/pde/api/tools/ui/internal/refactoring/RefactoringMessages.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/pde/api/tools/ui/internal/refactoring/RefactoringMessages.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,31 @@ >+/******************************************************************************* >+ * Copyright (c) 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 >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.pde.api.tools.ui.internal.refactoring; >+ >+import org.eclipse.osgi.util.NLS; >+ >+/** >+ * >+ */ >+public class RefactoringMessages extends NLS { >+ private static final String BUNDLE_NAME = "org.eclipse.pde.api.tools.ui.internal.refactoring.refactoringmessages"; //$NON-NLS-1$ >+ public static String FilterChange_add_filter; >+ public static String FilterChange_remove_used_filter; >+ public static String FilterDeleteParticipant_remove_unused_filters_for_0; >+ public static String RefactoringUtils_remove_usused_filters; >+ static { >+ // initialize resource bundle >+ NLS.initializeMessages(BUNDLE_NAME, RefactoringMessages.class); >+ } >+ >+ private RefactoringMessages() { >+ } >+} >Index: src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterChange.java >=================================================================== >RCS file: src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterChange.java >diff -N src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterChange.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterChange.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,141 @@ >+/******************************************************************************* >+ * Copyright (c) 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 >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.pde.api.tools.ui.internal.refactoring; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.core.runtime.OperationCanceledException; >+import org.eclipse.ltk.core.refactoring.Change; >+import org.eclipse.ltk.core.refactoring.RefactoringStatus; >+import org.eclipse.osgi.util.NLS; >+import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore; >+import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem; >+import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter; >+ >+/** >+ * Generic {@link Change} for {@link IApiProblemFilter}s >+ * >+ * @since 1.0.1 >+ */ >+public abstract class FilterChange extends Change { >+ >+ static final int DELETE = 1; >+ static final int ADD = 2; >+ >+ IApiFilterStore store = null; >+ IApiProblemFilter filter = null; >+ int kind = 0; >+ >+ /** >+ * Constructor >+ */ >+ public FilterChange(IApiFilterStore store, IApiProblemFilter filter, int kind) { >+ this.store = store; >+ this.filter = filter; >+ this.kind = kind; >+ } >+ >+ /** >+ * Performs the delete operation and returns an undo change or <code>null</code> >+ * @return an undo change or <code>null</code> >+ */ >+ protected abstract Change performDelete(); >+ >+ /** >+ * Performs the add operation and returns an undo change or <code>null</code> >+ * @return an undo change or <code>null</code> >+ */ >+ protected abstract Change performAdd(); >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public Change perform(IProgressMonitor pm) throws CoreException { >+ switch(this.kind) { >+ case DELETE: { >+ return performDelete(); >+ } >+ case ADD: { >+ return performAdd(); >+ } >+ } >+ return null; >+ } >+ >+ /** >+ * Returns the name to use for an {@link #ADD} change operation >+ * @return the name for an {@link #ADD} change >+ */ >+ protected String getAddName() { >+ return NLS.bind(RefactoringMessages.FilterChange_add_filter, this.filter.toString()); >+ } >+ >+ /** >+ * Returns the name to use for a {@link #DELETE} change operation >+ * @return the name for a {@link #DELETE} change >+ */ >+ protected String getDeleteName() { >+ IApiProblem problem = this.filter.getUnderlyingProblem(); >+ return NLS.bind(RefactoringMessages.FilterChange_remove_used_filter, problem.getMessage()); >+ } >+ >+ /** >+ * Returns the name to use for a {@link #RENAME} change operation >+ * @return the name for a {@link #RENAME} change >+ */ >+ protected String getRenameName() { >+ IApiProblem problem = this.filter.getUnderlyingProblem(); >+ return NLS.bind(RefactoringMessages.FilterChange_remove_used_filter, new Object[] {problem.getMessage()}); >+ } >+ >+ /** >+ * Returns the name to use for a {@link #MOVE} change operation >+ * @return the name for a {@link #MOVE} change >+ */ >+ protected String getMoveName() { >+ IApiProblem problem = this.filter.getUnderlyingProblem(); >+ return NLS.bind(RefactoringMessages.FilterChange_remove_used_filter, new Object[] {problem.getMessage()}); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.Change#getName() >+ */ >+ public String getName() { >+ switch(this.kind) { >+ case ADD: { >+ return getAddName(); >+ } >+ case DELETE: { >+ return getDeleteName(); >+ } >+ } >+ return null; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public void initializeValidationData(IProgressMonitor pm) {} >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException { >+ return new RefactoringStatus(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement() >+ */ >+ public Object getModifiedElement() { >+ return this.filter; >+ } >+} >Index: src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterMoveParticipant.java >=================================================================== >RCS file: src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterMoveParticipant.java >diff -N src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterMoveParticipant.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterMoveParticipant.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,98 @@ >+package org.eclipse.pde.api.tools.ui.internal.refactoring; >+ >+import org.eclipse.core.resources.IResource; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.core.runtime.OperationCanceledException; >+import org.eclipse.jdt.core.IJavaElement; >+import org.eclipse.jdt.core.IPackageFragment; >+import org.eclipse.jdt.core.IType; >+import org.eclipse.ltk.core.refactoring.Change; >+import org.eclipse.ltk.core.refactoring.RefactoringStatus; >+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; >+import org.eclipse.ltk.core.refactoring.participants.MoveParticipant; >+import org.eclipse.osgi.util.NLS; >+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin; >+import org.eclipse.pde.api.tools.internal.provisional.Factory; >+import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations; >+import org.eclipse.pde.api.tools.internal.provisional.IApiDescription; >+import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers; >+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor; >+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent; >+ >+/** >+ * Handles a type being moved from one location to another and updates the associated >+ * {@link org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter}s as >+ * needed >+ * >+ * @since 1.0.1 >+ */ >+public class FilterMoveParticipant extends MoveParticipant { >+ >+ private IJavaElement element = null; >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext) >+ */ >+ public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException { >+ return new RefactoringStatus(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException { >+ IResource resource = (IResource) getArguments().getDestination(); >+ switch(this.element.getElementType()) { >+ case IJavaElement.TYPE: { >+ return RefactoringUtils.createMoveFilterChanges((IType)this.element, resource.getProjectRelativePath().toString()); >+ } >+ case IJavaElement.PACKAGE_FRAGMENT: { >+ return RefactoringUtils.createMoveFilterChanges((IPackageFragment)this.element, resource.getProjectRelativePath().toString()); >+ } >+ } >+ return null; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName() >+ */ >+ public String getName() { >+ return NLS.bind(RefactoringMessages.FilterDeleteParticipant_remove_unused_filters_for_0, this.element.getElementName()); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object) >+ */ >+ protected boolean initialize(Object element) { >+ if(element instanceof IJavaElement) { >+ this.element = (IJavaElement) element; >+ String projectname = this.element.getJavaProject().getElementName(); >+ IElementDescriptor desc = null; >+ switch (this.element.getElementType()) { >+ case IJavaElement.TYPE: { >+ desc = Factory.typeDescriptor(((IType)this.element).getFullyQualifiedName()); >+ } >+ case IJavaElement.PACKAGE_FRAGMENT: { >+ desc = Factory.packageDescriptor(((IPackageFragment)this.element).getElementName()); >+ } >+ } >+ if(desc != null) { >+ IApiComponent component = ApiPlugin.getDefault().getApiBaselineManager().getWorkspaceBaseline().getApiComponent(projectname); >+ if(component != null) { >+ try { >+ IApiDescription adesc = component.getApiDescription(); >+ if(adesc != null) { >+ IApiAnnotations annot = adesc.resolveAnnotations(desc); >+ if(annot != null) { >+ return VisibilityModifiers.isAPI(annot.getVisibility()); >+ } >+ } >+ } >+ catch(CoreException ce) {} >+ } >+ } >+ } >+ return false; >+ } >+} >Index: src/org/eclipse/pde/api/tools/ui/internal/refactoring/refactoringmessages.properties >=================================================================== >RCS file: src/org/eclipse/pde/api/tools/ui/internal/refactoring/refactoringmessages.properties >diff -N src/org/eclipse/pde/api/tools/ui/internal/refactoring/refactoringmessages.properties >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/pde/api/tools/ui/internal/refactoring/refactoringmessages.properties 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,5 @@ >+FilterChange_add_filter=Add filter: {0} >+FilterChange_remove_used_filter=Remove unused filter: {0} >+FilterDeleteParticipant_remove_unused_filters_for_0=Remove unused API problem filters for: {0} >+RefactoringUtils_remove_usused_filters=Remove unused filters >+ >Index: src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterRenameParticipant.java >=================================================================== >RCS file: src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterRenameParticipant.java >diff -N src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterRenameParticipant.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterRenameParticipant.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,95 @@ >+package org.eclipse.pde.api.tools.ui.internal.refactoring; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.core.runtime.OperationCanceledException; >+import org.eclipse.jdt.core.IJavaElement; >+import org.eclipse.jdt.core.IPackageFragment; >+import org.eclipse.jdt.core.IType; >+import org.eclipse.ltk.core.refactoring.Change; >+import org.eclipse.ltk.core.refactoring.RefactoringStatus; >+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; >+import org.eclipse.ltk.core.refactoring.participants.RenameParticipant; >+import org.eclipse.osgi.util.NLS; >+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin; >+import org.eclipse.pde.api.tools.internal.provisional.Factory; >+import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations; >+import org.eclipse.pde.api.tools.internal.provisional.IApiDescription; >+import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers; >+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor; >+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent; >+ >+/** >+ * Handles updating {@link org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter}s >+ * when a type they reference is renamed >+ * >+ * @since 1.0.1 >+ */ >+public class FilterRenameParticipant extends RenameParticipant { >+ >+ private IJavaElement element = null; >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext) >+ */ >+ public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException { >+ return new RefactoringStatus(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException { >+ switch(this.element.getElementType()) { >+ case IJavaElement.TYPE: { >+ return RefactoringUtils.createRenameFilterChanges((IType)this.element, getArguments().getNewName()); >+ } >+ case IJavaElement.PACKAGE_FRAGMENT: { >+ return RefactoringUtils.createRenameFilterChanges((IPackageFragment)this.element, getArguments().getNewName()); >+ } >+ } >+ return null; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName() >+ */ >+ public String getName() { >+ return NLS.bind(RefactoringMessages.FilterDeleteParticipant_remove_unused_filters_for_0, this.element.getElementName()); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object) >+ */ >+ protected boolean initialize(Object element) { >+ if(element instanceof IJavaElement) { >+ this.element = (IJavaElement) element; >+ String projectname = this.element.getJavaProject().getElementName(); >+ IElementDescriptor desc = null; >+ switch (this.element.getElementType()) { >+ case IJavaElement.TYPE: { >+ desc = Factory.typeDescriptor(((IType)this.element).getFullyQualifiedName()); >+ } >+ case IJavaElement.PACKAGE_FRAGMENT: { >+ desc = Factory.packageDescriptor(((IPackageFragment)this.element).getElementName()); >+ } >+ } >+ if(desc != null) { >+ IApiComponent component = ApiPlugin.getDefault().getApiBaselineManager().getWorkspaceBaseline().getApiComponent(projectname); >+ if(component != null) { >+ try { >+ IApiDescription adesc = component.getApiDescription(); >+ if(adesc != null) { >+ IApiAnnotations annot = adesc.resolveAnnotations(desc); >+ if(annot != null) { >+ return VisibilityModifiers.isAPI(annot.getVisibility()); >+ } >+ } >+ } >+ catch(CoreException ce) {} >+ } >+ } >+ } >+ return false; >+ } >+} >Index: src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterDeleteParticipant.java >=================================================================== >RCS file: src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterDeleteParticipant.java >diff -N src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterDeleteParticipant.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/pde/api/tools/ui/internal/refactoring/FilterDeleteParticipant.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,95 @@ >+package org.eclipse.pde.api.tools.ui.internal.refactoring; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.core.runtime.OperationCanceledException; >+import org.eclipse.jdt.core.IJavaElement; >+import org.eclipse.jdt.core.IPackageFragment; >+import org.eclipse.jdt.core.IType; >+import org.eclipse.ltk.core.refactoring.Change; >+import org.eclipse.ltk.core.refactoring.RefactoringStatus; >+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; >+import org.eclipse.ltk.core.refactoring.participants.DeleteParticipant; >+import org.eclipse.osgi.util.NLS; >+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin; >+import org.eclipse.pde.api.tools.internal.provisional.Factory; >+import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations; >+import org.eclipse.pde.api.tools.internal.provisional.IApiDescription; >+import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers; >+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor; >+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent; >+ >+/** >+ * Handles removing unused {@link org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter}s >+ * when a type they belonged to is removed >+ * >+ * @since 1.0.1 >+ */ >+public class FilterDeleteParticipant extends DeleteParticipant { >+ >+ private IJavaElement element = null; >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext) >+ */ >+ public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException { >+ return new RefactoringStatus(); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor) >+ */ >+ public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException { >+ switch(this.element.getElementType()) { >+ case IJavaElement.TYPE: { >+ return RefactoringUtils.createDeleteFilterChanges((IType)this.element); >+ } >+ case IJavaElement.PACKAGE_FRAGMENT: { >+ return RefactoringUtils.createDeleteFilterChanges((IPackageFragment)this.element); >+ } >+ } >+ return null; >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName() >+ */ >+ public String getName() { >+ return NLS.bind(RefactoringMessages.FilterDeleteParticipant_remove_unused_filters_for_0, this.element.getElementName()); >+ } >+ >+ /* (non-Javadoc) >+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object) >+ */ >+ protected boolean initialize(Object element) { >+ if(element instanceof IJavaElement) { >+ this.element = (IJavaElement) element; >+ String projectname = this.element.getJavaProject().getElementName(); >+ IElementDescriptor desc = null; >+ switch (this.element.getElementType()) { >+ case IJavaElement.TYPE: { >+ desc = Factory.typeDescriptor(((IType)this.element).getFullyQualifiedName()); >+ } >+ case IJavaElement.PACKAGE_FRAGMENT: { >+ desc = Factory.packageDescriptor(((IPackageFragment)this.element).getElementName()); >+ } >+ } >+ if(desc != null) { >+ IApiComponent component = ApiPlugin.getDefault().getApiBaselineManager().getWorkspaceBaseline().getApiComponent(projectname); >+ if(component != null) { >+ try { >+ IApiDescription adesc = component.getApiDescription(); >+ if(adesc != null) { >+ IApiAnnotations annot = adesc.resolveAnnotations(desc); >+ if(annot != null) { >+ return VisibilityModifiers.isAPI(annot.getVisibility()); >+ } >+ } >+ } >+ catch(CoreException ce) {} >+ } >+ } >+ } >+ return false; >+ } >+} >#P org.eclipse.pde.api.tools >Index: src/org/eclipse/pde/api/tools/internal/ApiFilterStore.java >=================================================================== >RCS file: /cvsroot/eclipse/pde/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiFilterStore.java,v >retrieving revision 1.35 >diff -u -r1.35 ApiFilterStore.java >--- src/org/eclipse/pde/api/tools/internal/ApiFilterStore.java 9 Apr 2009 15:56:42 -0000 1.35 >+++ src/org/eclipse/pde/api/tools/internal/ApiFilterStore.java 13 Apr 2009 16:36:39 -0000 >@@ -352,10 +352,12 @@ > } > IResource resource = fProject.getProject().findMember(new Path(resourcePath)); > if(resource == null) { >- continue; >+ resource = fProject.getProject().getFile(resourcePath); > } > Map pTypeNames = (Map) fFilterMap.get(resource); >- if (pTypeNames == null) continue; >+ if (pTypeNames == null) { >+ continue; >+ } > String typeName = underlyingProblem.getTypeName(); > if (typeName == null) { > typeName = GLOBAL;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 216329
:
131672
|
131808