Usage in imports are shown under the Class node when "File Structure" grouping mode is on.

This commit is contained in:
Eugene Zhuravlev
2005-01-17 13:09:33 +03:00
parent c6ef2904f6
commit be16262e26
2 changed files with 28 additions and 3 deletions
@@ -40,7 +40,8 @@ public class UsageGroupingRuleProviderImpl extends UsageGroupingRuleProvider imp
rules.add(new PackageGroupingRule(project));
}
if (GROUP_BY_FILE_STRUCTURE) {
rules.add(new FileOrClassCompositeGroupingRule(project));
//rules.add(new FileOrClassCompositeGroupingRule(project));
rules.add(new ClassGroupingRule());
rules.add(new MethodGroupingRule());
}
else {
@@ -5,6 +5,7 @@ import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Iconable;
import com.intellij.openapi.vcs.FileStatus;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.usages.Usage;
@@ -27,8 +28,9 @@ public class ClassGroupingRule implements UsageGroupingRule {
public UsageGroup groupUsage(Usage usage) {
if (usage instanceof PsiElementUsage) {
PsiElement psiElement = ((PsiElementUsage)usage).getElement();
if (psiElement.getContainingFile() instanceof PsiJavaFile) {
final PsiElement psiElement = ((PsiElementUsage)usage).getElement();
final PsiFile containingFile = psiElement.getContainingFile();
if (containingFile instanceof PsiJavaFile) {
PsiElement containingClass = psiElement;
do {
containingClass = PsiTreeUtil.getParentOfType(containingClass, PsiClass.class, true);
@@ -36,6 +38,22 @@ public class ClassGroupingRule implements UsageGroupingRule {
}
while (true);
if (containingClass == null) {
// check whether the element is in the import list
PsiImportList importList = PsiTreeUtil.getParentOfType(psiElement, PsiImportList.class, true);
if (importList != null) {
final String fileName = getFileNameWithoutExtension(containingFile);
final PsiClass[] classes = ((PsiJavaFile)containingFile).getClasses();
for (int idx = 0; idx < classes.length; idx++) {
final PsiClass aClass = classes[idx];
if (fileName.equals(aClass.getName())) {
containingClass = aClass;
break;
}
}
}
}
if (containingClass != null) {
return new ClassUsageGroup((PsiClass)containingClass);
}
@@ -44,6 +62,12 @@ public class ClassGroupingRule implements UsageGroupingRule {
return null;
}
private static String getFileNameWithoutExtension(final PsiFile file) {
final String name = file.getName();
final int index = name.lastIndexOf('.');
return index < 0? name : name.substring(0, index);
}
private static class ClassUsageGroup implements UsageGroup, DataProvider {
private SmartPsiElementPointer myClassPointer;
private String myText;