diff --git a/java/java-psi-api/src/com/intellij/psi/PsiResolveHelper.java b/java/java-psi-api/src/com/intellij/psi/PsiResolveHelper.java index b63c9b545109..c35930778906 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiResolveHelper.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiResolveHelper.java @@ -19,6 +19,7 @@ import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.RecursionGuard; import com.intellij.openapi.util.RecursionManager; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.impl.source.resolve.ParameterTypeInferencePolicy; import com.intellij.psi.infos.CandidateInfo; @@ -169,4 +170,8 @@ public interface PsiResolveHelper { PsiType arg, boolean isContraVariantPosition, LanguageLevel languageLevel); + + @NotNull + LanguageLevel getEffectiveLanguageLevel(@Nullable VirtualFile virtualFile); + } diff --git a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java index ebffc3e97842..1602daa653e1 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PsiUtil.java @@ -970,7 +970,8 @@ public final class PsiUtil extends PsiUtilCore { } } - return getLanguageLevel(element.getProject()); + PsiResolveHelper instance = PsiResolveHelper.SERVICE.getInstance(element.getProject()); + return instance != null ? instance.getEffectiveLanguageLevel(getVirtualFile(file)) : LanguageLevel.HIGHEST; } @NotNull diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java index 124cb3e8c2a8..8077e511e496 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java @@ -16,8 +16,10 @@ package com.intellij.psi.impl.source.resolve; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; +import com.intellij.psi.impl.JavaPsiImplementationHelper; import com.intellij.psi.impl.source.resolve.graphInference.PsiGraphInferenceHelper; import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.scope.MethodProcessorSetupFailedException; @@ -208,6 +210,12 @@ public class PsiResolveHelperImpl implements PsiResolveHelper { .getSubstitutionForTypeParameter(typeParam, param, arg, isContraVariantPosition, languageLevel); } + @NotNull + @Override + public LanguageLevel getEffectiveLanguageLevel(@Nullable VirtualFile virtualFile) { + return JavaPsiImplementationHelper.getInstance(myManager.getProject()).getEffectiveLanguageLevel(virtualFile); + } + @NotNull public PsiInferenceHelper getInferenceHelper(@NotNull LanguageLevel languageLevel) { if (languageLevel.isAtLeast(LanguageLevel.JDK_1_8)) {