gui: fix missed nodes in hierarchical packages tree

This commit is contained in:
Skylot
2013-12-26 23:33:38 +04:00
parent 6bac5c162e
commit 438b3b50d9
3 changed files with 90 additions and 21 deletions
@@ -84,11 +84,13 @@ public class JPackage extends JNode implements Comparable<JPackage> {
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
JPackage jPackage = (JPackage) o;
if (!name.equals(jPackage.name)) return false;
return true;
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
return name.equals(((JPackage) o).name);
}
@Override
@@ -10,7 +10,7 @@ import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -47,6 +47,12 @@ public class JRoot extends JNode {
}
}
/**
* Convert packages list to hierarchical packages representation
*
* @param packages input packages list
* @return root packages
*/
List<JPackage> getHierarchyPackages(List<JavaPackage> packages) {
Map<String, JPackage> pkgMap = new HashMap<String, JPackage>();
for (JavaPackage pkg : packages) {
@@ -63,11 +69,11 @@ public class JRoot extends JNode {
pkg.getInnerPackages().addAll(innerPkg.getInnerPackages());
pkg.getClasses().addAll(innerPkg.getClasses());
pkg.setName(pkg.getName() + "." + innerPkg.getName());
innerPkg.getInnerPackages().clear();
innerPkg.getClasses().clear();
repeat = true;
pkgMap.remove(innerPkg.getName());
break;
}
}
@@ -80,14 +86,16 @@ public class JRoot extends JNode {
it.remove();
}
}
// find root packages
Set<JPackage> inners = new HashSet<JPackage>();
// use identity set for collect inner packages
Set<JPackage> innerPackages = Collections.newSetFromMap(new IdentityHashMap<JPackage,Boolean>());
for (JPackage pkg : pkgMap.values()) {
inners.addAll(pkg.getInnerPackages());
innerPackages.addAll(pkg.getInnerPackages());
}
// find root packages
List<JPackage> rootPkgs = new ArrayList<JPackage>();
for (JPackage pkg : pkgMap.values()) {
if (!inners.contains(pkg)) {
if (!innerPackages.contains(pkg)) {
rootPkgs.add(pkg);
}
}