[java-psi] Support single-source file roots in various places (IDEA-368975)

GitOrigin-RevId: 2045de1f99ece67fe63a09f131664511167baf4a
This commit is contained in:
Tagir Valeev
2025-05-14 17:59:17 +02:00
committed by intellij-monorepo-bot
parent e34f9229bd
commit 745eef9189
7 changed files with 36 additions and 28 deletions

View File

@@ -6,7 +6,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.PackageIndex;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.FilteredQuery;
import org.jetbrains.annotations.Nullable;
public final class ResourceFileUtil {
@@ -28,11 +27,16 @@ public final class ResourceFileUtil {
String packageName = index >= 0 ? resourceName.substring(0, index).replace('/', '.') : "";
final String fileName = index >= 0 ? resourceName.substring(index+1) : resourceName;
final VirtualFile dir = new FilteredQuery<>(
PackageIndex.getInstance(project).getDirsByPackageName(packageName, false), file -> {
final VirtualFile child = file.findChild(fileName);
return child != null && scope.contains(child);
}).findFirst();
return dir != null ? dir.findChild(fileName) : null;
PackageIndex packageIndex = PackageIndex.getInstance(project);
VirtualFile fileFromDir = packageIndex.getDirsByPackageName(packageName, false)
.mapping(file -> file.findChild(fileName))
.filtering(child -> child != null && scope.contains(child))
.findFirst();
if (fileFromDir != null) {
return fileFromDir;
}
return packageIndex.getFilesByPackageName(packageName)
.filtering(f -> fileName.equals(f.getName()) && scope.contains(f))
.findFirst();
}
}

View File

@@ -36,11 +36,6 @@ public final class ModulePackageIndexImpl extends ModulePackageIndex {
return new FilteredQuery<>(myDirectoryIndex.getDirectoriesByPackageName(packageName, includeLibrarySources), myDirCondition);
}
@Override
public VirtualFile @NotNull [] getDirectoriesByPackageName(@NotNull @NlsSafe String packageName, boolean includeLibrarySources) {
return getDirsByPackageName(packageName, includeLibrarySources).toArray(VirtualFile.EMPTY_ARRAY);
}
@Override
public Query<VirtualFile> getFilesByPackageName(@NotNull String packageName) {
return new FilteredQuery<>(myDirectoryIndex.getFilesByPackageName(packageName), myDirCondition);