Exclude checking for unimplemented method for binary origin classes
Fixed #KT-34971
This commit is contained in:
+5
@@ -15,9 +15,11 @@ import com.intellij.lang.annotation.Annotation
|
||||
import com.intellij.lang.annotation.AnnotationHolder
|
||||
import com.intellij.lang.annotation.Annotator
|
||||
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.idea.KotlinLanguage
|
||||
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
|
||||
import org.jetbrains.kotlin.utils.ifEmpty
|
||||
@@ -46,6 +48,7 @@ class UnimplementedKotlinInterfaceMemberAnnotator : Annotator {
|
||||
val signaturesVisibleThroughKotlinSuperClass = kotlinSuperClass?.visibleSignatures ?: emptyList()
|
||||
return signaturesFromKotlinInterfaces.firstOrNull {
|
||||
it !in signaturesVisibleThroughKotlinSuperClass &&
|
||||
!it.method.isBinaryOrigin &&
|
||||
it.method.modifierList.annotations.none { annotation ->
|
||||
val qualifiedName = annotation.qualifiedName
|
||||
qualifiedName == JVM_DEFAULT_FQ_NAME.asString() || qualifiedName == JVM_STATIC_ANNOTATION_FQ_NAME.asString()
|
||||
@@ -53,6 +56,8 @@ class UnimplementedKotlinInterfaceMemberAnnotator : Annotator {
|
||||
}?.method as? KtLightMethod
|
||||
}
|
||||
|
||||
private val PsiMethod.isBinaryOrigin get() = (containingClass as? KtLightClassMarker)?.originKind == LightClassOriginKind.BINARY
|
||||
|
||||
private fun report(method: KtLightMethod, holder: AnnotationHolder, psiClass: PsiClass) {
|
||||
val key = if (psiClass is PsiEnumConstantInitializer) "enum.constant.should.implement.method" else "class.must.be.abstract"
|
||||
val message = JavaErrorMessages.message(
|
||||
|
||||
Reference in New Issue
Block a user