From ec0783f0a1a44a25fd59dcb812e6a55d189d0011 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Wed, 1 Nov 2017 05:30:15 +0100 Subject: [PATCH] inspection view: do not create empty package nodes when grouping by directory is enabled + some module-info.java contains problems --- .../reference/RefJavaFileImpl.java | 18 ++++++++++++++++-- .../reference/RefJavaManagerImpl.java | 2 +- .../reference/RefJavaUtilImpl.java | 2 +- .../codeInspection/reference/RefFileImpl.java | 5 +++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaFileImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaFileImpl.java index 0264a7097a83..70fc8e616922 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaFileImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaFileImpl.java @@ -18,14 +18,24 @@ package com.intellij.codeInspection.reference; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.psi.PsiJavaFile; +import com.intellij.psi.util.PsiUtil; public class RefJavaFileImpl extends RefFileImpl { private final RefModule myRefModule; + private final boolean myModuleFile; RefJavaFileImpl(PsiJavaFile elem, RefManager manager) { - super(elem, manager); + super(elem, manager, false); myRefModule = manager.getRefModule(ModuleUtilCore.findModuleForPsiElement(elem)); - ((RefPackageImpl)getRefManager().getExtension(RefJavaManager.MANAGER).getPackage(elem.getPackageName())).add(this); + myModuleFile = PsiUtil.isModuleFile(elem); + String packageName = elem.getPackageName(); + if (!packageName.isEmpty()) { + ((RefPackageImpl)getRefManager().getExtension(RefJavaManager.MANAGER).getPackage(packageName)).add(this); + } else if (myRefModule != null) { + ((RefModuleImpl)myRefModule).add(this); + } else { + ((RefProjectImpl)manager.getRefProject()).add(this); + } } @Override @@ -37,4 +47,8 @@ public class RefJavaFileImpl extends RefFileImpl { public RefModule getModule() { return myRefModule; } + + boolean isModuleFile() { + return myModuleFile; + } } diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaManagerImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaManagerImpl.java index 42d49b0d5da5..2bf3ae820660 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaManagerImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaManagerImpl.java @@ -346,7 +346,7 @@ public class RefJavaManagerImpl extends RefJavaManager { @Override @Nullable public String getGroupName(final RefEntity entity) { - if (entity instanceof RefFile && !(entity instanceof RefJavaFileImpl)) return null; + if (entity instanceof RefFile && (!(entity instanceof RefJavaFileImpl) || ((RefJavaFileImpl)entity).isModuleFile())) return null; return RefJavaUtil.getInstance().getPackageName(entity); } diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java index 83a9a41da44a..f41d1a21d619 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaUtilImpl.java @@ -304,7 +304,7 @@ public class RefJavaUtilImpl extends RefJavaUtil{ @Override @Nullable public String getPackageName(RefEntity refEntity) { - if (refEntity instanceof RefProject) { + if (refEntity instanceof RefProject || refEntity instanceof RefJavaFileImpl && ((RefJavaFileImpl)refEntity).isModuleFile()) { return null; } RefPackage refPackage = getPackage(refEntity); diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/reference/RefFileImpl.java b/platform/analysis-impl/src/com/intellij/codeInspection/reference/RefFileImpl.java index ec6d127dc99a..c5c50f9aa8fd 100644 --- a/platform/analysis-impl/src/com/intellij/codeInspection/reference/RefFileImpl.java +++ b/platform/analysis-impl/src/com/intellij/codeInspection/reference/RefFileImpl.java @@ -28,7 +28,12 @@ import org.jetbrains.annotations.Nullable; public class RefFileImpl extends RefElementImpl implements RefFile { RefFileImpl(PsiFile elem, RefManager manager) { + this(elem, manager, true); + } + + protected RefFileImpl(PsiFile elem, RefManager manager, boolean addParent) { super(elem, manager); + if (!addParent) return; final VirtualFile vFile = elem.getVirtualFile(); if (vFile == null) return; final VirtualFile parentDirectory = vFile.getParent();