mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
IDEA-367007 Exclude static methods from @OverrideOnly
GitOrigin-RevId: 0f67f91edf0558fcab0be98927e0828872ec21d4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6079d98ecf
commit
6c7da7b25a
@@ -9,6 +9,7 @@ import com.intellij.openapi.roots.ProjectFileIndex
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiElementVisitor
|
||||
import com.intellij.psi.PsiMethod
|
||||
import com.intellij.psi.PsiModifier
|
||||
import com.intellij.psi.PsiModifierListOwner
|
||||
import com.intellij.psi.util.MethodSignatureUtil
|
||||
import com.intellij.psi.util.PsiUtilCore
|
||||
@@ -44,7 +45,8 @@ class OverrideOnlyInspection : LocalInspectionTool() {
|
||||
}
|
||||
|
||||
private fun isOverrideOnlyMethod(method: PsiMethod) =
|
||||
method.hasAnnotation(ANNOTATION_NAME) || method.containingClass?.hasAnnotation(ANNOTATION_NAME) == true
|
||||
method.hasAnnotation(ANNOTATION_NAME) ||
|
||||
!method.hasModifierProperty(PsiModifier.STATIC) && method.containingClass?.hasAnnotation(ANNOTATION_NAME) == true
|
||||
|
||||
private fun isInsideOverridenOnlyMethod(sourceNode: UElement, target: PsiMethod): Boolean = sourceNode.getContainingUMethod()?.let {
|
||||
val psiMethod = it.javaPsi as? PsiMethod ?: return false
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -32,6 +32,12 @@ class Invoker {
|
||||
javaInterfaceOverrideOnly.<warning descr="Method 'implementOnlyMethod()' can only be overridden">implementOnlyMethod</warning>();
|
||||
kotlinClassOverrideOnly.<warning descr="Method 'overrideOnlyMethod()' can only be overridden">overrideOnlyMethod</warning>();
|
||||
kotlinInterfaceOverrideOnly.<warning descr="Method 'implementOnlyMethod()' can only be overridden">implementOnlyMethod</warning>();
|
||||
|
||||
//No warning
|
||||
JavaClassOverrideOnly.staticMethod();
|
||||
JavaInterfaceOverrideOnly.staticMethod();
|
||||
KotlinClassOverrideOnly.staticMethod();
|
||||
KotlinInterfaceOverrideOnly.staticMethod();
|
||||
}
|
||||
|
||||
public void methodReferences() {
|
||||
@@ -44,6 +50,12 @@ class Invoker {
|
||||
Consumer<JavaInterfaceOverrideOnly> b1 = JavaInterfaceOverrideOnly::<warning descr="Method 'implementOnlyMethod()' can only be overridden">implementOnlyMethod</warning>;
|
||||
Consumer<KotlinClassOverrideOnly> c1 = KotlinClassOverrideOnly::<warning descr="Method 'overrideOnlyMethod()' can only be overridden">overrideOnlyMethod</warning>;
|
||||
Consumer<KotlinInterfaceOverrideOnly> d1 = KotlinInterfaceOverrideOnly::<warning descr="Method 'implementOnlyMethod()' can only be overridden">implementOnlyMethod</warning>;
|
||||
|
||||
//No warning
|
||||
Runnable a2 = JavaClassOverrideOnly::staticMethod;
|
||||
Runnable b2 = JavaInterfaceOverrideOnly::staticMethod;
|
||||
Runnable c2 = KotlinClassOverrideOnly::staticMethod;
|
||||
Runnable d2 = KotlinInterfaceOverrideOnly::staticMethod;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,4 +113,4 @@ class KotlinImplementorOverrideOnly implements KotlinInterfaceOverrideOnly {
|
||||
@Override
|
||||
public void implementOnlyMethod() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,12 @@ class Invoker {
|
||||
javaInterfaceOverrideOnly.<warning descr="Method 'implementOnlyMethod()' can only be overridden">implementOnlyMethod</warning>()
|
||||
kotlinClassOverrideOnly.<warning descr="Method 'overrideOnlyMethod()' can only be overridden">overrideOnlyMethod</warning>()
|
||||
kotlinInterfaceOverrideOnly.<warning descr="Method 'implementOnlyMethod()' can only be overridden">implementOnlyMethod</warning>()
|
||||
|
||||
//No warning
|
||||
JavaClassOverrideOnly.staticMethod()
|
||||
JavaInterfaceOverrideOnly.staticMethod()
|
||||
KotlinClassOverrideOnly.staticMethod()
|
||||
KotlinInterfaceOverrideOnly.staticMethod()
|
||||
}
|
||||
|
||||
@Suppress("UNUSED_VARIABLE")
|
||||
@@ -45,6 +51,12 @@ class Invoker {
|
||||
|
||||
val c1 = KotlinClassOverrideOnly::<warning descr="Method 'overrideOnlyMethod()' can only be overridden">overrideOnlyMethod</warning>
|
||||
val d1 = KotlinInterfaceOverrideOnly::<warning descr="Method 'implementOnlyMethod()' can only be overridden">implementOnlyMethod</warning>
|
||||
|
||||
//No warning
|
||||
val a2 = JavaClassOverrideOnly::staticMethod
|
||||
val b2 = JavaInterfaceOverrideOnly::staticMethod
|
||||
val c2 = KotlinClassOverrideOnly.Companion::staticMethod
|
||||
val d2 = KotlinInterfaceOverrideOnly.Companion::staticMethod
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package library;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus.OverrideOnly;
|
||||
|
||||
@OverrideOnly
|
||||
public abstract class JavaClassOverrideOnly {
|
||||
|
||||
public abstract void overrideOnlyMethod();
|
||||
|
||||
public static void staticMethod() {}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package library;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus.OverrideOnly;
|
||||
|
||||
@OverrideOnly
|
||||
public interface JavaInterfaceOverrideOnly {
|
||||
|
||||
void implementOnlyMethod();
|
||||
|
||||
static void staticMethod() {}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package library
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus.OverrideOnly
|
||||
|
||||
@OverrideOnly
|
||||
abstract class KotlinClassOverrideOnly {
|
||||
|
||||
abstract fun overrideOnlyMethod(): Unit
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun staticMethod() {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package library
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus.OverrideOnly
|
||||
|
||||
@OverrideOnly
|
||||
interface KotlinInterfaceOverrideOnly {
|
||||
|
||||
fun implementOnlyMethod(): Unit
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun staticMethod() {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user