Disable check about unimplemented check for real defaults

Now we can generate proper defaults and there is no need in additional
 checks about unimplemented methods

 #KT-41130 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2021-03-12 10:50:32 +03:00
committed by TeamCityServer
parent 641f08d561
commit 78a0d7b5bb
13 changed files with 80 additions and 0 deletions
@@ -18,7 +18,10 @@ import com.intellij.psi.*
import org.jetbrains.kotlin.asJava.KtLightClassMarker
import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.config.JvmAnalysisFlags
import org.jetbrains.kotlin.config.JvmDefaultMode
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_FQ_NAME
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_DEFAULT_FQ_NAME
@@ -30,6 +33,11 @@ class UnimplementedKotlinInterfaceMemberAnnotator : Annotator {
if (element.isInterface || element.hasModifierProperty(PsiModifier.ABSTRACT)) return
val jvmDefaultMode = element.languageVersionSettings.getFlag(JvmAnalysisFlags.jvmDefaultMode)
if (jvmDefaultMode == JvmDefaultMode.ALL_COMPATIBILITY || jvmDefaultMode == JvmDefaultMode.ALL_INCOMPATIBLE) {
return
}
if (getAnyMethodToImplement(element) != null) return // reported by java default annotator
findUnimplementedMethod(element)?.let {
@@ -0,0 +1,3 @@
package test;
class ExtendInterfaceWithDefaultMethodAndCompatibilityAll implements KotlinInterface {}
@@ -0,0 +1,5 @@
package test
interface KotlinInterface {
fun bar() {}
}
@@ -0,0 +1 @@
// COMPILER_ARGUMENTS: -Xjvm-default=all
@@ -0,0 +1,3 @@
package test;
class ExtendInterfaceWithDefaultMethodAndCompatibilityAll implements KotlinInterface {}
@@ -0,0 +1,5 @@
package test
interface KotlinInterface {
fun bar() {}
}
@@ -0,0 +1 @@
// COMPILER_ARGUMENTS: -Xjvm-default=all-compatibility
@@ -0,0 +1,3 @@
package test;
<error descr="Class 'ExtendInterfaceWithDefaultMethodAndCompatibilityAll' must either be declared abstract or implement abstract method 'bar()' in 'KotlinInterface'">class ExtendInterfaceWithDefaultMethodAndCompatibilityAll implements KotlinInterface</error> {}
@@ -0,0 +1,5 @@
package test
interface KotlinInterface {
fun bar() {}
}
@@ -0,0 +1 @@
// COMPILER_ARGUMENTS: -Xjvm-default=disable
@@ -79,6 +79,21 @@ public class JavaAgainstKotlinBinariesCheckerTestGenerated extends AbstractJavaA
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendClassWithJvmDefaultImplementation.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityAll.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityAll() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityAll.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityDisabled.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityDisabled() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityDisabled.kt");
}
@TestMetadata("ExtendingMutableInterfaces.kt")
public void testExtendingMutableInterfaces() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendingMutableInterfaces.kt");
@@ -81,6 +81,21 @@ public class JavaAgainstKotlinSourceCheckerTestGenerated extends AbstractJavaAga
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendClassWithJvmDefaultImplementation.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityAll.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityAll() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityAll.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityDisabled.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityDisabled() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityDisabled.kt");
}
@TestMetadata("ExtendingMutableInterfaces.kt")
public void testExtendingMutableInterfaces() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendingMutableInterfaces.kt");
@@ -81,6 +81,21 @@ public class JavaAgainstKotlinSourceCheckerWithoutUltraLightTestGenerated extend
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendClassWithJvmDefaultImplementation.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityAll.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityAll() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityAll.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityAllCompatibility.kt");
}
@TestMetadata("ExtendInterfaceWithDefaultMethodAndCompatibilityDisabled.kt")
public void testExtendInterfaceWithDefaultMethodAndCompatibilityDisabled() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendInterfaceWithDefaultMethodAndCompatibilityDisabled.kt");
}
@TestMetadata("ExtendingMutableInterfaces.kt")
public void testExtendingMutableInterfaces() throws Exception {
runTest("idea/testData/kotlinAndJavaChecker/javaAgainstKotlin/ExtendingMutableInterfaces.kt");