package krasa.formatter.plugin;
import java.util.Comparator;
import krasa.formatter.utils.StringUtils;
import com.intellij.openapi.project.Project;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.impl.JavaPsiFacadeImpl;
import com.intellij.psi.search.GlobalSearchScope;
class ImportsComparator implements Comparator<String> {
private JavaPsiFacade javaPsiFacade;
private GlobalSearchScope scope;
public ImportsComparator(Project project) {
javaPsiFacade = JavaPsiFacadeImpl.getInstance(project);
scope = GlobalSearchScope.allScope(project);
}
public ImportsComparator() {
}
@Override
public int compare(String o1, String o2) {
String simpleName1 = simpleName(o1);
String containerName1 = getPackage(o1, simpleName1);
String simpleName2 = simpleName(o2);
String containerName2 = getPackage(o2, simpleName2);
int i = containerName1.compareTo(containerName2);
if (i == 0) {
i = simpleName1.compareTo(simpleName2);
}
return i;
}
private String getPackage(String qualified, String simple) {
String substring;
if (qualified.length() > simple.length()) {
substring = qualified.substring(0, qualified.length() - simple.length() - 1);
} else {
substring = StringUtils.getPackage(qualified);
}
return substring;
}
private String simpleName(String qualified) {
String simpleName;
PsiClass aClass = getPsiClass(qualified);
if (aClass != null) {
PsiClass containingClass = aClass;
simpleName = aClass.getName();
while (containingClass != null && containingClass.getContainingClass() != null) {
containingClass = containingClass.getContainingClass();
if (containingClass != null) {
simpleName = containingClass.getName() + "." + simpleName;
}
}
} else {
simpleName = StringUtils.getSimpleName(qualified);
}
return simpleName;
}
protected PsiClass getPsiClass(String qualified) {
return javaPsiFacade.findClass(qualified, scope);
}
}