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 25288b3d9e90..55a9d01f60df 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 @@ -101,7 +101,7 @@ public final class PsiUtil extends PsiUtilCore { @NotNull public static JavaResolveResult getAccessObjectClass(@NotNull PsiExpression expression) { - if (expression instanceof PsiSuperExpression && !isLanguageLevel8OrHigher(expression)) return JavaResolveResult.EMPTY; + if (expression instanceof PsiSuperExpression) return JavaResolveResult.EMPTY; PsiType type = expression.getType(); if (type instanceof PsiClassType) { return ((PsiClassType)type).resolveGenerics(); diff --git a/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java b/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java index 2c3bb5cf9c80..2c2d8b2e1256 100644 --- a/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java @@ -442,11 +442,9 @@ public class PsiScopesUtil { if (!(qualifier instanceof PsiSuperExpression)) { processor.setAccessClass((PsiClass)PsiUtil.getAccessObjectClass(qualifier).getElement()); } - else if (((PsiSuperExpression)qualifier).getQualifier() != null && PsiUtil.isLanguageLevel8OrHigher(qualifier)) { - final PsiClass accessClass = (PsiClass)PsiUtil.getAccessObjectClass(qualifier).getElement(); - if (accessClass != null && accessClass.isInterface()) { - processor.setAccessClass(accessClass); - } + else if (((PsiSuperExpression)qualifier).getQualifier() != null && PsiUtil.isLanguageLevel8OrHigher(qualifier) && + CommonClassNames.JAVA_LANG_CLONEABLE.equals(((PsiClass)resolve).getQualifiedName()) && ((PsiClass)resolve).isInterface()) { + processor.setAccessClass((PsiClass)resolve); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/advHighlighting8/protectedVariable/p1/A.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/advHighlighting8/protectedVariable/p1/A.java new file mode 100644 index 000000000000..6563527084f7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/advHighlighting8/protectedVariable/p1/A.java @@ -0,0 +1,4 @@ +package p1; +public class A { + protected String myFoo = "A"; +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/advHighlighting8/protectedVariable/p2/B.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/advHighlighting8/protectedVariable/p2/B.java new file mode 100644 index 000000000000..77bc4300731f --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/advHighlighting8/protectedVariable/p2/B.java @@ -0,0 +1,9 @@ +package p2; + +import p1.A; + +class B extends A { + { + System.out.println(super.myFoo); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/AdvHighlighting8Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/AdvHighlighting8Test.java new file mode 100644 index 000000000000..745a58321e3a --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/AdvHighlighting8Test.java @@ -0,0 +1,68 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.daemon.lambda; + +import com.intellij.analysis.PackagesScopesProvider; +import com.intellij.application.options.colors.ScopeAttributesUtil; +import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase; +import com.intellij.codeInsight.daemon.impl.HighlightInfo; +import com.intellij.openapi.application.ex.PathManagerEx; +import com.intellij.openapi.editor.colors.EditorColorsManager; +import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.colors.TextAttributesKey; +import com.intellij.openapi.editor.markup.EffectType; +import com.intellij.openapi.editor.markup.TextAttributes; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.roots.LanguageLevelProjectExtension; +import com.intellij.openapi.roots.ModuleRootModificationUtil; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.packageDependencies.DependencyValidationManager; +import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiClassType; +import com.intellij.psi.PsiField; +import com.intellij.psi.PsiJavaFile; +import com.intellij.psi.search.scope.packageSet.NamedScope; +import com.intellij.psi.search.scope.packageSet.NamedScopeManager; +import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; +import com.intellij.psi.search.scope.packageSet.PatternPackageSet; +import com.intellij.testFramework.IdeaTestUtil; +import org.jetbrains.annotations.NonNls; + +import java.awt.*; +import java.io.File; +import java.util.Collection; + +/** + * This class intended for "heavy-loaded" tests only, e.g. those need to setup separate project directory structure to run. + * For "lightweight" tests use LightAdvHighlightingTest. + */ +public class AdvHighlighting8Test extends DaemonAnalyzerTestCase { + @NonNls private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/lambda/advHighlighting8"; + + @Override + protected Sdk getTestProjectJdk() { + LanguageLevelProjectExtension.getInstance(myProject).setLanguageLevel(LanguageLevel.JDK_1_8); + return IdeaTestUtil.getMockJdk18(); + } + + public void testProtectedVariable() throws Exception { + doTest(BASE_PATH + "/protectedVariable/p2/B.java", BASE_PATH + "/protectedVariable", false, false); + } +}