1 11 package org.eclipse.jdt.internal.corext.refactoring.reorg; 12 13 import java.util.ArrayList ; 14 import java.util.List ; 15 16 import org.eclipse.core.runtime.Assert; 17 18 import org.eclipse.core.resources.IResource; 19 20 import org.eclipse.jdt.core.IJavaElement; 21 import org.eclipse.jdt.core.JavaCore; 22 23 24 public class ParentChecker { 25 private IResource[] fResources; 26 private IJavaElement[] fJavaElements; 27 28 public ParentChecker(IResource[] resources, IJavaElement[] javaElements) { 29 Assert.isNotNull(resources); 30 Assert.isNotNull(javaElements); 31 fResources= resources; 32 fJavaElements= javaElements; 33 } 34 35 public boolean haveCommonParent() { 36 return getCommonParent() != null; 37 } 38 39 public Object getCommonParent(){ 40 if (fJavaElements.length == 0 && fResources.length == 0) 41 return null; 42 if (! resourcesHaveCommonParent() || ! javaElementsHaveCommonParent()) 43 return null; 44 if (fJavaElements.length == 0){ 45 IResource commonResourceParent= getCommonResourceParent(); 46 Assert.isNotNull(commonResourceParent); 47 IJavaElement convertedToJava= JavaCore.create(commonResourceParent); 48 if (convertedToJava != null && convertedToJava.exists()) 49 return convertedToJava; 50 else 51 return commonResourceParent; 52 } 53 if (fResources.length == 0) 54 return getCommonJavaElementParent(); 55 56 IResource commonResourceParent= getCommonResourceParent(); 57 IJavaElement commonJavaElementParent= getCommonJavaElementParent(); 58 Assert.isNotNull(commonJavaElementParent); 59 Assert.isNotNull(commonResourceParent); 60 IJavaElement convertedToJava= JavaCore.create(commonResourceParent); 61 if (convertedToJava == null || 62 ! convertedToJava.exists() || 63 ! commonJavaElementParent.equals(convertedToJava)) 64 return null; 65 return commonJavaElementParent; 66 } 67 68 private IJavaElement getCommonJavaElementParent() { 69 Assert.isNotNull(fJavaElements); 70 Assert.isTrue(fJavaElements.length > 0); return fJavaElements[0].getParent(); 72 } 73 74 private IResource getCommonResourceParent() { 75 Assert.isNotNull(fResources); 76 Assert.isTrue(fResources.length > 0); return fResources[0].getParent(); 78 } 79 80 private boolean javaElementsHaveCommonParent() { 81 if (fJavaElements.length == 0) 82 return true; 83 IJavaElement firstParent= fJavaElements[0].getParent(); 84 Assert.isNotNull(firstParent); for (int i= 1; i < fJavaElements.length; i++) { 86 if (! firstParent.equals(fJavaElements[i].getParent())) 87 return false; 88 } 89 return true; 90 } 91 92 private boolean resourcesHaveCommonParent() { 93 if (fResources.length == 0) 94 return true; 95 IResource firstParent= fResources[0].getParent(); 96 Assert.isNotNull(firstParent); 97 for (int i= 1; i < fResources.length; i++) { 98 if (! firstParent.equals(fResources[i].getParent())) 99 return false; 100 } 101 return true; 102 } 103 104 public IResource[] getResources(){ 105 return fResources; 106 } 107 108 public IJavaElement[] getJavaElements(){ 109 return fJavaElements; 110 } 111 112 public void removeElementsWithAncestorsOnList(boolean removeOnlyJavaElements) { 113 if (! removeOnlyJavaElements){ 114 removeResourcesDescendantsOfResources(); 115 removeResourcesDescendantsOfJavaElements(); 116 } 117 removeJavaElementsDescendantsOfJavaElements(); 118 } 120 121 private void removeResourcesDescendantsOfJavaElements() { 122 List subResources= new ArrayList (3); 123 for (int i= 0; i < fResources.length; i++) { 124 IResource subResource= fResources[i]; 125 for (int j= 0; j < fJavaElements.length; j++) { 126 IJavaElement superElements= fJavaElements[j]; 127 if (isDescendantOf(subResource, superElements)) 128 subResources.add(subResource); 129 } 130 } 131 removeFromSetToDelete((IResource[]) subResources.toArray(new IResource[subResources.size()])); 132 } 133 134 private void removeJavaElementsDescendantsOfJavaElements() { 135 List subElements= new ArrayList (3); 136 for (int i= 0; i < fJavaElements.length; i++) { 137 IJavaElement subElement= fJavaElements[i]; 138 for (int j= 0; j < fJavaElements.length; j++) { 139 IJavaElement superElement= fJavaElements[j]; 140 if (isDescendantOf(subElement, superElement)) 141 subElements.add(subElement); 142 } 143 } 144 removeFromSetToDelete((IJavaElement[]) subElements.toArray(new IJavaElement[subElements.size()])); 145 } 146 147 private void removeResourcesDescendantsOfResources() { 148 List subResources= new ArrayList (3); 149 for (int i= 0; i < fResources.length; i++) { 150 IResource subResource= fResources[i]; 151 for (int j= 0; j < fResources.length; j++) { 152 IResource superResource= fResources[j]; 153 if (isDescendantOf(subResource, superResource)) 154 subResources.add(subResource); 155 } 156 } 157 removeFromSetToDelete((IResource[]) subResources.toArray(new IResource[subResources.size()])); 158 } 159 160 public static boolean isDescendantOf(IResource subResource, IJavaElement superElement) { 161 IResource parent= subResource.getParent(); 162 while(parent != null){ 163 IJavaElement el= JavaCore.create(parent); 164 if (el != null && el.exists() && el.equals(superElement)) 165 return true; 166 parent= parent.getParent(); 167 } 168 return false; 169 } 170 171 public static boolean isDescendantOf(IJavaElement subElement, IJavaElement superElement) { 172 if (subElement.equals(superElement)) 173 return false; 174 IJavaElement parent= subElement.getParent(); 175 while(parent != null){ 176 if (parent.equals(superElement)) 177 return true; 178 parent= parent.getParent(); 179 } 180 return false; 181 } 182 183 public static boolean isDescendantOf(IResource subResource, IResource superResource) { 184 return ! subResource.equals(superResource) && superResource.getFullPath().isPrefixOf(subResource.getFullPath()); 185 } 186 187 private void removeFromSetToDelete(IResource[] resourcesToNotDelete) { 188 fResources= ReorgUtils.setMinus(fResources, resourcesToNotDelete); 189 } 190 191 private void removeFromSetToDelete(IJavaElement[] elementsToNotDelete) { 192 fJavaElements= ReorgUtils.setMinus(fJavaElements, elementsToNotDelete); 193 } 194 } 195 | Popular Tags |