diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureData.java index f4b4645cfc8..feb78585d63 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureData.java @@ -61,7 +61,7 @@ class AlternativeSignatureData { AlternativeSignatureData( @NotNull PsiMethodWrapper method, @NotNull JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors, - @NotNull JetType returnType, + @Nullable JetType returnType, @NotNull List methodTypeParameters) { String signature = method.getSignatureAnnotation().signature(); if (signature.isEmpty()) { @@ -87,7 +87,9 @@ class AlternativeSignatureData { computeTypeParameters(methodTypeParameters); computeValueParameters(valueParameterDescriptors); - computeReturnType(returnType); + if (returnType != null) { + computeReturnType(returnType); + } } catch (AlternativeSignatureMismatchException e) { error = e.getMessage(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index f024b446079..f04aebf5c03 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -427,6 +427,16 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes if (valueParameterDescriptors.receiverType != null) { throw new IllegalStateException(); } + + AlternativeSignatureData alternativeSignatureData = + new AlternativeSignatureData(constructor, valueParameterDescriptors, null, Collections.emptyList()); + if (!alternativeSignatureData.isNone() && alternativeSignatureData.getError() == null) { + valueParameterDescriptors = alternativeSignatureData.getValueParameters(); + } + else if (alternativeSignatureData.getError() != null) { + trace.record(BindingContext.ALTERNATIVE_SIGNATURE_DATA_ERROR, constructorDescriptor, alternativeSignatureData.getError()); + } + constructorDescriptor.initialize(classData.getClassDescriptor().getTypeConstructor().getParameters(), valueParameterDescriptors.descriptors, resolveVisibility(psiConstructor, constructor.getJetConstructor()), aStatic);