diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt
index f2c2d5f..de1e136 100644
--- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt
+++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processing/impl/ResolverImpl.kt
@@ -24,6 +24,7 @@
 import com.google.devtools.ksp.symbol.*
 import com.google.devtools.ksp.symbol.Variance
 import com.google.devtools.ksp.symbol.impl.binary.*
+import com.google.devtools.ksp.symbol.impl.findClosestOverridee
 import com.google.devtools.ksp.symbol.impl.findPsi
 import com.google.devtools.ksp.symbol.impl.java.*
 import com.google.devtools.ksp.symbol.impl.kotlin.*
@@ -295,9 +296,7 @@
         incrementalContext.recordLookupForDeclaration(overrider)
         incrementalContext.recordLookupForDeclaration(overridee)
 
-        return OverridingUtil.DEFAULT.isOverridableBy(
-                superDescriptor, subDescriptor, subClassDescriptor, true
-        ).result == OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE
+        return OverridingUtil.overrides(subDescriptor, superDescriptor, true, true)
     }
 
     fun evaluateConstant(expression: KtExpression?, expectedType: KotlinType): ConstantValue<*>? {
diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processor/CheckOverrideProcessor.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processor/CheckOverrideProcessor.kt
index 513b911..a4370ca 100644
--- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processor/CheckOverrideProcessor.kt
+++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/processor/CheckOverrideProcessor.kt
@@ -62,12 +62,18 @@
         checkOverride(bazPropKt,bazPropKt)
         val JavaImpl = resolver.getClassDeclarationByName("JavaImpl")!!
         val MyInterface = resolver.getClassDeclarationByName("MyInterface")!!
+        val MyInterface2 = resolver.getClassDeclarationByName("MyInterface2")!!
+        val MyInterface2ImplWithoutType = resolver.getClassDeclarationByName("MyInterface2ImplWithoutType")!!
+        val MyInterface2ImplWithType = resolver.getClassDeclarationByName("MyInterface2ImplWithType")!!
         val getX = JavaImpl.getDeclaredFunctions().first { it.simpleName.asString() == "getX" }
         val getY = JavaImpl.getDeclaredFunctions().first { it.simpleName.asString() == "getY" }
         val setY = JavaImpl.getDeclaredFunctions().first { it.simpleName.asString() == "setY" }
         val setX = JavaImpl.getDeclaredFunctions().first { it.simpleName.asString() == "setX" }
         val myInterfaceX = MyInterface.declarations.first{ it.simpleName.asString() == "x" }
         val myInterfaceY = MyInterface.declarations.first{ it.simpleName.asString() == "y" }
+        val myInterface2receiveList = MyInterface2.declarations.single()
+        val myInterface2ImplWithoutTypereceiveList = MyInterface2ImplWithoutType.declarations.single()
+        val myInterface2ImplWithTypereceiveList = MyInterface2ImplWithType.declarations.single()
         checkOverride(getY, getX)
         checkOverride(getY, myInterfaceX)
         checkOverride(getX, myInterfaceX)
@@ -78,6 +84,10 @@
         checkOverride(myInterfaceX, getX)
         checkOverride(myInterfaceY, setY)
         checkOverride(myInterfaceY, myInterfaceY)
+        checkOverride(myInterface2receiveList, myInterface2ImplWithoutTypereceiveList)
+        checkOverride(myInterface2ImplWithoutTypereceiveList, myInterface2receiveList)
+        checkOverride(myInterface2ImplWithTypereceiveList, myInterface2receiveList)
+        checkOverride(myInterface2ImplWithTypereceiveList, myInterface2ImplWithoutTypereceiveList)
 
         val JavaDifferentReturnTypes =
             resolver.getClassDeclarationByName("JavaDifferentReturnType")!!
diff --git a/compiler-plugin/testData/api/checkOverride.kt b/compiler-plugin/testData/api/checkOverride.kt
index 26fc8e7..7492f0d 100644
--- a/compiler-plugin/testData/api/checkOverride.kt
+++ b/compiler-plugin/testData/api/checkOverride.kt
@@ -37,6 +37,10 @@
 // MyInterface.x overrides JavaImpl.getX: false
 // MyInterface.y overrides JavaImpl.setY: false
 // MyInterface.y overrides MyInterface.y: false
+// MyInterface2.receiveList overrides MyInterface2ImplWithoutType.receiveList: false
+// MyInterface2ImplWithoutType.receiveList overrides MyInterface2.receiveList: true
+// MyInterface2ImplWithType.receiveList overrides MyInterface2.receiveList: true
+// MyInterface2ImplWithType.receiveList overrides MyInterface2ImplWithoutType.receiveList: true
 // JavaDifferentReturnType.foo overrides JavaList.foo: true
 // END
 // FILE: a.kt
@@ -92,6 +96,23 @@
     var y: Int
 }
 
+enum class EnumType {
+    FOO,
+    BAR;
+}
+
+interface MyInterface2<T> {
+    fun receiveList(argsInParent : List<T>):Unit
+}
+
+interface MyInterface2ImplWithoutType<T> : MyInterface2<T> {
+    override fun receiveList(argsInParent : List<T>):Unit
+}
+
+interface MyInterface2ImplWithType : MyInterface2ImplWithoutType<EnumType> {
+    override fun receiveList(argsInParent : List<EnumType>):Unit
+}
+
 // FILE: JavaList.java
 
 import java.util.*;
