package plugin; import java.util.function.Consumer; import library.JavaClass; import library.JavaInterface; import library.KotlinClass; import library.KotlinInterface; import library.JavaClassOverrideOnly; import library.JavaInterfaceOverrideOnly; import library.JavaMembersOverrideOnly; import library.KotlinClassOverrideOnly; import library.KotlinInterfaceOverrideOnly; class Invoker { public void invocations( JavaClass javaClass, JavaInterface javaInterface, KotlinClass kotlinClass, KotlinInterface kotlinInterface, JavaClassOverrideOnly javaClassOverrideOnly, JavaInterfaceOverrideOnly javaInterfaceOverrideOnly, JavaMembersOverrideOnly javeMembersOverrideOnly, KotlinClassOverrideOnly kotlinClassOverrideOnly, KotlinInterfaceOverrideOnly kotlinInterfaceOverrideOnly ) { javaClass.overrideOnlyMethod(); javaInterface.implementOnlyMethod(); kotlinClass.overrideOnlyMethod(); kotlinInterface.implementOnlyMethod(); javaClassOverrideOnly.overrideOnlyMethod(); javaClassOverrideOnly.finalMethod(); // no warning because it's a final method javaInterfaceOverrideOnly.implementOnlyMethod(); javeMembersOverrideOnly.implementOnlyMethod(); javeMembersOverrideOnly.finalMethod(); // no warning because it's a final method kotlinClassOverrideOnly.overrideOnlyMethod(); kotlinInterfaceOverrideOnly.implementOnlyMethod(); //No warning JavaClassOverrideOnly.staticMethod(); JavaInterfaceOverrideOnly.staticMethod(); JavaMembersOverrideOnly.staticMethod(); KotlinClassOverrideOnly.staticMethod(); KotlinInterfaceOverrideOnly.staticMethod(); } public void methodReferences() { Consumer a = JavaClass::overrideOnlyMethod; Consumer b = JavaInterface::implementOnlyMethod; Consumer c = KotlinClass::overrideOnlyMethod; Consumer d = KotlinInterface::implementOnlyMethod; Consumer a1 = JavaClassOverrideOnly::overrideOnlyMethod; Consumer a2 = JavaClassOverrideOnly::finalMethod; // no warning because it's a final method Consumer b1 = JavaInterfaceOverrideOnly::implementOnlyMethod; Consumer c1 = JavaMembersOverrideOnly::implementOnlyMethod; Consumer c2 = JavaMembersOverrideOnly::finalMethod; // no warning because it's a final method Consumer d1 = KotlinClassOverrideOnly::overrideOnlyMethod; Consumer e1 = KotlinInterfaceOverrideOnly::implementOnlyMethod; //No warning Runnable a3 = JavaClassOverrideOnly::staticMethod; Runnable b2 = JavaInterfaceOverrideOnly::staticMethod; Runnable c3 = JavaMembersOverrideOnly::staticMethod; Runnable d2 = KotlinClassOverrideOnly::staticMethod; Runnable e2 = KotlinInterfaceOverrideOnly::staticMethod; } } class JavaInheritor extends JavaClass { //No warning @Override public void overrideOnlyMethod() { } } class JavaImplementor implements JavaInterface { //No warning @Override public void implementOnlyMethod() { } } class KotlinInheritor extends KotlinClass { //No warning @Override public void overrideOnlyMethod() { } } class KotlinImplementor implements KotlinInterface { //No warning @Override public void implementOnlyMethod() { } } class JavaInheritorOverrideOnly extends JavaClassOverrideOnly { //No warning @Override public void overrideOnlyMethod() { } } class JavaImplementorOverrideOnly implements JavaInterfaceOverrideOnly { //No warning @Override public void implementOnlyMethod() { } } class KotlinInheritorOverrideOnly extends KotlinClassOverrideOnly { //No warning @Override public void overrideOnlyMethod() { } } class KotlinImplementorOverrideOnly implements KotlinInterfaceOverrideOnly { //No warning @Override public void implementOnlyMethod() { } }