mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
check compiler version (IDEA-163104)
compiler will be chosen as max(module compiler, project compiler)
This commit is contained in:
+2
-2
@@ -669,8 +669,8 @@ public class GenericsHighlightUtil {
|
||||
if (!checkEqualsSuper && MethodSignatureUtil.isSubsignature(superSignature, signatureToCheck)) {
|
||||
return null;
|
||||
}
|
||||
if (!javaVersionService.isAtLeast(aClass, JavaSdkVersion.JDK_1_8)) {
|
||||
//javac <= 1.7 didn't check transitive overriding rules for interfaces
|
||||
if (!javaVersionService.isCompilerVersionAtLeast(aClass, JavaSdkVersion.JDK_1_7)) {
|
||||
//javac <= 1.6 didn't check transitive overriding rules for interfaces
|
||||
if (superContainingClass != null && !superContainingClass.isInterface() && checkContainingClass.isInterface() && !aClass.equals(superContainingClass)) return null;
|
||||
}
|
||||
if (aClass.equals(checkContainingClass)) {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.projectRoots;
|
||||
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -33,4 +34,11 @@ public class JavaVersionServiceImpl extends JavaVersionService {
|
||||
public JavaSdkVersion getJavaSdkVersion(@NotNull PsiElement element) {
|
||||
return JavaSdkVersionUtil.getJavaSdkVersion(element);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCompilerVersionAtLeast(@NotNull PsiElement element, @NotNull JavaSdkVersion version) {
|
||||
if (super.isCompilerVersionAtLeast(element, version)) return true;
|
||||
JavaSdkVersion projectVersion = JavaSdkVersionUtil.getJavaSdkVersion(ProjectRootManager.getInstance(element.getProject()).getProjectSdk());
|
||||
return projectVersion != null && projectVersion.isAtLeast(version);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,4 +38,8 @@ public class JavaVersionService {
|
||||
public JavaSdkVersion getJavaSdkVersion(@NotNull PsiElement element) {
|
||||
return JavaSdkVersion.fromLanguageLevel(PsiUtil.getLanguageLevel(element));
|
||||
}
|
||||
|
||||
public boolean isCompilerVersionAtLeast(@NotNull PsiElement element, @NotNull JavaSdkVersion version) {
|
||||
return isAtLeast(element, version);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -6,7 +6,7 @@ interface I{
|
||||
|
||||
abstract class A {
|
||||
abstract <T extends Iterable<String>> void foo();
|
||||
<T extends A & I> void bar(T x){
|
||||
<<error descr="'foo()' in 'pck.I' clashes with 'foo()' in 'pck.A'; both methods have same erasure, yet neither overrides the other"></error>T extends A & I> void bar(T x){
|
||||
x.foo<error descr="Ambiguous method call: both 'A.foo()' and 'I.foo()' match">()</error>;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user