Descriptors with error types can override each other
This commit is contained in:
@@ -185,7 +185,8 @@ public class OverridingUtil {
|
||||
JetType superValueParameter = superValueParameters.get(i);
|
||||
JetType subValueParameter = subValueParameters.get(i);
|
||||
|
||||
if (!JetTypeChecker.INSTANCE.equalTypes(superValueParameter, subValueParameter, axioms)) {
|
||||
boolean bothErrors = ErrorUtils.isErrorType(superValueParameter) && ErrorUtils.isErrorType(subValueParameter);
|
||||
if (!bothErrors && !JetTypeChecker.INSTANCE.equalTypes(superValueParameter, subValueParameter, axioms)) {
|
||||
return OverrideCompatibilityInfo.valueParameterTypeMismatch(superValueParameter, subValueParameter, OverrideCompatibilityInfo.Result.INCOMPATIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package test
|
||||
|
||||
open class A {
|
||||
open fun foo(a: E) {}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
override fun foo(a: E) {}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace test
|
||||
|
||||
internal open class test.A : jet.Any {
|
||||
public final /*constructor*/ fun <init>(): test.A
|
||||
internal open fun foo(/*0*/ a: [ERROR : E]): jet.Tuple0
|
||||
}
|
||||
internal final class test.B : test.A {
|
||||
public final /*constructor*/ fun <init>(): test.B
|
||||
internal open override /*1*/ fun foo(/*0*/ a: [ERROR : E]): jet.Tuple0
|
||||
}
|
||||
+5
@@ -1287,6 +1287,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso
|
||||
doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/innerObject.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("OverrideWithErrors.kt")
|
||||
public void testOverrideWithErrors() throws Exception {
|
||||
doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/OverrideWithErrors.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("packageLevelObject.kt")
|
||||
public void testPackageLevelObject() throws Exception {
|
||||
doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/packageLevelObject.kt");
|
||||
|
||||
Reference in New Issue
Block a user