From b9b87d894a6ad2100c657057306307f19941b59a Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 27 Nov 2012 18:14:04 +0400 Subject: [PATCH] Asserting parameters in overridability assert, as well. --- .../resolve/java/resolver/JavaFunctionResolver.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java index 277edbb13b0..e3520a6a4b6 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java @@ -48,6 +48,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import static org.jetbrains.jet.lang.resolve.OverridingUtil.*; import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA; import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOTLIN; @@ -207,12 +208,12 @@ public final class JavaFunctionResolver { ((ClassDescriptor) functionDescriptor.getContainingDeclaration()).getDefaultType()); FunctionDescriptor superFunctionSubstituted = superFunction.substitute(substitutor); - // TODO replace asserted condition when propagation for parameters is supported - //OverridingUtil.OverrideCompatibilityInfo.Result overridableResult = - // OverridingUtil.isOverridableBy(superFunctionSubstituted, functionDescriptor).getResult(); - //if (overridableResult != OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE - // || !OverridingUtil.isReturnTypeOkForOverride(JetTypeChecker.INSTANCE, superFunctionSubstituted, functionDescriptor)) { - if (!OverridingUtil.isReturnTypeOkForOverride(JetTypeChecker.INSTANCE, superFunctionSubstituted, functionDescriptor)) { + OverrideCompatibilityInfo.Result overridableResult = + isOverridableBy(superFunctionSubstituted, functionDescriptor).getResult(); + boolean paramsOk = overridableResult == OverrideCompatibilityInfo.Result.OVERRIDABLE; + boolean returnTypeOk = + isReturnTypeOkForOverride(JetTypeChecker.INSTANCE, superFunctionSubstituted, functionDescriptor); + if (!paramsOk || !returnTypeOk) { throw new IllegalStateException("Loaded Java method overrides another, but resolved as Kotlin function, doesn't.\n" + "super function = " + superFunction + "\n" + "this function = " + functionDescriptor + "\n"