X-Git-Url: http://git.jetbrains.org/?p=idea%2Fcommunity.git;a=blobdiff_plain;f=java%2Fjava-impl%2Fsrc%2Fcom%2Fintellij%2FcyclicDependencies%2FCyclicDependenciesBuilder.java;h=8f546070ad139aadf32d5ac69a475d3cb063ea8d;hp=a38a1485c606563c1c19eded84f201e26e22fbad;hb=123242c4b23a90f7910193139aa4d3b2979d9647;hpb=f8fdf48f229b01eee6eebc84d20c89f7f480dc05;ds=sidebyside diff --git a/java/java-impl/src/com/intellij/cyclicDependencies/CyclicDependenciesBuilder.java b/java/java-impl/src/com/intellij/cyclicDependencies/CyclicDependenciesBuilder.java index a38a148..8f54607 100644 --- a/java/java-impl/src/com/intellij/cyclicDependencies/CyclicDependenciesBuilder.java +++ b/java/java-impl/src/com/intellij/cyclicDependencies/CyclicDependenciesBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,39 +26,36 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.packageDependencies.DependenciesBuilder; import com.intellij.packageDependencies.ForwardDependenciesBuilder; import com.intellij.psi.*; -import com.intellij.util.graph.CachingSemiGraph; -import com.intellij.util.graph.Graph; -import com.intellij.util.graph.GraphAlgorithms; -import com.intellij.util.graph.GraphGenerator; +import com.intellij.util.graph.*; +import org.jetbrains.annotations.NotNull; import java.util.*; -/** - * User: anna - * Date: Jan 30, 2005 - */ public class CyclicDependenciesBuilder{ + @NotNull private final Project myProject; private final AnalysisScope myScope; - private final Map myPackages = new HashMap(); + private final Map myPackages = new HashMap<>(); private Graph myGraph; - private final Map>> myFilesInDependentPackages = new HashMap>>(); - private final Map>> myBackwardFilesInDependentPackages = new HashMap>>(); - private final Map> myPackageDependencies = new HashMap>(); - private HashMap>> myCyclicDependencies = new HashMap>>(); - private int myFileCount = 0; + private final Map>> myFilesInDependentPackages = new HashMap<>(); + private final Map>> myBackwardFilesInDependentPackages = new HashMap<>(); + private final Map> myPackageDependencies = new HashMap<>(); + private HashMap>> myCyclicDependencies = new HashMap<>(); + private int myFileCount; private final ForwardDependenciesBuilder myForwardBuilder; private String myRootNodeNameInUsageView; - public CyclicDependenciesBuilder(final Project project, final AnalysisScope scope) { + public CyclicDependenciesBuilder(@NotNull Project project, final AnalysisScope scope) { myProject = project; myScope = scope; myForwardBuilder = new ForwardDependenciesBuilder(myProject, myScope){ + @Override public String getRootNodeNameInUsageView() { return CyclicDependenciesBuilder.this.getRootNodeNameInUsageView(); } + @Override public String getInitialUsagesPosition() { return AnalysisScopeBundle.message("cyclic.dependencies.usage.view.initial.text"); } @@ -73,6 +70,7 @@ public class CyclicDependenciesBuilder{ myRootNodeNameInUsageView = rootNodeNameInUsageView; } + @NotNull public Project getProject() { return myProject; } @@ -107,7 +105,7 @@ public class CyclicDependenciesBuilder{ for (PsiPackage pack : packs) { Set pack2Packages = myPackageDependencies.get(pack); if (pack2Packages == null) { - pack2Packages = new HashSet(); + pack2Packages = new HashSet<>(); myPackageDependencies.put(pack, pack2Packages); } for (PsiFile psiFile : psiFiles) { @@ -155,12 +153,12 @@ public class CyclicDependenciesBuilder{ final Map>> filesInDependentPackages) { Map> dependentPackages2Files = filesInDependentPackages.get(pack); if (dependentPackages2Files == null) { - dependentPackages2Files = new HashMap>(); + dependentPackages2Files = new HashMap<>(); filesInDependentPackages.put(pack, dependentPackages2Files); } Set depFiles = dependentPackages2Files.get(depPackage); if (depFiles == null) { - depFiles = new HashSet(); + depFiles = new HashSet<>(); dependentPackages2Files.put(depPackage, depFiles); } depFiles.add(file); @@ -170,26 +168,26 @@ public class CyclicDependenciesBuilder{ private void constractWholeDependenciesMap(final PsiJavaFile psiJavaFile, final PsiFile psiFile) { Set wholeDependencies = myForwardBuilder.getDependencies().get(psiJavaFile); if (wholeDependencies == null) { - wholeDependencies = new HashSet(); + wholeDependencies = new HashSet<>(); myForwardBuilder.getDependencies().put(psiJavaFile, wholeDependencies); } wholeDependencies.add(psiFile); } public Set getDependentFilesInPackage(PsiPackage pack, PsiPackage depPack) { - Set psiFiles = new HashSet(); + Set psiFiles = new HashSet<>(); final Map> map = myFilesInDependentPackages.get(pack); if (map != null){ psiFiles = map.get(depPack); } if (psiFiles == null) { - psiFiles = new HashSet(); + psiFiles = new HashSet<>(); } return psiFiles; } public Set getDependentFilesInPackage(PsiPackage firstPack, PsiPackage middlePack, PsiPackage lastPack) { - Set result = new HashSet(); + Set result = new HashSet<>(); final Map> forwardMap = myFilesInDependentPackages.get(firstPack); if (forwardMap != null && forwardMap.get(middlePack) != null){ result.addAll(forwardMap.get(middlePack)); @@ -206,19 +204,18 @@ public class CyclicDependenciesBuilder{ return myCyclicDependencies; } - public HashMap>> getCycles(Collection packages) { + public HashMap>> getCycles(Collection packages) { if (myGraph == null){ myGraph = buildGraph(); } - final HashMap>> result = new HashMap>>(); - for (Iterator iterator = packages.iterator(); iterator.hasNext();) { - PsiPackage psiPackage = iterator.next(); - Set> paths2Pack = result.get(psiPackage); - if (paths2Pack == null) { - paths2Pack = new HashSet>(); - result.put(psiPackage, paths2Pack); - } - paths2Pack.addAll(GraphAlgorithms.getInstance().findCycles(myGraph, psiPackage)); + final HashMap>> result = new HashMap<>(); + for (PsiPackage psiPackage : packages) { + Set> paths2Pack = result.get(psiPackage); + if (paths2Pack == null) { + paths2Pack = new HashSet<>(); + result.put(psiPackage, paths2Pack); + } + paths2Pack.addAll(GraphAlgorithms.getInstance().findCycles(myGraph, psiPackage)); } return result; } @@ -241,26 +238,28 @@ public class CyclicDependenciesBuilder{ return myPackages; } - private Graph buildGraph() { - final Graph graph = GraphGenerator.create(CachingSemiGraph.create(new GraphGenerator.SemiGraph() { + return GraphGenerator.generate(CachingSemiGraph.cache(new InboundSemiGraph() { + @Override + @NotNull public Collection getNodes() { return getAllScopePackages().values(); } + @NotNull + @Override public Iterator getIn(PsiPackage psiPack) { final Set psiPackages = myPackageDependencies.get(psiPack); if (psiPackages == null) { //for packs without java classes - return new HashSet().iterator(); + return Collections.emptyIterator(); } return psiPackages.iterator(); } })); - return graph; } public Set getPackageHierarhy(String packageName) { - final Set result = new HashSet(); + final Set result = new HashSet<>(); PsiPackage psiPackage = findPackage(packageName); if (psiPackage != null) { result.add(psiPackage); @@ -283,5 +282,4 @@ public class CyclicDependenciesBuilder{ final PsiPackage psiPackage = getAllScopePackages().get(packName); return psiPackage; } - -} +} \ No newline at end of file