mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
IJPL-339 make JavaVersionBasedScope work with shared sources
Fixes MultiReleaseJarTest.testResolve11DumbMode GitOrigin-RevId: 59cb90f5ac401436d0876a3aa9a12dc8cf3735d7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1cee52fce1
commit
902e84fce4
+37
-4
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user