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 fb9e23b0585..dd239673dfe 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 @@ -138,7 +138,7 @@ public class JavaDescriptorResolver { @Nullable public ClassDescriptor resolveClass(@NotNull PsiClass psiClass) { String qualifiedName = psiClass.getQualifiedName(); - + if (qualifiedName.endsWith(JvmAbi.TRAIT_IMPL_SUFFIX)) { // TODO: only if -$$TImpl class is created by Kotlin return null; @@ -161,7 +161,7 @@ public class JavaDescriptorResolver { @Nullable public ClassDescriptor resolveClass(@NotNull String qualifiedName) { - + if (qualifiedName.endsWith(JvmAbi.TRAIT_IMPL_SUFFIX)) { // TODO: only if -$$TImpl class is created by Kotlin return null; @@ -356,7 +356,7 @@ public class JavaDescriptorResolver { @Override public JetSignatureVisitor visitClassBound() { - return new JetTypeJetSignatureReader(JavaDescriptorResolver.this, semanticServices.getJetSemanticServices().getStandardLibrary(), typeVariableResolver) { + return new JetTypeJetSignatureReader(semanticServices, semanticServices.getJetSemanticServices().getStandardLibrary(), typeVariableResolver) { @Override protected void done(@NotNull JetType jetType) { if (isJavaLangObject(jetType)) { @@ -369,7 +369,7 @@ public class JavaDescriptorResolver { @Override public JetSignatureVisitor visitInterfaceBound() { - return new JetTypeJetSignatureReader(JavaDescriptorResolver.this, semanticServices.getJetSemanticServices().getStandardLibrary(), typeVariableResolver) { + return new JetTypeJetSignatureReader(semanticServices, semanticServices.getJetSemanticServices().getStandardLibrary(), typeVariableResolver) { @Override protected void done(@NotNull JetType jetType) { upperBounds.add(jetType); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaSemanticServices.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaSemanticServices.java index c4b9053e3a1..ab9b7350f29 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaSemanticServices.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaSemanticServices.java @@ -21,7 +21,7 @@ public class JavaSemanticServices { public JavaSemanticServices(Project project, JetSemanticServices jetSemanticServices, BindingTrace trace) { this.trace = trace; this.descriptorResolver = new JavaDescriptorResolver(project, this); - this.typeTransformer = new JavaTypeTransformer(jetSemanticServices.getStandardLibrary(), descriptorResolver); + this.typeTransformer = new JavaTypeTransformer(this, jetSemanticServices.getStandardLibrary(), descriptorResolver); this.jetSemanticServices = jetSemanticServices; } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java index 40a6c60b35d..82d923cec66 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java @@ -19,12 +19,14 @@ import java.util.Map; */ public class JavaTypeTransformer { + private final JavaSemanticServices javaSemanticServices; private final JavaDescriptorResolver resolver; private final JetStandardLibrary standardLibrary; private Map primitiveTypesMap; private Map classTypesMap; - public JavaTypeTransformer(JetStandardLibrary standardLibrary, JavaDescriptorResolver resolver) { + public JavaTypeTransformer(JavaSemanticServices javaSemanticServices, JetStandardLibrary standardLibrary, JavaDescriptorResolver resolver) { + this.javaSemanticServices = javaSemanticServices; this.resolver = resolver; this.standardLibrary = standardLibrary; } @@ -61,7 +63,7 @@ public class JavaTypeTransformer { @NotNull public JetType transformToType(@NotNull String kotlinSignature, TypeVariableResolver typeVariableResolver) { final JetType[] r = new JetType[1]; - JetTypeJetSignatureReader reader = new JetTypeJetSignatureReader(resolver, standardLibrary, typeVariableResolver) { + JetTypeJetSignatureReader reader = new JetTypeJetSignatureReader(javaSemanticServices, standardLibrary, typeVariableResolver) { @Override protected void done(@NotNull JetType jetType) { r[0] = jetType; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetTypeJetSignatureReader.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetTypeJetSignatureReader.java index 520da450766..11d26b269d4 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetTypeJetSignatureReader.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetTypeJetSignatureReader.java @@ -2,7 +2,6 @@ package org.jetbrains.jet.lang.resolve.java; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetStandardClasses; @@ -24,12 +23,14 @@ import java.util.List; */ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAdapter { + private final JavaSemanticServices javaSemanticServices; private final JavaDescriptorResolver javaDescriptorResolver; private final JetStandardLibrary jetStandardLibrary; private final TypeVariableResolver typeVariableResolver; - public JetTypeJetSignatureReader(JavaDescriptorResolver javaDescriptorResolver, JetStandardLibrary jetStandardLibrary, TypeVariableResolver typeVariableResolver) { - this.javaDescriptorResolver = javaDescriptorResolver; + public JetTypeJetSignatureReader(JavaSemanticServices javaSemanticServices, JetStandardLibrary jetStandardLibrary, TypeVariableResolver typeVariableResolver) { + this.javaSemanticServices = javaSemanticServices; + this.javaDescriptorResolver = javaSemanticServices.getDescriptorResolver(); this.jetStandardLibrary = jetStandardLibrary; this.typeVariableResolver = typeVariableResolver; } @@ -114,7 +115,7 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd @Override public JetSignatureVisitor visitTypeArgument(final char wildcard) { - return new JetTypeJetSignatureReader(javaDescriptorResolver, jetStandardLibrary, typeVariableResolver) { + return new JetTypeJetSignatureReader(javaSemanticServices, jetStandardLibrary, typeVariableResolver) { @Override protected void done(@NotNull JetType jetType) { @@ -125,7 +126,19 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd @Override public JetSignatureVisitor visitArrayType(final boolean nullable) { - return new JetTypeJetSignatureReader(javaDescriptorResolver, jetStandardLibrary, typeVariableResolver) { + return new JetTypeJetSignatureReader(javaSemanticServices, jetStandardLibrary, typeVariableResolver) { + @Override + public void visitBaseType(char descriptor, boolean nullable) { + JetType primitiveType = getPrimitiveType(descriptor, nullable); + JetType arrayType; + if (!nullable) { + arrayType = jetStandardLibrary.getPrimitiveArrayType(primitiveType); + } else { + arrayType = TypeUtils.makeNullableAsSpecified(jetStandardLibrary.getArrayType(primitiveType), nullable); + } + JetTypeJetSignatureReader.this.done(arrayType); + } + @Override protected void done(@NotNull JetType jetType) { JetType arrayType = TypeUtils.makeNullableAsSpecified(jetStandardLibrary.getArrayType(jetType), nullable); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java index 186e94242d3..6c23f5d6422 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java @@ -504,6 +504,14 @@ public class JetStandardLibrary { initStdClasses(); return doubleArrayType; } + + public JetType getPrimitiveArrayType(JetType jetType) { + if (jetType.equals(getIntType())) { + return getIntArrayType(); + } else { + throw new IllegalStateException("not implemented"); + } + } public ClassDescriptor getByteArrayClass() { initStdClasses(); diff --git a/compiler/testData/readClass/type/IntArray.kt b/compiler/testData/readClass/type/IntArray.kt new file mode 100644 index 00000000000..8fc8ef58b92 --- /dev/null +++ b/compiler/testData/readClass/type/IntArray.kt @@ -0,0 +1,3 @@ +package test + +fun nothing(): IntArray = throw Exception() diff --git a/compiler/testData/writeSignature/ArrayOfCharSequence.kt b/compiler/testData/writeSignature/ArrayOfCharSequence.kt new file mode 100644 index 00000000000..ff263b502d5 --- /dev/null +++ b/compiler/testData/writeSignature/ArrayOfCharSequence.kt @@ -0,0 +1,6 @@ +fun never(): Array = throw Exception() + +// method: namespace::never +// jvm signature: ()[Ljava/lang/CharSequence; +// generic signature: null +// kotlin signature: ()[Ljava/lang/CharSequence; // TODO: need to skip kotlin signature diff --git a/compiler/testData/writeSignature/ArrayOfInt.kt b/compiler/testData/writeSignature/ArrayOfInt.kt new file mode 100644 index 00000000000..934bbb102d6 --- /dev/null +++ b/compiler/testData/writeSignature/ArrayOfInt.kt @@ -0,0 +1,6 @@ +fun never(): Array = throw Exception() + +// method: namespace::never +// jvm signature: ()[Ljava/lang/Integer; +// generic signature: null +// kotlin signature: ()[Ljava/lang/Integer; // TODO: need to skip kotlin signature diff --git a/compiler/testData/writeSignature/IntArray.kt b/compiler/testData/writeSignature/IntArray.kt new file mode 100644 index 00000000000..72062baedde --- /dev/null +++ b/compiler/testData/writeSignature/IntArray.kt @@ -0,0 +1,6 @@ +fun never(): IntArray = throw Exception() + +// method: namespace::never +// jvm signature: ()[I +// generic signature: null +// kotlin signature: ()[I // TODO: need to skip kotlin signature diff --git a/compiler/testData/writeSignature/ListOfString.kt b/compiler/testData/writeSignature/ListOfCharSequence.kt similarity index 100% rename from compiler/testData/writeSignature/ListOfString.kt rename to compiler/testData/writeSignature/ListOfCharSequence.kt