From e2cb98df6718ea907883c8882856f612980b31dc Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Mon, 19 Mar 2012 23:25:27 +0400 Subject: [PATCH] better import jet namespace --- .../src/org/jetbrains/jet/codegen/JetTypeMapper.java | 4 +++- .../jetbrains/jet/lang/DefaultModuleConfiguration.java | 9 ++++++++- .../org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java | 9 ++++++--- .../jet/lang/types/lang/JetStandardClasses.java | 6 +++++- compiler/testData/codegen/regressions/kt533.kt | 6 +++--- .../diagnostics/tests/regressions/kt385.109.441.jet | 1 + .../testData/diagnostics/tests/regressions/kt860.jet | 1 + .../genericWithoutTypeVariables/FunClassParamNotNull.txt | 2 +- .../FunClassParamNullable.txt | 2 +- .../ReturnTypeClassParamNotNull.txt | 2 +- .../ReturnTypeClassParamNullable.txt | 2 +- .../readKotlinBinaryClass/prop/ExtValIntCharSequence.txt | 2 +- .../prop/ExtValIntCharSequenceQ.txt | 2 +- compiler/testData/writeSignature/ArrayOfCharSequence.kt | 2 +- compiler/testData/writeSignature/Comparable.kt | 2 +- compiler/testData/writeSignature/ListOfCharSequence.kt | 2 +- compiler/testData/writeSignature/VarargCharSequence.kt | 2 +- js/js.libraries/src/core/core.kt | 1 - .../org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java | 4 ++++ libraries/stdlib/src/concurrent/Thread.kt | 1 - 20 files changed, 41 insertions(+), 21 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java index 2c9b0086363..22daf6b3747 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -796,7 +796,9 @@ public class JetTypeMapper { private boolean isForceReal(JvmClassName className) { return JvmPrimitiveType.getByWrapperClass(className) != null - || className.getFqName().equals("java.lang.String") || className.getFqName().equals("java.lang.Object"); + || className.getFqName().equals("java.lang.String") + || className.getFqName().equals("java.lang.CharSequence") + || className.getFqName().equals("java.lang.Object"); } public boolean isGenericsArray(JetType type) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/DefaultModuleConfiguration.java b/compiler/frontend/src/org/jetbrains/jet/lang/DefaultModuleConfiguration.java index 0dee399ee07..3ced2d40b6a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/DefaultModuleConfiguration.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/DefaultModuleConfiguration.java @@ -18,12 +18,16 @@ package org.jetbrains.jet.lang; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; +import org.jetbrains.jet.lang.types.lang.JetStandardClasses; +import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; import java.util.Collection; @@ -32,7 +36,7 @@ import java.util.Collection; */ public class DefaultModuleConfiguration implements ModuleConfiguration { public static final ImportPath[] DEFAULT_JET_IMPORTS = new ImportPath[] { - new ImportPath("kotlin.*"), new ImportPath("kotlin.io.*") }; + new ImportPath("kotlin.*"), new ImportPath("kotlin.io.*"), new ImportPath("jet.*"), }; private Project project; @@ -53,5 +57,8 @@ public class DefaultModuleConfiguration implements ModuleConfiguration { @Override public void extendNamespaceScope(@NotNull BindingTrace trace, @NotNull NamespaceDescriptor namespaceDescriptor, @NotNull WritableScope namespaceMemberScope) { + if (DescriptorUtils.getFQName(namespaceDescriptor).equals(JetStandardClasses.STANDARD_CLASSES_FQNAME.toUnsafe())) { + namespaceMemberScope.importScope(JetStandardLibrary.getInstance().getLibraryScope()); + } } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index d5685e18866..9da43018ebb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -292,14 +292,17 @@ public class TopDownAnalyzer { new TraceBasedRedeclarationHandler(topDownAnalysisParameters.getTrace())).setDebugName("Root scope in analyzeNamespace"); scope.changeLockLevel(WritableScope.LockLevel.BOTH); - // Import the lang package - scope.importScope(JetStandardLibrary.getInstance().getLibraryScope()); - NamespaceDescriptorImpl rootNs = namespaceFactory.createNamespaceDescriptorPathIfNeeded(FqName.ROOT); + // map "jet" namespace into JetStandardLibrary/Classes + // @see DefaultModuleConfiguraiton#extendNamespaceScope + namespaceFactory.createNamespaceDescriptorPathIfNeeded(JetStandardClasses.STANDARD_CLASSES_FQNAME); + // Import a scope that contains all top-level namespaces that come from dependencies // This makes the namespaces visible at all, does not import themselves scope.importScope(rootNs.getMemberScope()); + + scope.changeLockLevel(WritableScope.LockLevel.READING); // dummy builder is used because "root" is module descriptor, // namespaces added to module explicitly in diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java index cfd73a8a631..9e0e45467b3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java @@ -22,6 +22,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.FqName; import org.jetbrains.jet.lang.resolve.scopes.*; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; @@ -54,7 +56,9 @@ public class JetStandardClasses { FAKE_STANDARD_CLASSES_MODULE.setRootNs(STANDARD_CLASSES_FAKE_ROOT_NS); } - /*package*/ static NamespaceDescriptorImpl STANDARD_CLASSES_NAMESPACE = new NamespaceDescriptorImpl(STANDARD_CLASSES_FAKE_ROOT_NS, Collections.emptyList(), "jet"); + public static NamespaceDescriptorImpl STANDARD_CLASSES_NAMESPACE = new NamespaceDescriptorImpl(STANDARD_CLASSES_FAKE_ROOT_NS, Collections.emptyList(), "jet"); + + public static final FqName STANDARD_CLASSES_FQNAME = DescriptorUtils.getFQName(STANDARD_CLASSES_NAMESPACE).toSafe(); private static final ClassDescriptor NOTHING_CLASS = new ClassDescriptorImpl( STANDARD_CLASSES_NAMESPACE, diff --git a/compiler/testData/codegen/regressions/kt533.kt b/compiler/testData/codegen/regressions/kt533.kt index 1ff42c9fba6..0714d67fb27 100644 --- a/compiler/testData/codegen/regressions/kt533.kt +++ b/compiler/testData/codegen/regressions/kt533.kt @@ -95,8 +95,8 @@ fun LinkedList.sum(f : (Int, Int) -> Int) : Int { } fun List.backwards() : Iterable = object : Iterable { - override fun iterator() : Iterator = - object : Iterator { + override fun iterator() : jet.Iterator = + object : jet.Iterator { var current = size() override fun next() : T = get(--current) override val hasNext : Boolean get() = current > 0 @@ -141,4 +141,4 @@ fun Reader.forEachChar(body : (Char) -> Unit) { if (i == -1) break body(i.toChar()) } while(true) -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/regressions/kt385.109.441.jet b/compiler/testData/diagnostics/tests/regressions/kt385.109.441.jet index d49b3863bf0..c45a50035eb 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt385.109.441.jet +++ b/compiler/testData/diagnostics/tests/regressions/kt385.109.441.jet @@ -3,6 +3,7 @@ // KT-441 Exception in type inference when multiple overloads accepting an integer literal are accessible import java.util.* +import jet.Iterator fun Iterator.foreach(operation: (element: T) -> Unit) : Unit = while(hasNext) operation(next()) diff --git a/compiler/testData/diagnostics/tests/regressions/kt860.jet b/compiler/testData/diagnostics/tests/regressions/kt860.jet index 801b0988e58..a8ef68b60a5 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt860.jet +++ b/compiler/testData/diagnostics/tests/regressions/kt860.jet @@ -3,6 +3,7 @@ package kotlin.util import java.util.* +import jet.Iterator fun > Iterator.to(container: U) : U { while(hasNext) diff --git a/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/FunClassParamNotNull.txt b/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/FunClassParamNotNull.txt index 9dd5313d58c..951d206f3ce 100644 --- a/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/FunClassParamNotNull.txt +++ b/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/FunClassParamNotNull.txt @@ -1,3 +1,3 @@ namespace test -final fun ff(/*0*/ p: java.util.List): jet.Int +final fun ff(/*0*/ p: java.util.List): jet.Int diff --git a/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/FunClassParamNullable.txt b/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/FunClassParamNullable.txt index 8c3d10b1fec..f7b6216a718 100644 --- a/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/FunClassParamNullable.txt +++ b/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/FunClassParamNullable.txt @@ -1,3 +1,3 @@ namespace test -final fun ff(/*0*/ p: java.util.List): jet.Int +final fun ff(/*0*/ p: java.util.List): jet.Int diff --git a/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/ReturnTypeClassParamNotNull.txt b/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/ReturnTypeClassParamNotNull.txt index bf4260592c5..1174ef44a49 100644 --- a/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/ReturnTypeClassParamNotNull.txt +++ b/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/ReturnTypeClassParamNotNull.txt @@ -1,3 +1,3 @@ namespace test -final fun ffgg(): java.util.List +final fun ffgg(): java.util.List diff --git a/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/ReturnTypeClassParamNullable.txt b/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/ReturnTypeClassParamNullable.txt index 6f3663aab16..0cd4ac3d8eb 100644 --- a/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/ReturnTypeClassParamNullable.txt +++ b/compiler/testData/readKotlinBinaryClass/fun/genericWithoutTypeVariables/ReturnTypeClassParamNullable.txt @@ -1,3 +1,3 @@ namespace test -final fun ffgg(): java.util.List +final fun ffgg(): java.util.List diff --git a/compiler/testData/readKotlinBinaryClass/prop/ExtValIntCharSequence.txt b/compiler/testData/readKotlinBinaryClass/prop/ExtValIntCharSequence.txt index 113ff8a4777..20ce3fee9ae 100644 --- a/compiler/testData/readKotlinBinaryClass/prop/ExtValIntCharSequence.txt +++ b/compiler/testData/readKotlinBinaryClass/prop/ExtValIntCharSequence.txt @@ -1,3 +1,3 @@ namespace test -final val jet.Int.ggg: jet.CharSequence +final val jet.Int.ggg: java.lang.CharSequence diff --git a/compiler/testData/readKotlinBinaryClass/prop/ExtValIntCharSequenceQ.txt b/compiler/testData/readKotlinBinaryClass/prop/ExtValIntCharSequenceQ.txt index e4dac3ad2a4..de7b37e48c0 100644 --- a/compiler/testData/readKotlinBinaryClass/prop/ExtValIntCharSequenceQ.txt +++ b/compiler/testData/readKotlinBinaryClass/prop/ExtValIntCharSequenceQ.txt @@ -1,3 +1,3 @@ namespace test -final val jet.Int.ggg: jet.CharSequence? +final val jet.Int.ggg: java.lang.CharSequence? diff --git a/compiler/testData/writeSignature/ArrayOfCharSequence.kt b/compiler/testData/writeSignature/ArrayOfCharSequence.kt index ff263b502d5..3083aaf131c 100644 --- a/compiler/testData/writeSignature/ArrayOfCharSequence.kt +++ b/compiler/testData/writeSignature/ArrayOfCharSequence.kt @@ -3,4 +3,4 @@ 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 +// kotlin signature: ()[Mjava/lang/CharSequence; // TODO: need to skip kotlin signature diff --git a/compiler/testData/writeSignature/Comparable.kt b/compiler/testData/writeSignature/Comparable.kt index d8d4cc44363..ba6e375cc09 100644 --- a/compiler/testData/writeSignature/Comparable.kt +++ b/compiler/testData/writeSignature/Comparable.kt @@ -3,4 +3,4 @@ fun cc(): Comparable? = null // method: namespace::cc // jvm signature: ()Ljava/lang/Comparable; // generic signature: ()Ljava/lang/Comparable; -// kotlin signature: ()?Ljava/lang/Comparable; +// kotlin signature: ()?Ljava/lang/Comparable; diff --git a/compiler/testData/writeSignature/ListOfCharSequence.kt b/compiler/testData/writeSignature/ListOfCharSequence.kt index 91847aa285b..f3bbb608f2d 100644 --- a/compiler/testData/writeSignature/ListOfCharSequence.kt +++ b/compiler/testData/writeSignature/ListOfCharSequence.kt @@ -6,4 +6,4 @@ fun foo(p: List) = 1 // method: namespace::foo // jvm signature: (Ljava/util/List;)I // generic signature: (Ljava/util/List;)I -// kotlin signature: (Ljava/util/List;)I // TODO: skip Kotlin signature +// kotlin signature: (Ljava/util/List;)I // TODO: skip Kotlin signature diff --git a/compiler/testData/writeSignature/VarargCharSequence.kt b/compiler/testData/writeSignature/VarargCharSequence.kt index edbef9ab513..fd41e019ce8 100644 --- a/compiler/testData/writeSignature/VarargCharSequence.kt +++ b/compiler/testData/writeSignature/VarargCharSequence.kt @@ -3,4 +3,4 @@ fun foo(vararg tail: java.lang.CharSequence) = 1 // method: namespace::foo // jvm signature: ([Ljava/lang/CharSequence;)I // generic signature: null -// kotlin signature: ([Ljava/lang/CharSequence;)I // TODO: need to skip kotlin signature +// kotlin signature: ([Mjava/lang/CharSequence;)I // TODO: need to skip kotlin signature diff --git a/js/js.libraries/src/core/core.kt b/js/js.libraries/src/core/core.kt index 9eb716958b3..671cb9a5961 100644 --- a/js/js.libraries/src/core/core.kt +++ b/js/js.libraries/src/core/core.kt @@ -6,7 +6,6 @@ import java.util.*; import java.lang.*; - native val noImpl : Nothing = throw Exception(); diff --git a/js/js.translator/src/org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java b/js/js.translator/src/org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java index cb34d80cbb9..e611951cb0f 100644 --- a/js/js.translator/src/org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java +++ b/js/js.translator/src/org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java @@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.DefaultModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; @@ -30,6 +31,7 @@ import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; +import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.k2js.config.Config; import java.util.ArrayList; @@ -122,11 +124,13 @@ public final class AnalyzerFacadeForJS { public void addDefaultImports(@NotNull WritableScope rootScope, @NotNull Collection directives) { directives.add(JetPsiFactory.createImportDirective(project, new ImportPath("js.*"))); + directives.add(JetPsiFactory.createImportDirective(project, new ImportPath(JetStandardClasses.STANDARD_CLASSES_FQNAME, true))); } @Override public void extendNamespaceScope(@NotNull BindingTrace trace, @NotNull NamespaceDescriptor namespaceDescriptor, @NotNull WritableScope namespaceMemberScope) { + DefaultModuleConfiguration.createStandardConfiguration(project).extendNamespaceScope(trace, namespaceDescriptor, namespaceMemberScope); } } diff --git a/libraries/stdlib/src/concurrent/Thread.kt b/libraries/stdlib/src/concurrent/Thread.kt index 6a513291ead..c775ddb42f7 100644 --- a/libraries/stdlib/src/concurrent/Thread.kt +++ b/libraries/stdlib/src/concurrent/Thread.kt @@ -1,6 +1,5 @@ package kotlin.concurrent -import java.lang.* import java.util.concurrent.Executor inline val currentThread : Thread