From 902e84fce4b9d969603502b3c3e8698125c50ce8 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Fri, 11 Jul 2025 13:42:56 +0200 Subject: [PATCH] IJPL-339 make JavaVersionBasedScope work with shared sources Fixes MultiReleaseJarTest.testResolve11DumbMode GitOrigin-RevId: 59cb90f5ac401436d0876a3aa9a12dc8cf3735d7 --- .../impl/search/JavaVersionBasedScope.java | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaVersionBasedScope.java b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaVersionBasedScope.java index f1e989d4a30f..85ac8a243571 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaVersionBasedScope.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaVersionBasedScope.java @@ -1,12 +1,13 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.psi.impl.search; +import com.intellij.codeInsight.multiverse.CodeInsightContext; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; -import com.intellij.psi.search.DelegatingGlobalSearchScope; -import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.*; import com.intellij.psi.util.JavaMultiReleaseUtil; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import java.util.Objects; @@ -29,12 +30,15 @@ public final class JavaVersionBasedScope extends DelegatingGlobalSearchScope { @Override public boolean contains(@NotNull VirtualFile file) { - if (!super.contains(file)) return false; + return super.contains(file) && checkMultiReleaseJar(file); + } + + private boolean checkMultiReleaseJar(@NotNull VirtualFile file) { // Do not filter directories, as they may contain non-versioned files if (file.isDirectory()) return true; VirtualFile baseFile = JavaMultiReleaseUtil.findBaseFile(file); if (myLevel.isLessThan(JavaMultiReleaseUtil.MIN_MULTI_RELEASE_VERSION)) { - // In pre-multi-release + // In pre-multi-release return baseFile == null; } if (baseFile == null) { @@ -44,6 +48,35 @@ public final class JavaVersionBasedScope extends DelegatingGlobalSearchScope { return file.equals(specificFile); } + @ApiStatus.Experimental + @Override + public @NotNull CodeInsightContextInfo getCodeInsightContextInfo() { + CodeInsightContextInfo info = super.getCodeInsightContextInfo(); + if (info instanceof NoContextInformation) { + return info; + } + + ActualCodeInsightContextInfo actualInfo = (ActualCodeInsightContextInfo)info; + return new ActualCodeInsightContextInfo() { + @Override + public boolean contains(@NotNull VirtualFile file, @NotNull CodeInsightContext context) { + return actualInfo.contains(file, context) && checkMultiReleaseJar(file); + } + + @Override + public @NotNull CodeInsightContextFileInfo getFileInfo(@NotNull VirtualFile file) { + CodeInsightContextFileInfo fileInfo = actualInfo.getFileInfo(file); + if (fileInfo instanceof DoesNotContainFileInfo) { + return fileInfo; + } + if (!checkMultiReleaseJar(file)) { + return CodeInsightContextAwareSearchScopes.DoesNotContainFileInfo(); + } + return fileInfo; + } + }; + } + @Override public boolean equals(Object o) { if (this == o) return true;