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 1ba06840343..e65653bc8ee 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 @@ -336,14 +336,14 @@ class AlternativeSignatureData { return visitCommonType(DescriptorUtils.getFQName(classDescriptor).toSafe().getFqName(), type); } - private JetType visitCommonType(@NotNull String expectedFqNamePostfix, @NotNull JetTypeElement type) { + private JetType visitCommonType(@NotNull String qualifiedName, @NotNull JetTypeElement type) { TypeConstructor originalTypeConstructor = autoType.getConstructor(); ClassifierDescriptor declarationDescriptor = originalTypeConstructor.getDeclarationDescriptor(); assert declarationDescriptor != null; String fqName = DescriptorUtils.getFQName(declarationDescriptor).toSafe().getFqName(); - ClassDescriptor classFromLibrary = getExpectedFromLibrary(expectedFqNamePostfix); - if (!fqName.equals(expectedFqNamePostfix) && !fqName.endsWith("." + expectedFqNamePostfix) && classFromLibrary == null) { - fail("Alternative signature type mismatch, expected: %s, actual: %s", expectedFqNamePostfix, fqName); + ClassDescriptor classFromLibrary = getAutoTypeAnalogWithinBuiltins(qualifiedName); + if (!isSameName(qualifiedName, fqName) && classFromLibrary == null) { + fail("Alternative signature type mismatch, expected: %s, actual: %s", qualifiedName, fqName); } List arguments = autoType.getArguments(); @@ -410,14 +410,14 @@ class AlternativeSignatureData { } @Nullable - private ClassDescriptor getExpectedFromLibrary(String expectedFqNamePostfix) { + private ClassDescriptor getAutoTypeAnalogWithinBuiltins(String qualifiedName) { Type javaAnalog = KotlinToJavaTypesMap.getInstance().getJavaAnalog(autoType); if (javaAnalog == null || javaAnalog.getSort() != Type.OBJECT) return null; Collection descriptors = JavaToKotlinClassMap.getInstance().mapPlatformClass(JvmClassName.byType(javaAnalog).getFqName()); for (ClassDescriptor descriptor : descriptors) { String fqName = DescriptorUtils.getFQName(descriptor).getFqName(); - if (fqName.endsWith("." + expectedFqNamePostfix)) { + if (isSameName(qualifiedName, fqName)) { return descriptor; } } @@ -429,4 +429,8 @@ class AlternativeSignatureData { throw new UnsupportedOperationException("Self-types are not supported yet"); } } + + private static boolean isSameName(String qualifiedName, String fullyQualifiedName) { + return fullyQualifiedName.equals(qualifiedName) || fullyQualifiedName.endsWith("." + qualifiedName); + } }