Descriptors with error types can override each other

This commit is contained in:
Andrey Breslav
2012-07-27 20:16:38 +04:00
parent f78d26c89a
commit c02e54678e
4 changed files with 26 additions and 1 deletions
@@ -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
}
@@ -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");