From 7ebf1ad43300cb35bf8bc8a83ee4df61e9b2c551 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Fri, 6 Jan 2012 23:21:35 +0400 Subject: [PATCH] properly read/write int? --- .../lang/resolve/java/JavaTypeTransformer.java | 18 ++++++++++++++++++ .../java/JetTypeJetSignatureReader.java | 8 +++++++- compiler/testData/readClass/type/Int.kt | 3 +++ compiler/testData/readClass/type/IntQ.kt | 3 +++ .../org/jetbrains/jet/WriteSignatureTest.java | 4 ++-- 5 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/readClass/type/Int.kt create mode 100644 compiler/testData/readClass/type/IntQ.kt 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 82d923cec66..96e64c6f08c 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 @@ -24,6 +24,7 @@ public class JavaTypeTransformer { private final JetStandardLibrary standardLibrary; private Map primitiveTypesMap; private Map classTypesMap; + private Map classDescriptorMap; public JavaTypeTransformer(JavaSemanticServices javaSemanticServices, JetStandardLibrary standardLibrary, JavaDescriptorResolver resolver) { this.javaSemanticServices = javaSemanticServices; @@ -199,4 +200,21 @@ public class JavaTypeTransformer { } return classTypesMap; } + + public Map getPrimitiveWrappersClassDescriptorMap() { + if (classDescriptorMap == null) { + classDescriptorMap = new HashMap(); + classDescriptorMap.put("java.lang.Byte", standardLibrary.getByte()); + classDescriptorMap.put("java.lang.Short", standardLibrary.getShort()); + classDescriptorMap.put("java.lang.Character", standardLibrary.getChar()); + classDescriptorMap.put("java.lang.Integer", standardLibrary.getInt()); + classDescriptorMap.put("java.lang.Long", standardLibrary.getLong()); + classDescriptorMap.put("java.lang.Float", standardLibrary.getFloat()); + classDescriptorMap.put("java.lang.Double", standardLibrary.getDouble()); + classDescriptorMap.put("java.lang.Boolean", standardLibrary.getBoolean()); + //classDescriptorMap.put("java.lang.Object", standardLibrary.get + classDescriptorMap.put("java.lang.String", standardLibrary.getString()); + } + return classDescriptorMap; + } } 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 11d26b269d4..0f51cf0df1e 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 @@ -96,7 +96,13 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd @Override public void visitClassType(String name, boolean nullable) { String ourName = name.replace('/', '.'); - this.classDescriptor = javaDescriptorResolver.resolveClass(ourName); + + this.classDescriptor = this.javaSemanticServices.getTypeTransformer().getPrimitiveWrappersClassDescriptorMap().get(ourName); + + if (this.classDescriptor == null) { + this.classDescriptor = javaDescriptorResolver.resolveClass(ourName); + } + if (this.classDescriptor == null) { throw new IllegalStateException("class not found by name: " + ourName); // TODO: wrong exception } diff --git a/compiler/testData/readClass/type/Int.kt b/compiler/testData/readClass/type/Int.kt new file mode 100644 index 00000000000..0a3853f134f --- /dev/null +++ b/compiler/testData/readClass/type/Int.kt @@ -0,0 +1,3 @@ +package test + +fun fff(): Int = 1 diff --git a/compiler/testData/readClass/type/IntQ.kt b/compiler/testData/readClass/type/IntQ.kt new file mode 100644 index 00000000000..8ccad22eeb6 --- /dev/null +++ b/compiler/testData/readClass/type/IntQ.kt @@ -0,0 +1,3 @@ +package test + +fun fff(): Int? = 1 diff --git a/compiler/tests/org/jetbrains/jet/WriteSignatureTest.java b/compiler/tests/org/jetbrains/jet/WriteSignatureTest.java index 278772c9dae..f648e4dc260 100644 --- a/compiler/tests/org/jetbrains/jet/WriteSignatureTest.java +++ b/compiler/tests/org/jetbrains/jet/WriteSignatureTest.java @@ -210,8 +210,8 @@ public class WriteSignatureTest extends TestCaseWithTmpdir { new ClassReader(classInputStream).accept(visitor, ClassReader.SKIP_CODE|ClassReader.SKIP_DEBUG|ClassReader.SKIP_FRAMES); - Assert.assertNotNull(visitor.readSignature); - + Assert.assertNotNull("method not found: " + className + "::" + methodName, visitor.readSignature); + return visitor.readSignature; } finally { Closeables.closeQuietly(classInputStream);