KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > corext > refactoring > reorg > ReorgUtils


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.jdt.internal.corext.refactoring.reorg;
12
13 import java.net.URI JavaDoc;
14 import java.util.ArrayList JavaDoc;
15 import java.util.Arrays JavaDoc;
16 import java.util.Collection JavaDoc;
17 import java.util.HashMap JavaDoc;
18 import java.util.HashSet JavaDoc;
19 import java.util.Iterator JavaDoc;
20 import java.util.List JavaDoc;
21 import java.util.Map JavaDoc;
22 import java.util.Set JavaDoc;
23
24 import org.eclipse.core.runtime.Assert;
25
26 import org.eclipse.core.resources.IFile;
27 import org.eclipse.core.resources.IFolder;
28 import org.eclipse.core.resources.IProject;
29 import org.eclipse.core.resources.IResource;
30
31 import org.eclipse.ui.IWorkingSet;
32
33 import org.eclipse.jdt.core.IClassFile;
34 import org.eclipse.jdt.core.ICompilationUnit;
35 import org.eclipse.jdt.core.IJavaElement;
36 import org.eclipse.jdt.core.IJavaProject;
37 import org.eclipse.jdt.core.IMember;
38 import org.eclipse.jdt.core.IMethod;
39 import org.eclipse.jdt.core.IPackageFragment;
40 import org.eclipse.jdt.core.IPackageFragmentRoot;
41 import org.eclipse.jdt.core.ISourceRange;
42 import org.eclipse.jdt.core.IType;
43 import org.eclipse.jdt.core.JavaCore;
44 import org.eclipse.jdt.core.JavaModelException;
45 import org.eclipse.jdt.core.Signature;
46
47 import org.eclipse.jdt.internal.corext.SourceRange;
48 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
49 import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil;
50 import org.eclipse.jdt.internal.corext.refactoring.util.ResourceUtil;
51 import org.eclipse.jdt.internal.corext.util.Messages;
52
53
54 public class ReorgUtils {
55
56     //workaround for bug 18311
57
private static final ISourceRange fgUnknownRange= new SourceRange(-1, 0);
58
59     private ReorgUtils() {
60     }
61
62     public static boolean isArchiveMember(IJavaElement[] elements) {
63         for (int i= 0; i < elements.length; i++) {
64             IJavaElement element= elements[i];
65             IPackageFragmentRoot root= (IPackageFragmentRoot)element.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT);
66             if (root != null && root.isArchive())
67                 return true;
68         }
69         return false;
70     }
71     
72     public static boolean containsOnlyProjects(List JavaDoc elements){
73         if (elements.isEmpty())
74             return false;
75         for(Iterator JavaDoc iter= elements.iterator(); iter.hasNext(); ) {
76             if (! isProject(iter.next()))
77                 return false;
78         }
79         return true;
80     }
81     
82     public static boolean isProject(Object JavaDoc element){
83         return (element instanceof IJavaProject) || (element instanceof IProject);
84     }
85
86     public static boolean isInsideCompilationUnit(IJavaElement element) {
87         return !(element instanceof ICompilationUnit) &&
88                 hasAncestorOfType(element, IJavaElement.COMPILATION_UNIT);
89     }
90     
91     public static boolean isInsideClassFile(IJavaElement element) {
92         return !(element instanceof IClassFile) &&
93                 hasAncestorOfType(element, IJavaElement.CLASS_FILE);
94     }
95     
96     public static boolean hasAncestorOfType(IJavaElement element, int type){
97         return element.getAncestor(type) != null;
98     }
99     
100     /**
101      * May be <code>null</code>.
102      */

103     public static ICompilationUnit getCompilationUnit(IJavaElement javaElement){
104         if (javaElement instanceof ICompilationUnit)
105             return (ICompilationUnit) javaElement;
106         return (ICompilationUnit) javaElement.getAncestor(IJavaElement.COMPILATION_UNIT);
107     }
108
109     /**
110      * some of the returned elements may be <code>null</code>.
111      */

112     public static ICompilationUnit[] getCompilationUnits(IJavaElement[] javaElements){
113         ICompilationUnit[] result= new ICompilationUnit[javaElements.length];
114         for (int i= 0; i < javaElements.length; i++) {
115             result[i]= getCompilationUnit(javaElements[i]);
116         }
117         return result;
118     }
119         
120     public static IResource getResource(IJavaElement element){
121         if (element instanceof ICompilationUnit)
122             return ((ICompilationUnit)element).getPrimary().getResource();
123         else
124             return element.getResource();
125     }
126     
127     public static IResource[] getResources(IJavaElement[] elements) {
128         IResource[] result= new IResource[elements.length];
129         for (int i= 0; i < elements.length; i++) {
130             result[i]= ReorgUtils.getResource(elements[i]);
131         }
132         return result;
133     }
134     
135     public static String JavaDoc getName(IResource resource) {
136         String JavaDoc pattern= createNamePattern(resource);
137         String JavaDoc[] args= createNameArguments(resource);
138         return Messages.format(pattern, args);
139     }
140     
141     private static String JavaDoc createNamePattern(IResource resource) {
142         switch(resource.getType()){
143             case IResource.FILE:
144                 return RefactoringCoreMessages.ReorgUtils_0;
145             case IResource.FOLDER:
146                 return RefactoringCoreMessages.ReorgUtils_1;
147             case IResource.PROJECT:
148                 return RefactoringCoreMessages.ReorgUtils_2;
149             default:
150                 Assert.isTrue(false);
151                 return null;
152         }
153     }
154
155     private static String JavaDoc[] createNameArguments(IResource resource) {
156         return new String JavaDoc[]{resource.getName()};
157     }
158
159     public static String JavaDoc getName(IJavaElement element) throws JavaModelException {
160         String JavaDoc pattern= createNamePattern(element);
161         String JavaDoc[] args= createNameArguments(element);
162         return Messages.format(pattern, args);
163     }
164
165     private static String JavaDoc[] createNameArguments(IJavaElement element) throws JavaModelException {
166         switch(element.getElementType()){
167             case IJavaElement.CLASS_FILE:
168                 return new String JavaDoc[]{element.getElementName()};
169             case IJavaElement.COMPILATION_UNIT:
170                 return new String JavaDoc[]{element.getElementName()};
171             case IJavaElement.FIELD:
172                 return new String JavaDoc[]{element.getElementName()};
173             case IJavaElement.IMPORT_CONTAINER:
174                 return new String JavaDoc[0];
175             case IJavaElement.IMPORT_DECLARATION:
176                 return new String JavaDoc[]{element.getElementName()};
177             case IJavaElement.INITIALIZER:
178                 return new String JavaDoc[0];
179             case IJavaElement.JAVA_PROJECT:
180                 return new String JavaDoc[]{element.getElementName()};
181             case IJavaElement.METHOD:
182                 return new String JavaDoc[]{element.getElementName()};
183             case IJavaElement.PACKAGE_DECLARATION:
184                 if (JavaElementUtil.isDefaultPackage(element))
185                     return new String JavaDoc[0];
186                 else
187                     return new String JavaDoc[]{element.getElementName()};
188             case IJavaElement.PACKAGE_FRAGMENT:
189                 return new String JavaDoc[]{element.getElementName()};
190             case IJavaElement.PACKAGE_FRAGMENT_ROOT:
191                 return new String JavaDoc[]{element.getElementName()};
192             case IJavaElement.TYPE:
193                 IType type= (IType)element;
194                 String JavaDoc name= type.getElementName();
195                 if (name.length() == 0 && type.isAnonymous()) {
196                     String JavaDoc superclassName= Signature.getSimpleName(type.getSuperclassName());
197                     return new String JavaDoc[]{Messages.format(RefactoringCoreMessages.ReorgUtils_19, superclassName)};
198                 }
199                 return new String JavaDoc[]{element.getElementName()};
200             default:
201                 Assert.isTrue(false);
202                 return null;
203         }
204     }
205
206     private static String JavaDoc createNamePattern(IJavaElement element) throws JavaModelException {
207         switch(element.getElementType()){
208             case IJavaElement.CLASS_FILE:
209                 return RefactoringCoreMessages.ReorgUtils_3;
210             case IJavaElement.COMPILATION_UNIT:
211                 return RefactoringCoreMessages.ReorgUtils_4;
212             case IJavaElement.FIELD:
213                 return RefactoringCoreMessages.ReorgUtils_5;
214             case IJavaElement.IMPORT_CONTAINER:
215                 return RefactoringCoreMessages.ReorgUtils_6;
216             case IJavaElement.IMPORT_DECLARATION:
217                 return RefactoringCoreMessages.ReorgUtils_7;
218             case IJavaElement.INITIALIZER:
219                 return RefactoringCoreMessages.ReorgUtils_8;
220             case IJavaElement.JAVA_PROJECT:
221                 return RefactoringCoreMessages.ReorgUtils_9;
222             case IJavaElement.METHOD:
223                 if (((IMethod)element).isConstructor())
224                     return RefactoringCoreMessages.ReorgUtils_10;
225                 else
226                     return RefactoringCoreMessages.ReorgUtils_11;
227             case IJavaElement.PACKAGE_DECLARATION:
228                 return RefactoringCoreMessages.ReorgUtils_12;
229             case IJavaElement.PACKAGE_FRAGMENT:
230                 if (JavaElementUtil.isDefaultPackage(element))
231                     return RefactoringCoreMessages.ReorgUtils_13;
232                 else
233                     return RefactoringCoreMessages.ReorgUtils_14;
234             case IJavaElement.PACKAGE_FRAGMENT_ROOT:
235                 if (isSourceFolder(element))
236                     return RefactoringCoreMessages.ReorgUtils_15;
237                 if (isClassFolder(element))
238                     return RefactoringCoreMessages.ReorgUtils_16;
239                 return RefactoringCoreMessages.ReorgUtils_17;
240             case IJavaElement.TYPE:
241                 IType type= (IType)element;
242                 if (type.getElementName().length() == 0 && type.isAnonymous())
243                     return RefactoringCoreMessages.ReorgUtils_20;
244                 return RefactoringCoreMessages.ReorgUtils_18;
245             default:
246                 Assert.isTrue(false);
247                 return null;
248         }
249     }
250
251     public static IResource[] getResources(List JavaDoc elements) {
252         List JavaDoc resources= new ArrayList JavaDoc(elements.size());
253         for (Iterator JavaDoc iter= elements.iterator(); iter.hasNext();) {
254             Object JavaDoc element= iter.next();
255             if (element instanceof IResource)
256                 resources.add(element);
257         }
258         return (IResource[]) resources.toArray(new IResource[resources.size()]);
259     }
260
261     public static IJavaElement[] getJavaElements(List JavaDoc elements) {
262         List JavaDoc resources= new ArrayList JavaDoc(elements.size());
263         for (Iterator JavaDoc iter= elements.iterator(); iter.hasNext();) {
264             Object JavaDoc element= iter.next();
265             if (element instanceof IJavaElement)
266                 resources.add(element);
267         }
268         return (IJavaElement[]) resources.toArray(new IJavaElement[resources.size()]);
269     }
270     
271     public static IWorkingSet[] getWorkingSets(List JavaDoc elements) {
272         List JavaDoc result= new ArrayList JavaDoc(1);
273         for (Iterator JavaDoc iter= elements.iterator(); iter.hasNext();) {
274             Object JavaDoc element= iter.next();
275             if (element instanceof IWorkingSet) {
276                 result.add(element);
277             }
278         }
279         return (IWorkingSet[])result.toArray(new IWorkingSet[result.size()]);
280     }
281
282     public static boolean hasSourceAvailable(IMember member) throws JavaModelException{
283         return ! member.isBinary() ||
284                 (member.getSourceRange() != null && ! fgUnknownRange.equals(member.getSourceRange()));
285     }
286     
287     public static IResource[] setMinus(IResource[] setToRemoveFrom, IResource[] elementsToRemove) {
288         Set JavaDoc setMinus= new HashSet JavaDoc(setToRemoveFrom.length - setToRemoveFrom.length);
289         setMinus.addAll(Arrays.asList(setToRemoveFrom));
290         setMinus.removeAll(Arrays.asList(elementsToRemove));
291         return (IResource[]) setMinus.toArray(new IResource[setMinus.size()]);
292     }
293
294     public static IJavaElement[] setMinus(IJavaElement[] setToRemoveFrom, IJavaElement[] elementsToRemove) {
295         Set JavaDoc setMinus= new HashSet JavaDoc(setToRemoveFrom.length - setToRemoveFrom.length);
296         setMinus.addAll(Arrays.asList(setToRemoveFrom));
297         setMinus.removeAll(Arrays.asList(elementsToRemove));
298         return (IJavaElement[]) setMinus.toArray(new IJavaElement[setMinus.size()]);
299     }
300     
301     public static IJavaElement[] union(IJavaElement[] set1, IJavaElement[] set2) {
302         List JavaDoc union= new ArrayList JavaDoc(set1.length + set2.length);//use lists to avoid sequence problems
303
addAll(set1, union);
304         addAll(set2, union);
305         return (IJavaElement[]) union.toArray(new IJavaElement[union.size()]);
306     }
307
308     public static IResource[] union(IResource[] set1, IResource[] set2) {
309         List JavaDoc union= new ArrayList JavaDoc(set1.length + set2.length);//use lists to avoid sequence problems
310
addAll(ReorgUtils.getNotNulls(set1), union);
311         addAll(ReorgUtils.getNotNulls(set2), union);
312         return (IResource[]) union.toArray(new IResource[union.size()]);
313     }
314
315     private static void addAll(Object JavaDoc[] array, List JavaDoc list) {
316         for (int i= 0; i < array.length; i++) {
317             if (! list.contains(array[i]))
318                 list.add(array[i]);
319         }
320     }
321
322     public static Set JavaDoc union(Set JavaDoc set1, Set JavaDoc set2){
323         Set JavaDoc union= new HashSet JavaDoc(set1.size() + set2.size());
324         union.addAll(set1);
325         union.addAll(set2);
326         return union;
327     }
328
329     public static IType[] getMainTypes(IJavaElement[] javaElements) throws JavaModelException {
330         List JavaDoc result= new ArrayList JavaDoc();
331         for (int i= 0; i < javaElements.length; i++) {
332             IJavaElement element= javaElements[i];
333             if (element instanceof IType && JavaElementUtil.isMainType((IType)element))
334                 result.add(element);
335         }
336         return (IType[]) result.toArray(new IType[result.size()]);
337     }
338     
339     public static IFolder[] getFolders(IResource[] resources) {
340         Set JavaDoc result= getResourcesOfType(resources, IResource.FOLDER);
341         return (IFolder[]) result.toArray(new IFolder[result.size()]);
342     }
343
344     public static IFile[] getFiles(IResource[] resources) {
345         Set JavaDoc result= getResourcesOfType(resources, IResource.FILE);
346         return (IFile[]) result.toArray(new IFile[result.size()]);
347     }
348         
349     //the result can be cast down to the requested type array
350
public static Set JavaDoc getResourcesOfType(IResource[] resources, int typeMask){
351         Set JavaDoc result= new HashSet JavaDoc(resources.length);
352         for (int i= 0; i < resources.length; i++) {
353             if (isOfType(resources[i], typeMask))
354                 result.add(resources[i]);
355         }
356         return result;
357     }
358     
359     //the result can be cast down to the requested type array
360
//type is _not_ a mask
361
public static List JavaDoc getElementsOfType(IJavaElement[] javaElements, int type){
362         List JavaDoc result= new ArrayList JavaDoc(javaElements.length);
363         for (int i= 0; i < javaElements.length; i++) {
364             if (isOfType(javaElements[i], type))
365                 result.add(javaElements[i]);
366         }
367         return result;
368     }
369
370     public static boolean hasElementsNotOfType(IResource[] resources, int typeMask) {
371         for (int i= 0; i < resources.length; i++) {
372             IResource resource= resources[i];
373             if (resource != null && ! isOfType(resource, typeMask))
374                 return true;
375         }
376         return false;
377     }
378
379     //type is _not_ a mask
380
public static boolean hasElementsNotOfType(IJavaElement[] javaElements, int type) {
381         for (int i= 0; i < javaElements.length; i++) {
382             IJavaElement element= javaElements[i];
383             if (element != null && ! isOfType(element, type))
384                 return true;
385         }
386         return false;
387     }
388     
389     //type is _not_ a mask
390
public static boolean hasElementsOfType(IJavaElement[] javaElements, int type) {
391         for (int i= 0; i < javaElements.length; i++) {
392             IJavaElement element= javaElements[i];
393             if (element != null && isOfType(element, type))
394                 return true;
395         }
396         return false;
397     }
398
399     public static boolean hasElementsOfType(IJavaElement[] javaElements, int[] types) {
400         for (int i= 0; i < types.length; i++) {
401             if (hasElementsOfType(javaElements, types[i])) return true;
402         }
403         return false;
404     }
405
406     public static boolean hasElementsOfType(IResource[] resources, int typeMask) {
407         for (int i= 0; i < resources.length; i++) {
408             IResource resource= resources[i];
409             if (resource != null && isOfType(resource, typeMask))
410                 return true;
411         }
412         return false;
413     }
414
415     private static boolean isOfType(IJavaElement element, int type) {
416         return element.getElementType() == type;//this is _not_ a mask
417
}
418         
419     private static boolean isOfType(IResource resource, int type) {
420         return resource != null && isFlagSet(resource.getType(), type);
421     }
422         
423     private static boolean isFlagSet(int flags, int flag){
424         return (flags & flag) != 0;
425     }
426
427     public static boolean isSourceFolder(IJavaElement javaElement) throws JavaModelException {
428         return (javaElement instanceof IPackageFragmentRoot) &&
429                 ((IPackageFragmentRoot)javaElement).getKind() == IPackageFragmentRoot.K_SOURCE;
430     }
431     
432     public static boolean isClassFolder(IJavaElement javaElement) throws JavaModelException {
433         return (javaElement instanceof IPackageFragmentRoot) &&
434                 ((IPackageFragmentRoot)javaElement).getKind() == IPackageFragmentRoot.K_BINARY;
435     }
436     
437     public static boolean isPackageFragmentRoot(IJavaProject javaProject) throws JavaModelException{
438         return getCorrespondingPackageFragmentRoot(javaProject) != null;
439     }
440     
441     private static boolean isPackageFragmentRootCorrespondingToProject(IPackageFragmentRoot root) {
442         return root.getResource() instanceof IProject;
443     }
444
445     public static IPackageFragmentRoot getCorrespondingPackageFragmentRoot(IJavaProject p) throws JavaModelException {
446         IPackageFragmentRoot[] roots= p.getPackageFragmentRoots();
447         for (int i= 0; i < roots.length; i++) {
448             if (isPackageFragmentRootCorrespondingToProject(roots[i]))
449                 return roots[i];
450         }
451         return null;
452     }
453         
454     public static boolean containsLinkedResources(IResource[] resources){
455         for (int i= 0; i < resources.length; i++) {
456             if (resources[i] != null && resources[i].isLinked()) return true;
457         }
458         return false;
459     }
460     
461     public static boolean containsLinkedResources(IJavaElement[] javaElements){
462         for (int i= 0; i < javaElements.length; i++) {
463             IResource res= getResource(javaElements[i]);
464             if (res != null && res.isLinked()) return true;
465         }
466         return false;
467     }
468
469     public static boolean canBeDestinationForLinkedResources(IResource resource) {
470         return resource.isAccessible() && resource instanceof IProject;
471     }
472
473     public static boolean canBeDestinationForLinkedResources(IJavaElement javaElement) {
474         if (javaElement instanceof IPackageFragmentRoot){
475             return isPackageFragmentRootCorrespondingToProject((IPackageFragmentRoot)javaElement);
476         } else if (javaElement instanceof IJavaProject){
477             return true;//XXX ???
478
} else return false;
479     }
480     
481     public static boolean isParentInWorkspaceOrOnDisk(IPackageFragment pack, IPackageFragmentRoot root){
482         if (pack == null)
483             return false;
484         IJavaElement packParent= pack.getParent();
485         if (packParent == null)
486             return false;
487         if (packParent.equals(root))
488             return true;
489         IResource packageResource= ResourceUtil.getResource(pack);
490         IResource packageRootResource= ResourceUtil.getResource(root);
491         return isParentInWorkspaceOrOnDisk(packageResource, packageRootResource);
492     }
493
494     public static boolean isParentInWorkspaceOrOnDisk(IPackageFragmentRoot root, IJavaProject javaProject){
495         if (root == null)
496             return false;
497         IJavaElement rootParent= root.getParent();
498         if (rootParent == null)
499             return false;
500         if (rootParent.equals(root))
501             return true;
502         IResource packageResource= ResourceUtil.getResource(root);
503         IResource packageRootResource= ResourceUtil.getResource(javaProject);
504         return isParentInWorkspaceOrOnDisk(packageResource, packageRootResource);
505     }
506
507     public static boolean isParentInWorkspaceOrOnDisk(ICompilationUnit cu, IPackageFragment dest){
508         if (cu == null)
509             return false;
510         IJavaElement cuParent= cu.getParent();
511         if (cuParent == null)
512             return false;
513         if (cuParent.equals(dest))
514             return true;
515         IResource cuResource= cu.getResource();
516         IResource packageResource= ResourceUtil.getResource(dest);
517         return isParentInWorkspaceOrOnDisk(cuResource, packageResource);
518     }
519     
520     public static boolean isParentInWorkspaceOrOnDisk(IResource res, IResource maybeParent){
521         if (res == null)
522             return false;
523         return areEqualInWorkspaceOrOnDisk(res.getParent(), maybeParent);
524     }
525     
526     public static boolean areEqualInWorkspaceOrOnDisk(IResource r1, IResource r2){
527         if (r1 == null || r2 == null)
528             return false;
529         if (r1.equals(r2))
530             return true;
531         URI JavaDoc r1Location= r1.getLocationURI();
532         URI JavaDoc r2Location= r2.getLocationURI();
533         if (r1Location == null || r2Location == null)
534             return false;
535         return r1Location.equals(r2Location);
536     }
537     
538     public static IResource[] getNotNulls(IResource[] resources) {
539         Collection JavaDoc result= new ArrayList JavaDoc(resources.length);
540         for (int i= 0; i < resources.length; i++) {
541             IResource resource= resources[i];
542             if (resource != null && ! result.contains(resource))
543                 result.add(resource);
544         }
545         return (IResource[]) result.toArray(new IResource[result.size()]);
546     }
547     
548     public static IResource[] getNotLinked(IResource[] resources) {
549         Collection JavaDoc result= new ArrayList JavaDoc(resources.length);
550         for (int i= 0; i < resources.length; i++) {
551             IResource resource= resources[i];
552             if (resource != null && ! result.contains(resource) && ! resource.isLinked())
553                 result.add(resource);
554         }
555         return (IResource[]) result.toArray(new IResource[result.size()]);
556     }
557     
558     /* List<IJavaElement> javaElements
559      * return ICompilationUnit -> List<IJavaElement>
560      */

561     public static Map JavaDoc groupByCompilationUnit(List JavaDoc javaElements){
562         Map JavaDoc result= new HashMap JavaDoc();
563         for (Iterator JavaDoc iter= javaElements.iterator(); iter.hasNext();) {
564             IJavaElement element= (IJavaElement) iter.next();
565             ICompilationUnit cu= ReorgUtils.getCompilationUnit(element);
566             if (cu != null){
567                 if (! result.containsKey(cu))
568                     result.put(cu, new ArrayList JavaDoc(1));
569                 ((List JavaDoc)result.get(cu)).add(element);
570             }
571         }
572         return result;
573     }
574     
575     public static void splitIntoJavaElementsAndResources(Object JavaDoc[] elements, List JavaDoc javaElementResult, List JavaDoc resourceResult) {
576         for (int i= 0; i < elements.length; i++) {
577             Object JavaDoc element= elements[i];
578             if (element instanceof IJavaElement) {
579                 javaElementResult.add(element);
580             } else if (element instanceof IResource) {
581                 IResource resource= (IResource)element;
582                 IJavaElement jElement= JavaCore.create(resource);
583                 if (jElement != null && jElement.exists())
584                     javaElementResult.add(jElement);
585                 else
586                     resourceResult.add(resource);
587             }
588         }
589     }
590
591     public static boolean containsElementOrParent(Set JavaDoc elements, IJavaElement element) {
592         IJavaElement curr= element;
593         do {
594             if (elements.contains(curr))
595                 return true;
596             curr= curr.getParent();
597         } while (curr != null);
598         return false;
599     }
600
601     public static boolean containsElementOrParent(Set JavaDoc elements, IResource element) {
602         IResource curr= element;
603         do {
604             if (elements.contains(curr))
605                 return true;
606             IJavaElement jElement= JavaCore.create(curr);
607             if (jElement != null && jElement.exists()) {
608                 return containsElementOrParent(elements, jElement);
609             }
610             curr= curr.getParent();
611         } while (curr != null);
612         return false;
613     }
614 }
615
Popular Tags