1 19 20 package org.netbeans.modules.refactoring.java.classpath; 21 import java.net.URL ; 22 import java.util.*; 23 import org.netbeans.api.java.classpath.ClassPath; 24 import org.netbeans.api.java.project.JavaProjectConstants; 25 import org.netbeans.api.java.queries.SourceForBinaryQuery; 26 import org.netbeans.api.project.FileOwnerQuery; 27 import org.netbeans.api.project.Project; 28 import org.netbeans.api.project.ProjectUtils; 29 import org.netbeans.api.project.SourceGroup; 30 import org.netbeans.api.project.Sources; 31 import org.netbeans.api.project.ui.OpenProjects; 32 import org.openide.filesystems.FileObject; 33 import org.openide.filesystems.FileUtil; 34 35 39 public class Util { 40 41 private static WeakHashMap superProjectsCache = null; 42 43 private static WeakHashMap getSuperProjectsCache() { 44 if (superProjectsCache==null) 45 superProjectsCache = new WeakHashMap(); 46 return superProjectsCache; 47 } 48 49 public static Set getSuperprojects(Project project) { 50 Set result = (Set) getSuperProjectsCache().get(project); 51 if (result!=null) { 52 return result; 54 } 55 result = new HashSet(); 56 Project openedProjects[] = OpenProjects.getDefault().getOpenProjects(); 57 HashSet sourcePath = new HashSet(); 58 Sources sources = ProjectUtils.getSources(project); 59 SourceGroup[] sourceGroup = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); 60 for(int sourceGroupsIndex=0; sourceGroupsIndex<sourceGroup.length; sourceGroupsIndex++) { 61 ClassPath cp = ClassPath.getClassPath(sourceGroup[sourceGroupsIndex].getRootFolder(), ClassPath.SOURCE); 63 sourcePath.addAll(Arrays.asList(cp.getRoots())); 64 } 65 66 for (int i = 0; i<openedProjects.length; i++) { 67 Project p = openedProjects[i]; 69 Sources src = ProjectUtils.getSources(p); 70 SourceGroup[] groups = src.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); 71 for(int j=0; j<groups.length; j++) { 72 ClassPath cp = ClassPath.getClassPath(groups[j].getRootFolder(), ClassPath.COMPILE); 74 List entries = cp.entries(); 75 for (Iterator it = entries.iterator(); it.hasNext();) { 76 URL binURL = ((ClassPath.Entry) it.next()).getURL(); 78 FileObject[] roots = SourceForBinaryQuery.findSourceRoots(binURL).getRoots(); 79 for (int z = 0; z<roots.length; z++) { 80 if (sourcePath.contains(roots[z])) { 81 result.add(p); 83 } 84 } 85 } 86 } 87 } 88 getSuperProjectsCache().put(project, result); 89 return result; 90 } 91 92 static void resetCache() { 93 superProjectsCache = null; 94 } 95 96 public static boolean isUnderSourceRootOfOpenProjects(FileObject fo) { 97 Project p = FileOwnerQuery.getOwner(fo); 98 if (p==null) return false; 99 Project[] opened = OpenProjects.getDefault().getOpenProjects(); 100 for (int i = 0; i<opened.length; i++) { 101 if (p==opened[i]) { 102 SourceGroup[] gr = ProjectUtils.getSources(p).getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); 103 for (int j = 0; j < gr.length; j++) { 104 if (fo==gr[j].getRootFolder()) return true; 105 if (FileUtil.isParentOf(gr[j].getRootFolder(), fo)) 106 return true; 107 } 108 return false; 109 } 110 } 111 return false; 112 } 113 114 } 115 | Popular Tags |