From 1649b208cb87ecea4feda777067ef969d1e94610 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 20 Jun 2012 21:36:24 +0400 Subject: [PATCH] Added check for value parameters number in alternative signatures loading. --- .../lang/resolve/java/AlternativeSignatureParsing.java | 7 +++++++ .../error/WrongValueParametersCount.java | 10 ++++++++++ .../kotlinSignature/error/WrongValueParametersCount.kt | 9 +++++++++ .../error/WrongValueParametersCount.txt | 6 ++++++ 4 files changed, 32 insertions(+) create mode 100644 compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.java create mode 100644 compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.kt create mode 100644 compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.txt diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureParsing.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureParsing.java index 70d1a533a12..7c9459ef530 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureParsing.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureParsing.java @@ -108,6 +108,13 @@ class AlternativeSignatureParsing { JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors, JetNamedFunction altFunDeclaration) throws AlternativeSignatureMismatchException { List parameterDescriptors = valueParameterDescriptors.descriptors; + + if (parameterDescriptors.size() != altFunDeclaration.getValueParameters().size()) { + throw new AlternativeSignatureMismatchException( + String.format("Method signature has %d value parameters, but alternative signature has %d", + parameterDescriptors.size(), altFunDeclaration.getValueParameters().size())); + } + List altParamDescriptors = new ArrayList(); for (int i = 0, size = parameterDescriptors.size(); i < size; i++) { ValueParameterDescriptor pd = parameterDescriptors.get(i); diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.java b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.java new file mode 100644 index 00000000000..3b4b3e9fd74 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.java @@ -0,0 +1,10 @@ +package test; + +import jet.runtime.typeinfo.KotlinSignature; + +public class WrongValueParametersCount { + @KotlinSignature("fun foo(a : Int) : Int") + public Integer foo() { + throw new UnsupportedOperationException(); + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.kt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.kt new file mode 100644 index 00000000000..70b89330527 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.kt @@ -0,0 +1,9 @@ +package test + +import java.util.* + +public open class WrongValueParametersCount : Object() { + public open fun foo() : Int? { + throw UnsupportedOperationException() + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.txt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.txt new file mode 100644 index 00000000000..c615f64ec1c --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParametersCount.txt @@ -0,0 +1,6 @@ +namespace test + +public open class test.WrongValueParametersCount : java.lang.Object { + public final /*constructor*/ fun (): test.WrongValueParametersCount + public open fun foo(): jet.Int? +}