diff --git a/compiler/android-tests/android-module/src/org/jetbrains/jet/compiler/android/AbstractCodegenTestCaseOnAndroid.java b/compiler/android-tests/android-module/src/org/jetbrains/jet/compiler/android/AbstractCodegenTestCaseOnAndroid.java index 51dd2285535..e26f20675c8 100644 --- a/compiler/android-tests/android-module/src/org/jetbrains/jet/compiler/android/AbstractCodegenTestCaseOnAndroid.java +++ b/compiler/android-tests/android-module/src/org/jetbrains/jet/compiler/android/AbstractCodegenTestCaseOnAndroid.java @@ -27,7 +27,8 @@ public class AbstractCodegenTestCaseOnAndroid extends TestCase { protected void invokeBoxMethod(String filePath, String expectedResult) throws Exception { try { Class clazz; - clazz = Class.forName(filePath.replaceAll("\\\\|-|\\.|/", "_") + ".namespace"); + String packageName = filePath.replaceAll("\\\\|-|\\.|/", "_"); + clazz = Class.forName(packageName + "." + getPackageClassName(packageName)); Method method; method = clazz.getMethod("box"); assertEquals(expectedResult, method.invoke(null)); @@ -36,4 +37,8 @@ public class AbstractCodegenTestCaseOnAndroid extends TestCase { throw new RuntimeException("File: " + filePath, e); } } + + public static String getPackageClassName(String packageName) { + return Character.toUpperCase(packageName.charAt(0)) + packageName.substring(1, packageName.length()) + "Package"; + } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index 1fedb364ac6..7817692fa32 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -33,8 +33,8 @@ import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmClassName; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -142,7 +142,8 @@ public class NamespaceCodegen extends MemberCodegen { } if (k > 0) { - String namespaceInternalName = JvmClassName.byFqNameWithoutInnerClasses(name.child(Name.identifier(JvmAbi.PACKAGE_CLASS))).getInternalName(); + String namespaceInternalName = JvmClassName.byFqNameWithoutInnerClasses( + PackageClassUtils.getPackageClassFqName(name)).getInternalName(); String className = getMultiFileNamespaceInternalName(namespaceInternalName, file); ClassBuilder builder = state.getFactory().forNamespacepart(className, file); @@ -271,11 +272,12 @@ public class NamespaceCodegen extends MemberCodegen { @NotNull public static JvmClassName getJVMClassNameForKotlinNs(@NotNull FqName fqName) { + String packageClassName = PackageClassUtils.getPackageClassName(fqName); if (fqName.isRoot()) { - return JvmClassName.byInternalName(JvmAbi.PACKAGE_CLASS); + return JvmClassName.byInternalName(packageClassName); } - return JvmClassName.byFqNameWithoutInnerClasses(fqName.child(Name.identifier(JvmAbi.PACKAGE_CLASS))); + return JvmClassName.byFqNameWithoutInnerClasses(fqName.child(Name.identifier(packageClassName))); } @NotNull diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java index ba2c7f1dc0b..1836de88af9 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java @@ -24,6 +24,8 @@ import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmClassName; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -255,11 +257,13 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid { } else if (containingDeclaration instanceof NamespaceDescriptor) { String peek = peekFromStack(nameStack); + FqName qualifiedName = ((NamespaceDescriptor) containingDeclaration).getQualifiedName(); + String packageClassName = PackageClassUtils.getPackageClassName(qualifiedName); if (peek.isEmpty()) { - peek = JvmAbi.PACKAGE_CLASS; + peek = packageClassName; } else { - peek += "/" + JvmAbi.PACKAGE_CLASS; + peek += "/" + packageClassName; } nameStack.push(peek + '$' + function.getName()); super.visitNamedFunction(function); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java index dee7cc18a3d..551627bb559 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmClassName; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.util.slicedmap.WritableSlice; @@ -144,9 +145,10 @@ public final class PsiCodegenPredictor { private static JvmClassName addPackageClass(JvmClassName packageName) { FqName name = packageName.getFqName(); + String packageClassName = PackageClassUtils.getPackageClassName(name); return name.isRoot() ? - JvmClassName.byFqNameWithoutInnerClasses(JvmAbi.PACKAGE_CLASS) : - JvmClassName.byInternalName(packageName.getInternalName() + "/" + JvmAbi.PACKAGE_CLASS); + JvmClassName.byFqNameWithoutInnerClasses(packageClassName) : + JvmClassName.byInternalName(packageName.getInternalName() + "/" + packageClassName); } public static boolean checkPredictedClassNameForFun( diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index fb8670f31ae..eb49bc4554f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -145,7 +145,7 @@ public class JetTypeMapper extends BindingTraceAware { if (r.length() > 0) { r.append("/"); } - r.append("namespace"); + r.append(PackageClassUtils.getPackageClassName(namespace.getQualifiedName())); } if (r.length() == 0) { diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java index dd9ce92ead4..de60b91ef46 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java @@ -33,7 +33,7 @@ import org.jetbrains.jet.codegen.GeneratedClassLoader; import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.config.CommonConfigurationKeys; import org.jetbrains.jet.config.CompilerConfiguration; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.utils.KotlinPaths; import org.jetbrains.jet.utils.PathUtil; @@ -137,7 +137,7 @@ public class CompileEnvironmentUtil { loader = new GeneratedClassLoader(factory, KotlinToJVMBytecodeCompiler.class.getClassLoader()); } try { - Class namespaceClass = loader.loadClass(JvmAbi.PACKAGE_CLASS); + Class namespaceClass = loader.loadClass(PackageClassUtils.getPackageClassName(FqName.ROOT)); final Method method = namespaceClass.getDeclaredMethod("project"); if (method == null) { throw new CompileEnvironmentException("Module script " + moduleFile + " must define project() function"); diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index 72664f14055..7f14f98e2d0 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -47,7 +47,7 @@ import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.ScriptNameUtil; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.plugin.JetMainDetector; @@ -166,7 +166,7 @@ public class KotlinToJVMBytecodeCompiler { return null; } FqName fqName = JetPsiUtil.getFQName(file); - mainClass = fqName.child(Name.identifier(JvmAbi.PACKAGE_CLASS)); + mainClass = PackageClassUtils.getPackageClassFqName(fqName); } } return mainClass; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java index e9a41df931c..8ebbbe2b096 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java @@ -46,7 +46,7 @@ public final class DescriptorResolverUtils { } public static boolean isKotlinClass(@NotNull PsiClass psiClass) { - return new PsiClassWrapper(psiClass).getJetClass().isDefined() || psiClass.getName().equals(JvmAbi.PACKAGE_CLASS); + return new PsiClassWrapper(psiClass).getJetClass().isDefined() || PackageClassUtils.isPackageClass(psiClass); } public static boolean isInnerEnum(@NotNull PsiClass innerClass, @Nullable DeclarationDescriptor owner) { diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java index c3005a8d737..ac7d4b613e1 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java @@ -23,7 +23,6 @@ public class JvmAbi { public static final String DEFAULT_PARAMS_IMPL_SUFFIX = "$default"; public static final String GETTER_PREFIX = "get"; public static final String SETTER_PREFIX = "set"; - public static final String PACKAGE_CLASS = "namespace"; public static final String CLASS_OBJECT_CLASS_NAME = "object"; public static final String CLASS_OBJECT_SUFFIX = "$" + CLASS_OBJECT_CLASS_NAME; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/PackageClassUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/PackageClassUtils.java new file mode 100644 index 00000000000..e309401fc78 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/PackageClassUtils.java @@ -0,0 +1,58 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.java; + +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.PsiClass; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.Name; + +public class PackageClassUtils { + + private static final String DEFAULT_PACKAGE = "_DefaultPackage"; + + // ex. -> _DefaultPackage, a -> APackage, a.b -> BPackage + public static String getPackageClassName(@NotNull FqName packageFQN) { + if (packageFQN.isRoot()) { + return DEFAULT_PACKAGE; + } + return StringUtil.capitalize(packageFQN.shortName().getName()) + "Package"; + } + + public static FqName getPackageClassFqName(@NotNull FqName packageFQN) { + return packageFQN.child(Name.identifier(getPackageClassName(packageFQN))); + } + + public static boolean isPackageClass(@NotNull FqName fqName) { + if (fqName.isRoot()) { + return true; + } + return getPackageClassName(fqName.parent()).equals(fqName.shortName().getName()); + } + + public static boolean isPackageClass(@NotNull PsiClass psiClass) { + String qualifiedName = psiClass.getQualifiedName(); + if (qualifiedName == null) { + return false; + } + if (DEFAULT_PACKAGE.equals(qualifiedName)) { + return true; + } + return getPackageClassName(new FqName(qualifiedName).parent()).equals(psiClass.getName()); + } +} diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java index 8caf8b8327e..22cc0a44b74 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java @@ -203,7 +203,6 @@ public final class JavaNamespaceResolver { @Nullable private PsiClass getPsiClassForJavaPackageScope(@NotNull FqName packageFQN) { - return psiClassFinder.findPsiClass(packageFQN.child(Name.identifier(JvmAbi.PACKAGE_CLASS)), - PsiClassFinder.RuntimeClassesHandleMode.IGNORE); + return psiClassFinder.findPsiClass(PackageClassUtils.getPackageClassFqName(packageFQN), PsiClassFinder.RuntimeClassesHandleMode.IGNORE); } } \ No newline at end of file diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/ScopeUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/ScopeUtils.java index 34186239fe0..54a49f2f371 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/ScopeUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/ScopeUtils.java @@ -53,7 +53,7 @@ public final class ScopeUtils { } for (PsiClass psiClass : javaSemanticServices.getPsiClassFinder().findPsiClasses(psiPackage)) { - if (isKotlinNamespace && JvmAbi.PACKAGE_CLASS.equals(psiClass.getName())) { + if (isKotlinNamespace && PackageClassUtils.isPackageClass(psiClass)) { continue; } @@ -62,7 +62,7 @@ public final class ScopeUtils { } // TODO: Temp hack for collection function descriptors from java - if (JvmAbi.PACKAGE_CLASS.equals(psiClass.getName())) { + if (PackageClassUtils.isPackageClass(psiClass)) { continue; } diff --git a/compiler/integration-tests/src/org/jetbrains/kotlin/AntTaskTest.java b/compiler/integration-tests/src/org/jetbrains/kotlin/AntTaskTest.java index 8e7e1b6aedb..c183732d532 100644 --- a/compiler/integration-tests/src/org/jetbrains/kotlin/AntTaskTest.java +++ b/compiler/integration-tests/src/org/jetbrains/kotlin/AntTaskTest.java @@ -29,7 +29,7 @@ public class AntTaskTest extends KotlinIntegrationTestBase { String runtime = new File("dist/kotlinc/lib/kotlin-runtime.jar").getAbsolutePath(); assertEquals("compilation failed", 0, runAnt("build.log", "build.xml")); - runJava("hello.run", "-cp", jar + File.pathSeparator + runtime, "Hello.namespace"); + runJava("hello.run", "-cp", jar + File.pathSeparator + runtime, "Hello.HelloPackage"); } @Override diff --git a/compiler/integration-tests/src/org/jetbrains/kotlin/CompilerSmokeTest.java b/compiler/integration-tests/src/org/jetbrains/kotlin/CompilerSmokeTest.java index fed440961cd..8f775597720 100644 --- a/compiler/integration-tests/src/org/jetbrains/kotlin/CompilerSmokeTest.java +++ b/compiler/integration-tests/src/org/jetbrains/kotlin/CompilerSmokeTest.java @@ -29,7 +29,7 @@ public class CompilerSmokeTest extends KotlinIntegrationTestBase { final String jar = tmpdir.getTmpDir().getAbsolutePath() + File.separator + "hello.jar"; assertEquals("compilation failed", 0, runCompiler("hello.compile", "-src", "hello.kt", "-jar", jar)); - runJava("hello.run", "-cp", jar, "Hello.namespace"); + runJava("hello.run", "-cp", jar, "Hello.HelloPackage"); } @Test @@ -37,7 +37,7 @@ public class CompilerSmokeTest extends KotlinIntegrationTestBase { final String jar = tmpdir.getTmpDir().getAbsolutePath() + File.separator + "smoke.jar"; assertEquals("compilation failed", 0, runCompiler("Smoke.compile", "-module", "Smoke.kts", "-jar", jar)); - runJava("Smoke.run", "-cp", jar + File.pathSeparator + getKotlinRuntimePath(), "Smoke.namespace", "1", "2", "3"); + runJava("Smoke.run", "-cp", jar + File.pathSeparator + getKotlinRuntimePath(), "Smoke.SmokePackage", "1", "2", "3"); } @Test diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java index c864fed91d4..53523d4f760 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JavaElementFinder.java @@ -32,7 +32,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.NamespaceCodegen; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.java.JavaPsiFacadeKotlinHacks; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -87,8 +87,9 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade findClassesAndObjects(qualifiedName, scope, answer); - if (JvmAbi.PACKAGE_CLASS.equals(qualifiedName.shortName().getName())) { - findPackageClass(qualifiedName.parent(), scope, answer); + FqName packageFQN = qualifiedName.parent(); + if (PackageClassUtils.getPackageClassFqName(packageFQN).equals(qualifiedName)) { + findPackageClass(packageFQN, scope, answer); } return answer.toArray(new PsiClass[answer.size()]); @@ -141,7 +142,7 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade Collection declarations = lightClassGenerationSupport.findClassOrObjectDeclarationsInPackage(packageFQN, scope); Set answer = Sets.newHashSet(); - answer.add(JvmAbi.PACKAGE_CLASS); + answer.add(PackageClassUtils.getPackageClassName(packageFQN)); for (JetClassOrObject declaration : declarations) { String name = declaration.getName(); diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForPackage.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForPackage.java index 8e710da63c9..04da14f37dd 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForPackage.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForPackage.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2012 JetBrains s.r.o. + * Copyright 2010-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,9 +30,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.java.JetJavaMirrorMarker; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.resolve.name.Name; import javax.swing.*; import java.util.Collection; @@ -55,7 +54,7 @@ public class KotlinLightClassForPackage extends KotlinLightClassForPackageBase i private KotlinLightClassForPackage(@NotNull PsiManager manager, @NotNull FqName packageFqName, @NotNull Collection files) { super(manager); this.packageFqName = packageFqName; - this.packageClassFqName = packageFqName.child(Name.identifier(JvmAbi.PACKAGE_CLASS)); + this.packageClassFqName = PackageClassUtils.getPackageClassFqName(packageFqName); assert !files.isEmpty() : "No files for package " + packageFqName; this.files = Sets.newHashSet(files); // needed for hashCode this.hashCode = computeHashCode(); diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java index 41e93997a46..5bc1a791cdb 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/StubClassBuilder.java @@ -28,7 +28,11 @@ import org.jetbrains.asm4.ClassVisitor; import org.jetbrains.asm4.FieldVisitor; import org.jetbrains.asm4.MethodVisitor; import org.jetbrains.jet.codegen.ClassBuilder; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.psi.JetNamedDeclaration; +import org.jetbrains.jet.lang.psi.JetPsiUtil; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import java.util.List; @@ -66,13 +70,20 @@ public class StubClassBuilder extends ClassBuilder { v = new StubBuildingVisitor(null, EMPTY_STRATEGY, parent, access); super.defineClass(origin, version, access, name, signature, superName, interfaces); - if (name.equals(JvmAbi.PACKAGE_CLASS) || name.endsWith("/" + JvmAbi.PACKAGE_CLASS)) { - isNamespace = true; + + if (origin instanceof JetFile) { + FqName packageName = JetPsiUtil.getFQName((JetFile) origin); + String packageClassName = PackageClassUtils.getPackageClassName(packageName); + + if (name.equals(packageClassName) || name.endsWith("/" + packageClassName)) { + isNamespace = true; + } } - else { + + if (!isNamespace) { parentStack.push(v.getResult()); } - + ((StubBase) v.getResult()).putUserData(ClsWrapperStubPsiFactory.ORIGIN_ELEMENT, origin); } diff --git a/compiler/testData/checkLocalVariablesTable/namespace$foo$1$1.kt b/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$1$1.kt similarity index 70% rename from compiler/testData/checkLocalVariablesTable/namespace$foo$1$1.kt rename to compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$1$1.kt index fb8d0730eda..90493f692fd 100644 --- a/compiler/testData/checkLocalVariablesTable/namespace$foo$1$1.kt +++ b/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$1$1.kt @@ -7,5 +7,5 @@ fun foo() { } // METHOD : invoke(I)V -// VARIABLE : NAME=this TYPE=Lnamespace$foo$1$1; INDEX=0 +// VARIABLE : NAME=this TYPE=L_DefaultPackage$foo$1$1; INDEX=0 // VARIABLE : NAME=it TYPE=I INDEX=1 diff --git a/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$1.kt b/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$1.kt new file mode 100644 index 00000000000..ce3a1cf2dab --- /dev/null +++ b/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$1.kt @@ -0,0 +1,7 @@ +fun foo() { + fun bar() { + } +} + +// METHOD : invoke()V +// VARIABLE : NAME=this TYPE=L_DefaultPackage$foo$1; INDEX=0 diff --git a/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$a$1.kt b/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$a$1.kt new file mode 100644 index 00000000000..650d0cd55d3 --- /dev/null +++ b/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$a$1.kt @@ -0,0 +1,8 @@ +fun foo() { + var a = { + + } +} + +// METHOD : invoke()V +// VARIABLE : NAME=this TYPE=L_DefaultPackage$foo$a$1; INDEX=0 diff --git a/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo1$1.kt b/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo1$1.kt new file mode 100644 index 00000000000..7c822d3140a --- /dev/null +++ b/compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo1$1.kt @@ -0,0 +1,9 @@ +fun foo1() { + (1..5).forEach { + println(it) + } +} + +// METHOD : invoke(I)V +// VARIABLE : NAME=this TYPE=L_DefaultPackage$foo1$1; INDEX=0 +// VARIABLE : NAME=it TYPE=I INDEX=1 diff --git a/compiler/testData/checkLocalVariablesTable/namespace$foo$1.kt b/compiler/testData/checkLocalVariablesTable/namespace$foo$1.kt deleted file mode 100644 index 9ea8cf9f341..00000000000 --- a/compiler/testData/checkLocalVariablesTable/namespace$foo$1.kt +++ /dev/null @@ -1,7 +0,0 @@ -fun foo() { - fun bar() { - } -} - -// METHOD : invoke()V -// VARIABLE : NAME=this TYPE=Lnamespace$foo$1; INDEX=0 \ No newline at end of file diff --git a/compiler/testData/checkLocalVariablesTable/namespace$foo$a$1.kt b/compiler/testData/checkLocalVariablesTable/namespace$foo$a$1.kt deleted file mode 100644 index 8d1f49449b9..00000000000 --- a/compiler/testData/checkLocalVariablesTable/namespace$foo$a$1.kt +++ /dev/null @@ -1,8 +0,0 @@ -fun foo() { - var a = { - - } -} - -// METHOD : invoke()V -// VARIABLE : NAME=this TYPE=Lnamespace$foo$a$1; INDEX=0 diff --git a/compiler/testData/checkLocalVariablesTable/namespace$foo1$1.kt b/compiler/testData/checkLocalVariablesTable/namespace$foo1$1.kt deleted file mode 100644 index bab01efd24b..00000000000 --- a/compiler/testData/checkLocalVariablesTable/namespace$foo1$1.kt +++ /dev/null @@ -1,9 +0,0 @@ -fun foo1() { - (1..5).forEach { - println(it) - } -} - -// METHOD : invoke(I)V -// VARIABLE : NAME=this TYPE=Lnamespace$foo1$1; INDEX=0 -// VARIABLE : NAME=it TYPE=I INDEX=1 \ No newline at end of file diff --git a/compiler/testData/codegen/regressions/kt864.jet b/compiler/testData/codegen/regressions/kt864.jet index 094e1159271..3e6df2c25e3 100644 --- a/compiler/testData/codegen/regressions/kt864.jet +++ b/compiler/testData/codegen/regressions/kt864.jet @@ -9,7 +9,7 @@ World"""); fun box() : String { // TODO compiler error - // both these expressions causes java.lang.NoClassDefFoundError: collections/namespace + // both these expressions causes java.lang.NoClassDefFoundError: collections/CollectionPackage val list1 = sample().useLines{it.toArrayList()} val list2 = sample().useLines>{it.toArrayList()} diff --git a/compiler/testData/compileJavaAgainstKotlin/method/Any.java b/compiler/testData/compileJavaAgainstKotlin/method/Any.java index fb9763ee19f..f1b81d405ed 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/Any.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/Any.java @@ -1,6 +1,6 @@ class Any { { - Object r = namespace.anyany(new Object(), null); + Object r = _DefaultPackage.anyany(new Object(), null); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/ArrayOfIntArray.java b/compiler/testData/compileJavaAgainstKotlin/method/ArrayOfIntArray.java index e53cd061eca..c05d60d0acb 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/ArrayOfIntArray.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/ArrayOfIntArray.java @@ -2,6 +2,6 @@ class ArrayOfIntArray { { int[][] a = new int[0][]; - int[][] r = namespace.ohMy(a); + int[][] r = _DefaultPackage.ohMy(a); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/ArrayOfIntegerArray.java b/compiler/testData/compileJavaAgainstKotlin/method/ArrayOfIntegerArray.java index 4294970558f..0cc724cc97b 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/ArrayOfIntegerArray.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/ArrayOfIntegerArray.java @@ -2,6 +2,6 @@ class ArrayOfIntArray { { Integer[][] a = new Integer[0][]; - Integer[][] r = namespace.ohMy(a, null); + Integer[][] r = _DefaultPackage.ohMy(a, null); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/GenericArray.java b/compiler/testData/compileJavaAgainstKotlin/method/GenericArray.java index fec46f9e904..7eeb185a88b 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/GenericArray.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/GenericArray.java @@ -1,5 +1,5 @@ class GenericArray { public static void ggff() { - String[] s = namespace.ffgg(new String[0]); + String[] s = _DefaultPackage.ffgg(new String[0]); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/Hello.java b/compiler/testData/compileJavaAgainstKotlin/method/Hello.java index 8b2af4171aa..24288249af3 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/Hello.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/Hello.java @@ -1,6 +1,6 @@ class Hello { public static void xx() { - String s = namespace.f(); + String s = _DefaultPackage.f(); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/Int.java b/compiler/testData/compileJavaAgainstKotlin/method/Int.java index 805aa27e075..be94af1be44 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/Int.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/Int.java @@ -1,6 +1,6 @@ class Int { { - int r = namespace.lll(1); + int r = _DefaultPackage.lll(1); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/IntArray.java b/compiler/testData/compileJavaAgainstKotlin/method/IntArray.java index e32c42f8ace..7ce5f171847 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/IntArray.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/IntArray.java @@ -1,6 +1,6 @@ class IntArray { { - int[] r = namespace.doNothing(new int[0], null); + int[] r = _DefaultPackage.doNothing(new int[0], null); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/IntWithDefault.java b/compiler/testData/compileJavaAgainstKotlin/method/IntWithDefault.java index cc2b01c1703..76512eee587 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/IntWithDefault.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/IntWithDefault.java @@ -1,6 +1,6 @@ class IntWithDefault { { - int r = namespace.www(1); + int r = _DefaultPackage.www(1); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/IntegerArray.java b/compiler/testData/compileJavaAgainstKotlin/method/IntegerArray.java index 3f73cc43ca1..e36244fcab3 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/IntegerArray.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/IntegerArray.java @@ -1,6 +1,6 @@ class IntArray { { - Integer[] r = namespace.doNothing(new Integer[0], null); + Integer[] r = _DefaultPackage.doNothing(new Integer[0], null); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/ListOfInt.java b/compiler/testData/compileJavaAgainstKotlin/method/ListOfInt.java index ed085a154c5..3b7a16b00f2 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/ListOfInt.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/ListOfInt.java @@ -5,7 +5,7 @@ class ListOfInt { public static void hhh() { List list = new ArrayList(); - List r = namespace.ggg(list); + List r = _DefaultPackage.ggg(list); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/ListOfString.java b/compiler/testData/compileJavaAgainstKotlin/method/ListOfString.java index 371600f2eba..5c42ac0e651 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/ListOfString.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/ListOfString.java @@ -4,6 +4,6 @@ import java.util.ArrayList; class ListString { public static void gg() { List list = new ArrayList(); - namespace.ff(list); + _DefaultPackage.ff(list); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/ListOfT.java b/compiler/testData/compileJavaAgainstKotlin/method/ListOfT.java index 6eda19ba8b4..da354824513 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/ListOfT.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/ListOfT.java @@ -5,7 +5,7 @@ class ListOfT { public static void check() { List list = new ArrayList(); - List r = namespace.listOfT(list); + List r = _DefaultPackage.listOfT(list); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/MapOfKString.java b/compiler/testData/compileJavaAgainstKotlin/method/MapOfKString.java index fb107e4f9be..90127d98c4e 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/MapOfKString.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/MapOfKString.java @@ -6,6 +6,6 @@ class MapOfKString { public static void gfgdgfg() { Map map = new HashMap(); - Map r = namespace.fff(map); + Map r = _DefaultPackage.fff(map); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/MapOfStringIntQ.java b/compiler/testData/compileJavaAgainstKotlin/method/MapOfStringIntQ.java index 47714ce496f..668b766946b 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/MapOfStringIntQ.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/MapOfStringIntQ.java @@ -6,6 +6,6 @@ class MapOfKString { public static void gfgdgfg() { Map map = new HashMap(); - Map r = namespace.fff(map); + Map r = _DefaultPackage.fff(map); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/QExtendsListString.java b/compiler/testData/compileJavaAgainstKotlin/method/QExtendsListString.java index 26ec2aea4a4..41bc2673345 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/QExtendsListString.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/QExtendsListString.java @@ -2,6 +2,6 @@ class Question { // id2 is to prevent java type parameter type inference static T id2(T p) { return p; } { - java.util.List s = id2(namespace.id(null)); + java.util.List s = id2(_DefaultPackage.id(null)); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/QExtendsString.java b/compiler/testData/compileJavaAgainstKotlin/method/QExtendsString.java index aaf7c3a2734..7cf1bb1f155 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/QExtendsString.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/QExtendsString.java @@ -2,6 +2,6 @@ class Question { // id2 is to prevent java type parameter type inference static T id2(T p) { return p; } { - String s = id2(namespace.id(null)); + String s = id2(_DefaultPackage.id(null)); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/Vararg.java b/compiler/testData/compileJavaAgainstKotlin/method/Vararg.java index c40d5079407..32db41f15b1 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/Vararg.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/Vararg.java @@ -4,6 +4,6 @@ import java.util.ArrayList; class Vararg { { List list = new ArrayList(); - List r = namespace.gg(list, 3, 4, 5, 6); + List r = _DefaultPackage.gg(list, 3, 4, 5, 6); } } diff --git a/compiler/testData/compileJavaAgainstKotlin/method/Void.java b/compiler/testData/compileJavaAgainstKotlin/method/Void.java index 67e3ab812e3..830e47e685d 100644 --- a/compiler/testData/compileJavaAgainstKotlin/method/Void.java +++ b/compiler/testData/compileJavaAgainstKotlin/method/Void.java @@ -1,5 +1,5 @@ class Void { { - namespace.f(); + _DefaultPackage.f(); } } diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/extentionFun.kt b/compiler/testData/writeFlags/function/deprecatedFlag/extentionFun.kt index 46fe7bb3e85..5e508896eaa 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/extentionFun.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/extentionFun.kt @@ -3,5 +3,5 @@ class MyClass() { } deprecated("") fun MyClass.test() {} // TESTED_OBJECT_KIND: function -// TESTED_OBJECTS: namespace, test +// TESTED_OBJECTS: _DefaultPackage, test // FLAGS: ACC_DEPRECATED, ACC_PUBLIC, ACC_FINAL, ACC_STATIC diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/topLevelFun.kt b/compiler/testData/writeFlags/function/deprecatedFlag/topLevelFun.kt index 21e4dad2822..895986d4037 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/topLevelFun.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/topLevelFun.kt @@ -1,5 +1,5 @@ deprecated("") fun test() {} // TESTED_OBJECT_KIND: function -// TESTED_OBJECTS: namespace, test +// TESTED_OBJECTS: _DefaultPackage, test // FLAGS: ACC_DEPRECATED, ACC_PUBLIC, ACC_FINAL, ACC_STATIC diff --git a/compiler/testData/writeFlags/property/deprecatedFlag/topLevelProperty.kt b/compiler/testData/writeFlags/property/deprecatedFlag/topLevelProperty.kt index 39623ba89b6..7fa1884feea 100644 --- a/compiler/testData/writeFlags/property/deprecatedFlag/topLevelProperty.kt +++ b/compiler/testData/writeFlags/property/deprecatedFlag/topLevelProperty.kt @@ -1,5 +1,5 @@ deprecated("") val test: Int = 0 // TESTED_OBJECT_KIND: property -// TESTED_OBJECTS: namespace, test +// TESTED_OBJECTS: _DefaultPackage, test // FLAGS: ACC_DEPRECATED, ACC_FINAL, ACC_STATIC diff --git a/compiler/testData/writeSignature/ArrayOfCharSequence.kt b/compiler/testData/writeSignature/ArrayOfCharSequence.kt index 3083aaf131c..2ac7765dfe5 100644 --- a/compiler/testData/writeSignature/ArrayOfCharSequence.kt +++ b/compiler/testData/writeSignature/ArrayOfCharSequence.kt @@ -1,6 +1,6 @@ fun never(): Array = throw Exception() -// method: namespace::never +// method: _DefaultPackage::never // jvm signature: ()[Ljava/lang/CharSequence; // generic signature: null // kotlin signature: ()[Mjava/lang/CharSequence; // TODO: need to skip kotlin signature diff --git a/compiler/testData/writeSignature/ArrayOfInt.kt b/compiler/testData/writeSignature/ArrayOfInt.kt index 934bbb102d6..cba50792681 100644 --- a/compiler/testData/writeSignature/ArrayOfInt.kt +++ b/compiler/testData/writeSignature/ArrayOfInt.kt @@ -1,6 +1,6 @@ fun never(): Array = throw Exception() -// method: namespace::never +// method: _DefaultPackage::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/Comparable.kt b/compiler/testData/writeSignature/Comparable.kt index ba6e375cc09..653c70eb429 100644 --- a/compiler/testData/writeSignature/Comparable.kt +++ b/compiler/testData/writeSignature/Comparable.kt @@ -1,6 +1,6 @@ fun cc(): Comparable? = null -// method: namespace::cc +// method: _DefaultPackage::cc // jvm signature: ()Ljava/lang/Comparable; // generic signature: ()Ljava/lang/Comparable; // kotlin signature: ()?Ljava/lang/Comparable; diff --git a/compiler/testData/writeSignature/Int.kt b/compiler/testData/writeSignature/Int.kt index 7b92774953a..668aa058899 100644 --- a/compiler/testData/writeSignature/Int.kt +++ b/compiler/testData/writeSignature/Int.kt @@ -1,6 +1,6 @@ fun key(): Int = throw Exception() -// method: namespace::key +// method: _DefaultPackage::key // jvm signature: ()I // generic signature: null // kotlin signature: ()I // TODO: make null diff --git a/compiler/testData/writeSignature/IntArray.kt b/compiler/testData/writeSignature/IntArray.kt index 72062baedde..977055eb575 100644 --- a/compiler/testData/writeSignature/IntArray.kt +++ b/compiler/testData/writeSignature/IntArray.kt @@ -1,6 +1,6 @@ fun never(): IntArray = throw Exception() -// method: namespace::never +// method: _DefaultPackage::never // jvm signature: ()[I // generic signature: null // kotlin signature: ()[I // TODO: need to skip kotlin signature diff --git a/compiler/testData/writeSignature/IntQ.kt b/compiler/testData/writeSignature/IntQ.kt index 9f1c64ad65d..46cdeb9e148 100644 --- a/compiler/testData/writeSignature/IntQ.kt +++ b/compiler/testData/writeSignature/IntQ.kt @@ -1,6 +1,6 @@ fun sometimes(): Int? = null -// method: namespace::sometimes +// method: _DefaultPackage::sometimes // 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/ListOfCharSequence.kt b/compiler/testData/writeSignature/ListOfCharSequence.kt index 7845e8ce088..6ab20326c9b 100644 --- a/compiler/testData/writeSignature/ListOfCharSequence.kt +++ b/compiler/testData/writeSignature/ListOfCharSequence.kt @@ -1,7 +1,7 @@ fun foo(p: List) = 1 -// method: namespace::foo +// method: _DefaultPackage::foo // jvm signature: (Ljava/util/List;)I // generic signature: (Ljava/util/List<+Ljava/lang/CharSequence;>;)I // kotlin signature: (Ljet/List;)I // TODO: skip Kotlin signature diff --git a/compiler/testData/writeSignature/ListOfStar.kt b/compiler/testData/writeSignature/ListOfStar.kt index 460c50173ad..a13f6e6e7fd 100644 --- a/compiler/testData/writeSignature/ListOfStar.kt +++ b/compiler/testData/writeSignature/ListOfStar.kt @@ -1,7 +1,7 @@ fun listOfStar(): List<*> = throw Exception() -// method: namespace::listOfStar +// method: _DefaultPackage::listOfStar // jvm signature: ()Ljava/util/List; // generic signature: ()Ljava/util/List; // kotlin signature: ()Ljet/List; diff --git a/compiler/testData/writeSignature/MapEntry.kt b/compiler/testData/writeSignature/MapEntry.kt index 472593790bc..8f935caf5c0 100644 --- a/compiler/testData/writeSignature/MapEntry.kt +++ b/compiler/testData/writeSignature/MapEntry.kt @@ -1,6 +1,6 @@ fun getEntry(): jet.Map.Entry? = null -// method: namespace::getEntry +// method: _DefaultPackage::getEntry // jvm signature: ()Ljava/util/Map$Entry; // generic signature: ()Ljava/util/Map$Entry; // kotlin signature: ()?Ljet/Map.Entry; diff --git a/compiler/testData/writeSignature/MutableMapEntry.kt b/compiler/testData/writeSignature/MutableMapEntry.kt index 6f1a31ba6de..b7128c313c0 100644 --- a/compiler/testData/writeSignature/MutableMapEntry.kt +++ b/compiler/testData/writeSignature/MutableMapEntry.kt @@ -1,6 +1,6 @@ fun getEntry(): jet.MutableMap.MutableEntry? = null -// method: namespace::getEntry +// method: _DefaultPackage::getEntry // jvm signature: ()Ljava/util/Map$Entry; // generic signature: ()Ljava/util/Map$Entry; // kotlin signature: ()?Ljet/MutableMap.MutableEntry; diff --git a/compiler/testData/writeSignature/NonGeneric.kt b/compiler/testData/writeSignature/NonGeneric.kt index cd54d24b569..354dde8495b 100644 --- a/compiler/testData/writeSignature/NonGeneric.kt +++ b/compiler/testData/writeSignature/NonGeneric.kt @@ -1,6 +1,6 @@ fun foo() = 1 -// method: namespace::foo +// method: _DefaultPackage::foo // jvm signature: ()I // generic signature: null // kotlin signature: ()I // TODO: need to skip kotlin signature diff --git a/compiler/testData/writeSignature/Nothing.kt b/compiler/testData/writeSignature/Nothing.kt index f2f54873efa..dcd77e541f7 100644 --- a/compiler/testData/writeSignature/Nothing.kt +++ b/compiler/testData/writeSignature/Nothing.kt @@ -1,6 +1,6 @@ fun nothing(): Nothing = throw Exception() -// method: namespace::nothing +// method: _DefaultPackage::nothing // jvm signature: ()V // generic signature: null // kotlin signature: ()Ljet/Nothing; diff --git a/compiler/testData/writeSignature/NothingQ.kt b/compiler/testData/writeSignature/NothingQ.kt index 7a9422dc082..bcd06c3e2e4 100644 --- a/compiler/testData/writeSignature/NothingQ.kt +++ b/compiler/testData/writeSignature/NothingQ.kt @@ -1,6 +1,6 @@ fun nothingq(): Nothing? = null -// method: namespace::nothingq +// method: _DefaultPackage::nothingq // jvm signature: ()Ljava/lang/Object; // generic signature: null // kotlin signature: ()?Ljet/Nothing; diff --git a/compiler/testData/writeSignature/VarargCharSequence.kt b/compiler/testData/writeSignature/VarargCharSequence.kt index fd41e019ce8..4213e4da4cc 100644 --- a/compiler/testData/writeSignature/VarargCharSequence.kt +++ b/compiler/testData/writeSignature/VarargCharSequence.kt @@ -1,6 +1,6 @@ fun foo(vararg tail: java.lang.CharSequence) = 1 -// method: namespace::foo +// method: _DefaultPackage::foo // jvm signature: ([Ljava/lang/CharSequence;)I // generic signature: null // kotlin signature: ([Mjava/lang/CharSequence;)I // TODO: need to skip kotlin signature diff --git a/compiler/testData/writeSignature/VarargGeneric.kt b/compiler/testData/writeSignature/VarargGeneric.kt index 91385ae11e9..325795e5ffb 100644 --- a/compiler/testData/writeSignature/VarargGeneric.kt +++ b/compiler/testData/writeSignature/VarargGeneric.kt @@ -1,6 +1,6 @@ fun

foo(vararg tail: P) = 1 -// method: namespace::foo +// method: _DefaultPackage::foo // jvm signature: ([Ljava/lang/Object;)I // generic signature: ([TP;)I // kotlin signature: ([TP;)I diff --git a/compiler/testData/writeSignature/declarationSiteVariance/FunctionTwoTypeParameters.kt b/compiler/testData/writeSignature/declarationSiteVariance/FunctionTwoTypeParameters.kt index 227a56956c4..13f9ab8d7a3 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/FunctionTwoTypeParameters.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/FunctionTwoTypeParameters.kt @@ -4,7 +4,7 @@ class X fun f(m: M): M = throw Exception() -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: (LM;)LM; // generic signature: (LM<-LX;+LX;>;)LM; // kotlin signature: (LM;)LM; diff --git a/compiler/testData/writeSignature/declarationSiteVariance/InInInPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/InInInPosition.kt index 8e49e46ef73..88136cf30a1 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/InInInPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/InInInPosition.kt @@ -2,7 +2,7 @@ class In fun f(p: In) {} -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: (LIn;)V // generic signature: (LIn<-Ljava/lang/String;>;)V // kotlin signature: (LIn;)V diff --git a/compiler/testData/writeSignature/declarationSiteVariance/InInOutPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/InInOutPosition.kt index 80387fe396b..52c7afb0421 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/InInOutPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/InInOutPosition.kt @@ -2,7 +2,7 @@ class In fun f(): In = throw Exception() -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: ()LIn; // generic signature: ()LIn; // kotlin signature: ()LIn; diff --git a/compiler/testData/writeSignature/declarationSiteVariance/InOfInInInPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/InOfInInInPosition.kt index c2a13fa3d99..c46e4311c96 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/InOfInInInPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/InOfInInInPosition.kt @@ -3,7 +3,7 @@ class X fun f(p: In>) {} -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: (LIn;)V // generic signature: (LIn<-LIn<-LX;>;>;)V // kotlin signature: (LIn;>;)V diff --git a/compiler/testData/writeSignature/declarationSiteVariance/InOfInInOutPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/InOfInInOutPosition.kt index 63a09b31970..82c1113452a 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/InOfInInOutPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/InOfInInOutPosition.kt @@ -3,7 +3,7 @@ class X fun f(): In> = throw Exception() -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: ()LIn; // generic signature: ()LIn;>; // kotlin signature: ()LIn;>; diff --git a/compiler/testData/writeSignature/declarationSiteVariance/InOfOutInInPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/InOfOutInInPosition.kt index 2a761e0d90c..345de1f7be1 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/InOfOutInInPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/InOfOutInInPosition.kt @@ -4,7 +4,7 @@ class X fun f(p: In>) {} -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: (LIn;)V // generic signature: (LIn<-LOut<+LX;>;>;)V // kotlin signature: (LIn;>;)V diff --git a/compiler/testData/writeSignature/declarationSiteVariance/InOfOutInOutPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/InOfOutInOutPosition.kt index 7eaeb69102f..c19d6340436 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/InOfOutInOutPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/InOfOutInOutPosition.kt @@ -4,7 +4,7 @@ class X fun f(): In> = throw Exception() -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: ()LIn; // generic signature: ()LIn;>; // kotlin signature: ()LIn;>; diff --git a/compiler/testData/writeSignature/declarationSiteVariance/OutInInPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/OutInInPosition.kt index 893f83fa7c6..b10bc1320a1 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/OutInInPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/OutInInPosition.kt @@ -1,6 +1,6 @@ fun f(p: List) {} -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: (Ljava/util/List;)V // generic signature: (Ljava/util/List<+Ljava/lang/String;>;)V // kotlin signature: (Ljet/List;)V diff --git a/compiler/testData/writeSignature/declarationSiteVariance/OutInOutPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/OutInOutPosition.kt index fc6a3935869..48dbfe2fc7a 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/OutInOutPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/OutInOutPosition.kt @@ -1,6 +1,6 @@ fun f(): List = throw Exception() -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: ()Ljava/util/List; // generic signature: ()Ljava/util/List; // kotlin signature: ()Ljet/List; diff --git a/compiler/testData/writeSignature/declarationSiteVariance/OutOfInInInPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/OutOfInInInPosition.kt index fcc1345b7e9..c1dd6397240 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/OutOfInInInPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/OutOfInInInPosition.kt @@ -4,7 +4,7 @@ class X fun f(p: Out>) {} -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: (LOut;)V // generic signature: (LOut<+LIn<-LX;>;>;)V // kotlin signature: (LOut;>;)V diff --git a/compiler/testData/writeSignature/declarationSiteVariance/OutOfInInOutPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/OutOfInInOutPosition.kt index ca1b8126b6e..ce95b2a8d25 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/OutOfInInOutPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/OutOfInInOutPosition.kt @@ -4,7 +4,7 @@ class X fun f(): Out> = throw Exception() -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: ()LOut; // generic signature: ()LOut;>; // kotlin signature: ()LOut;>; diff --git a/compiler/testData/writeSignature/declarationSiteVariance/OutOfOutInInPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/OutOfOutInInPosition.kt index 601a9cde2d6..37ad7699b9d 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/OutOfOutInInPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/OutOfOutInInPosition.kt @@ -3,7 +3,7 @@ class X fun f(p: Out>) {} -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: (LOut;)V // generic signature: (LOut<+LOut<+LX;>;>;)V // kotlin signature: (LOut;>;)V diff --git a/compiler/testData/writeSignature/declarationSiteVariance/OutOfOutInOutPosition.kt b/compiler/testData/writeSignature/declarationSiteVariance/OutOfOutInOutPosition.kt index 3f3b4769559..c09e52a3c02 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/OutOfOutInOutPosition.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/OutOfOutInOutPosition.kt @@ -13,7 +13,7 @@ class X // thus removing the wildcard would be restricting the use of the return value of the method, and we don't want do this. fun f(): Out> = throw Exception() -// method: namespace::f +// method: _DefaultPackage::f // jvm signature: ()LOut; // generic signature: ()LOut;>; // kotlin signature: ()LOut;>; diff --git a/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterIn.kt b/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterIn.kt index 7415426e435..6327658fdb3 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterIn.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterIn.kt @@ -3,7 +3,7 @@ class X val p: M = throw Exception() -// method: namespace::getP +// method: _DefaultPackage::getP // jvm signature: ()LM; // generic signature: ()LM; // kotlin signature: null \ No newline at end of file diff --git a/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterOut.kt b/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterOut.kt index 773740fdc8c..147247e86c0 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterOut.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterOut.kt @@ -3,7 +3,7 @@ class X val p: M = throw Exception() -// method: namespace::getP +// method: _DefaultPackage::getP // jvm signature: ()LM; // generic signature: ()LM; // kotlin signature: null diff --git a/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterTwoParams.kt b/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterTwoParams.kt index fec368b1f61..c331e32e282 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterTwoParams.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/PropertyGetterTwoParams.kt @@ -3,7 +3,7 @@ class X val p: M = throw Exception() -// method: namespace::getP +// method: _DefaultPackage::getP // jvm signature: ()LM; // generic signature: ()LM; // kotlin signature: null diff --git a/compiler/testData/writeSignature/declarationSiteVariance/PropertySetterIn.kt b/compiler/testData/writeSignature/declarationSiteVariance/PropertySetterIn.kt index a164bdd4515..49a3778204f 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/PropertySetterIn.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/PropertySetterIn.kt @@ -3,7 +3,7 @@ class X var p: M = throw Exception() -// method: namespace::setP +// method: _DefaultPackage::setP // jvm signature: (LM;)V // generic signature: (LM<-LX;>;)V // kotlin signature: null \ No newline at end of file diff --git a/compiler/testData/writeSignature/declarationSiteVariance/PropertySetterOut.kt b/compiler/testData/writeSignature/declarationSiteVariance/PropertySetterOut.kt index b88b0cae2fb..424cf8a5d55 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/PropertySetterOut.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/PropertySetterOut.kt @@ -3,7 +3,7 @@ class X var p: M = throw Exception() -// method: namespace::setP +// method: _DefaultPackage::setP // jvm signature: (LM;)V // generic signature: (LM<+LX;>;)V // kotlin signature: null diff --git a/compiler/testData/writeSignature/jlString.kt b/compiler/testData/writeSignature/jlString.kt index e51995cd2d1..367e71408da 100644 --- a/compiler/testData/writeSignature/jlString.kt +++ b/compiler/testData/writeSignature/jlString.kt @@ -1,6 +1,6 @@ fun string(): java.lang.String = throw Exception() -// method: namespace::string +// method: _DefaultPackage::string // jvm signature: ()Ljava/lang/String; // generic signature: null // kotlin signature: ()Mjava/lang/String; diff --git a/compiler/tests/org/jetbrains/jet/PackageClassNameTest.java b/compiler/tests/org/jetbrains/jet/PackageClassNameTest.java new file mode 100644 index 00000000000..a5d003f02b7 --- /dev/null +++ b/compiler/tests/org/jetbrains/jet/PackageClassNameTest.java @@ -0,0 +1,104 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.Name; +import org.junit.Test; + +import static junit.framework.Assert.assertEquals; +import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.*; + +public class PackageClassNameTest { + + @Test + public void testPackageName1() { + doTest("kotlin", "KotlinPackage", "_DefaultPackage"); + } + + @Test + public void testPackageName2() { + doTest("kotlin.io", "IoPackage", "KotlinPackage"); + } + + @Test + public void testPackageName3() { + doTest("kotlin.io.foo", "FooPackage", "IoPackage"); + } + + @Test + public void testPackageName4() { + doTest("kotlinTest.ioTest", "IoTestPackage", "KotlinTestPackage"); + } + + @Test + public void testPackageName5() { + doTest(FqName.ROOT, "_DefaultPackage", null); + } + + @Test + public void testPackageName6() { + doTest(FqName.ROOT.child(Name.identifier("kotlin")), "KotlinPackage", "_DefaultPackage"); + } + + @Test + public void testIsPackageClass1() { + doTestIsPackageClass("", true); + } + + @Test + public void testIsPackageClass2() { + doTestIsPackageClass("kotlin", false); + } + + @Test + public void testIsPackageClass3() { + doTestIsPackageClass("kotlin.KotlinPackage", true); + } + + @Test + public void testIsPackageClass4() { + doTestIsPackageClass("kotlin.test.SomeClass", false); + } + + @Test + public void testIsPackageClass5() { + doTestIsPackageClass("kotlin.io.IoPackage", true); + } + + @Test + public void testInnerIsPackage() { + doTestIsPackageClass("kotlin.io.IoPackage$Foo", false); + } + + private void doTest(@NotNull String name, @NotNull String expectedForChild, @Nullable String expectedForParent) { + doTest(new FqName(name), expectedForChild, expectedForParent); + } + + private void doTest(@NotNull FqName name, @NotNull String expectedForChild, @Nullable String expectedForParent) { + assertEquals("Wrong result for child [" + name + "].", expectedForChild, getPackageClassName(name)); + if (expectedForParent != null) { + assertEquals("Wrong result for parent [" + name + "].", expectedForParent, getPackageClassName(name.parent())); + } + } + + private void doTestIsPackageClass(String testedName, boolean expected) { + assertEquals("Wrong result for [" + testedName + "].", expected, isPackageClass(new FqName(testedName))); + } +} diff --git a/compiler/tests/org/jetbrains/jet/asJava/KotlinLightClassTest.java b/compiler/tests/org/jetbrains/jet/asJava/KotlinLightClassTest.java index 9fa05063261..7827b49b220 100644 --- a/compiler/tests/org/jetbrains/jet/asJava/KotlinLightClassTest.java +++ b/compiler/tests/org/jetbrains/jet/asJava/KotlinLightClassTest.java @@ -32,8 +32,10 @@ import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.config.CommonConfigurationKeys; import org.jetbrains.jet.config.CompilerConfiguration; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment; import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; +import org.jetbrains.jet.lang.resolve.name.FqName; import java.io.File; import java.util.Arrays; @@ -126,7 +128,7 @@ public abstract class KotlinLightClassTest extends KotlinTestWithEnvironment { } public void testPackage() throws Exception { - checkModifiers("test.namespace", PUBLIC, FINAL); + checkModifiers("test." + PackageClassUtils.getPackageClassName(new FqName("test")), PUBLIC, FINAL); } } diff --git a/compiler/tests/org/jetbrains/jet/cli/jvm/CliTest.java b/compiler/tests/org/jetbrains/jet/cli/jvm/CliTest.java index 4b71f40dad2..c8fde0b8c89 100644 --- a/compiler/tests/org/jetbrains/jet/cli/jvm/CliTest.java +++ b/compiler/tests/org/jetbrains/jet/cli/jvm/CliTest.java @@ -25,6 +25,8 @@ import org.jetbrains.jet.cli.common.ExitCode; import org.jetbrains.jet.cli.jvm.compiler.KotlinToJVMBytecodeCompiler; import org.jetbrains.jet.lang.parsing.JetScriptDefinition; import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.ref.JetTypeName; import org.jetbrains.jet.test.Tmpdir; @@ -101,7 +103,7 @@ public class CliTest { "-output", tmpdir.getTmpDir().getPath()}; executeCompilerCompareOutput(args); - Assert.assertTrue(new File(tmpdir.getTmpDir(), "namespace.class").isFile()); + Assert.assertTrue(new File(tmpdir.getTmpDir(), PackageClassUtils.getPackageClassName(FqName.ROOT) + ".class").isFile()); } @Test diff --git a/compiler/tests/org/jetbrains/jet/codegen/CheckLocalVariablesTableTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/CheckLocalVariablesTableTestGenerated.java index b3448798c18..426cbe4e433 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/CheckLocalVariablesTableTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/CheckLocalVariablesTableTestGenerated.java @@ -33,29 +33,29 @@ public class CheckLocalVariablesTableTestGenerated extends AbstractCheckLocalVar JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/checkLocalVariablesTable"), "kt", true); } - @TestMetadata("namespace$foo$1.kt") - public void testNamespace$foo$1() throws Exception { - doTest("compiler/testData/checkLocalVariablesTable/namespace$foo$1.kt"); - } - - @TestMetadata("namespace$foo$1$1.kt") - public void testNamespace$foo$1$1() throws Exception { - doTest("compiler/testData/checkLocalVariablesTable/namespace$foo$1$1.kt"); - } - - @TestMetadata("namespace$foo$a$1.kt") - public void testNamespace$foo$a$1() throws Exception { - doTest("compiler/testData/checkLocalVariablesTable/namespace$foo$a$1.kt"); - } - - @TestMetadata("namespace$foo1$1.kt") - public void testNamespace$foo1$1() throws Exception { - doTest("compiler/testData/checkLocalVariablesTable/namespace$foo1$1.kt"); - } - @TestMetadata("someClass.kt") public void testSomeClass() throws Exception { doTest("compiler/testData/checkLocalVariablesTable/someClass.kt"); } + @TestMetadata("_DefaultPackage$foo$1.kt") + public void test_DefaultPackage$foo$1() throws Exception { + doTest("compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$1.kt"); + } + + @TestMetadata("_DefaultPackage$foo$1$1.kt") + public void test_DefaultPackage$foo$1$1() throws Exception { + doTest("compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$1$1.kt"); + } + + @TestMetadata("_DefaultPackage$foo$a$1.kt") + public void test_DefaultPackage$foo$a$1() throws Exception { + doTest("compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo$a$1.kt"); + } + + @TestMetadata("_DefaultPackage$foo1$1.kt") + public void test_DefaultPackage$foo1$1() throws Exception { + doTest("compiler/testData/checkLocalVariablesTable/_DefaultPackage$foo1$1.kt"); + } + } diff --git a/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java index 4a58c656776..eba04a16cb6 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java @@ -17,6 +17,8 @@ package org.jetbrains.jet.codegen; import org.jetbrains.jet.ConfigurationKind; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -60,7 +62,7 @@ public class ClassGenTest extends CodegenTestCase { // System.out.println(generateToText()); final ClassFileFactory state = generateClassesInFile(); final GeneratedClassLoader loader = createClassLoader(state); - final Class aClass = loader.loadClass("namespace"); + final Class aClass = loader.loadClass(PackageClassUtils.getPackageClassName(FqName.ROOT)); assertEquals("OK", aClass.getMethod("box").invoke(null)); final Class test = loader.loadClass("Test"); diff --git a/compiler/tests/org/jetbrains/jet/codegen/GenerateNotNullAssertionsTest.java b/compiler/tests/org/jetbrains/jet/codegen/GenerateNotNullAssertionsTest.java index 14882763ef8..9928bdb3d2b 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/GenerateNotNullAssertionsTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/GenerateNotNullAssertionsTest.java @@ -29,6 +29,8 @@ import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.config.CompilerConfiguration; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import java.io.File; @@ -69,7 +71,7 @@ public class GenerateNotNullAssertionsTest extends CodegenTestCase { loadFiles("notNullAssertions/noAssertionsForKotlin.kt", "notNullAssertions/noAssertionsForKotlinMain.kt"); - assertNoIntrinsicsMethodIsCalled("namespace"); + assertNoIntrinsicsMethodIsCalled(PackageClassUtils.getPackageClassName(FqName.ROOT)); } public void testNoAssertionsForKotlinFromBinary() throws Exception { @@ -85,7 +87,7 @@ public class GenerateNotNullAssertionsTest extends CodegenTestCase { loadFile("notNullAssertions/noAssertionsForKotlinMain.kt"); - assertNoIntrinsicsMethodIsCalled("namespace"); + assertNoIntrinsicsMethodIsCalled(PackageClassUtils.getPackageClassName(FqName.ROOT)); } public void testGenerateParamAssertions() throws Exception { diff --git a/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java b/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java index c699bc0ce9f..2d531dc8c07 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java @@ -30,7 +30,8 @@ import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiFactory; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.parsing.JetParsingTest; import org.jetbrains.jet.test.TestCaseWithTmpdir; import org.jetbrains.jet.utils.ExceptionUtils; @@ -326,7 +327,7 @@ public class LineNumberTest extends TestCaseWithTmpdir { JetFile foo = createPsiFile("staticDelegate/foo.kt"); JetFile bar = createPsiFile("staticDelegate/bar.kt"); GenerationState state = GenerationUtils.compileManyFilesGetGenerationStateForTest(foo.getProject(), Arrays.asList(foo, bar)); - ClassReader reader = new ClassReader(state.getFactory().asBytes(JvmAbi.PACKAGE_CLASS + ".class")); + ClassReader reader = new ClassReader(state.getFactory().asBytes(PackageClassUtils.getPackageClassName(FqName.ROOT) + ".class")); // There must be exactly one line number attribute for each static delegate in namespace.class, and it should point to the first // line. There are two static delegates in this test, hence the [1, 1] diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractCompileKotlinAgainstKotlinTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractCompileKotlinAgainstKotlinTest.java index 167c76395b5..69f49eebdec 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractCompileKotlinAgainstKotlinTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractCompileKotlinAgainstKotlinTest.java @@ -30,6 +30,8 @@ import org.jetbrains.jet.codegen.ClassFileFactory; import org.jetbrains.jet.codegen.GenerationUtils; import org.jetbrains.jet.config.CompilerConfiguration; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.test.TestCaseWithTmpdir; import java.io.File; @@ -62,7 +64,7 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends TestCaseWit new URL[]{ aDir.toURI().toURL(), bDir.toURI().toURL() }, AbstractCompileKotlinAgainstKotlinTest.class.getClassLoader() ); - Class clazz = classLoader.loadClass("namespace"); + Class clazz = classLoader.loadClass(PackageClassUtils.getPackageClassName(FqName.ROOT)); Method main = clazz.getMethod("main", new Class[] {String[].class}); main.invoke(null, new Object[] {ArrayUtil.EMPTY_STRING_ARRAY}); } diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileEnvironmentTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileEnvironmentTest.java index a62c8030d9d..aba7f24c008 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileEnvironmentTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileEnvironmentTest.java @@ -22,6 +22,8 @@ import org.jetbrains.jet.cli.common.ExitCode; import org.jetbrains.jet.cli.jvm.K2JVMCompiler; import org.jetbrains.jet.codegen.forTestCompile.ForTestPackJdkAnnotations; import org.jetbrains.jet.codegen.forTestCompile.ForTestCompileRuntime; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.parsing.JetParsingTest; import org.junit.Assert; @@ -55,7 +57,7 @@ public class CompileEnvironmentTest extends TestCase { JarInputStream is = new JarInputStream(fileInputStream); try { final List entries = listEntries(is); - assertTrue(entries.contains("Smoke/namespace.class")); + assertTrue(entries.contains("Smoke/" + PackageClassUtils.getPackageClassName(new FqName("Smoke")) + ".class")); assertEquals(1, entries.size()); } finally { diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java index 773f72274e0..51b94df8eea 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetFromJavaDescriptorHelper.java @@ -29,8 +29,8 @@ import jet.runtime.typeinfo.JetClass; import jet.runtime.typeinfo.JetValueParameter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation; import org.jetbrains.jet.lang.resolve.java.kt.JetValueParameterAnnotation; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -57,7 +57,8 @@ class JetFromJavaDescriptorHelper { /* Will iterate through short name caches Kotlin namespaces from jar a class files will be collected from java cache Kotlin namespaces classes from sources will be collected with JetShortNamesCache.getClassesByName */ - return PsiShortNamesCache.getInstance(project).getClassesByName(JvmAbi.PACKAGE_CLASS, scope); + // TODO Collect all package classes + return PsiShortNamesCache.getInstance(project).getClassesByName("namespace", scope); } /** @@ -160,7 +161,7 @@ class JetFromJavaDescriptorHelper { FqName classFQN = new FqName(qualifiedName); - if (classFQN.shortName().toString().equals(JvmAbi.PACKAGE_CLASS)) { + if (PackageClassUtils.isPackageClass(classFQN)) { FqName classParentFQN = QualifiedNamesUtil.withoutLastSegment(classFQN); return QualifiedNamesUtil.combine(classParentFQN, Name.identifier(method.getName())); } @@ -183,7 +184,7 @@ class JetFromJavaDescriptorHelper { // Check this is top level function PsiClass containingClass = psiMethod.getContainingClass(); - if (containingClass == null || !JvmAbi.PACKAGE_CLASS.equals(containingClass.getName())) { + if (containingClass == null || !PackageClassUtils.isPackageClass(containingClass)) { continue; } diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java index 2ed1bb3bfcd..91c48d74d25 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java @@ -28,6 +28,7 @@ import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; import com.intellij.util.containers.HashSet; +import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -46,6 +47,7 @@ import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils; +import org.jetbrains.jet.plugin.caches.resolve.IDELightClassGenerationSupport; import org.jetbrains.jet.plugin.stubindex.*; import java.util.*; @@ -81,8 +83,12 @@ public class JetShortNamesCache extends PsiShortNamesCache { @Override public String[] getAllClassNames() { Collection classNames = JetShortClassNameIndex.getInstance().getAllKeys(project); + // .namespace classes can not be indexed, since they have no explicit declarations - classNames.add(JvmAbi.PACKAGE_CLASS); + IDELightClassGenerationSupport lightClassGenerationSupport = IDELightClassGenerationSupport.getInstanceForIDE(project); + Set packageClassShortNames = lightClassGenerationSupport.getAllPackageClasses(GlobalSearchScope.allScope(project)).keySet(); + classNames.addAll(packageClassShortNames); + return ArrayUtil.toStringArray(classNames); } @@ -94,11 +100,14 @@ public class JetShortNamesCache extends PsiShortNamesCache { public PsiClass[] getClassesByName(@NotNull @NonNls String name, @NotNull GlobalSearchScope scope) { List result = new ArrayList(); - if (JvmAbi.PACKAGE_CLASS.equals(name)) { - // .namespace classes can not be indexed, since they have no explicit declarations - Collection allPackageFqNames = JetPackageDeclarationIndex.getInstance().getAllKeys(project); - for (String fqName : allPackageFqNames) { - PsiClass psiClass = JavaElementFinder.getInstance(project).findClass(fqName + "." + JvmAbi.PACKAGE_CLASS, scope); + IDELightClassGenerationSupport lightClassGenerationSupport = IDELightClassGenerationSupport.getInstanceForIDE(project); + MultiMap packageClasses = lightClassGenerationSupport.getAllPackageClasses(scope); + + // .namespace classes can not be indexed, since they have no explicit declarations + Collection fqNames = packageClasses.get(name); + if (!fqNames.isEmpty()) { + for (FqName fqName : fqNames) { + PsiClass psiClass = JavaElementFinder.getInstance(project).findClass(fqName.getFqName(), scope); if (psiClass != null) { result.add(psiClass); } diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java b/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java index 12f6e12eaa5..10361ca66e6 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/resolve/IDELightClassGenerationSupport.java @@ -17,14 +17,17 @@ package org.jetbrains.jet.plugin.caches.resolve; import com.google.common.collect.Sets; +import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.asJava.LightClassConstructionContext; import org.jetbrains.jet.asJava.LightClassGenerationSupport; import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiUtil; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.plugin.stubindex.*; import org.jetbrains.jet.util.QualifiedNamesUtil; @@ -36,6 +39,10 @@ import static org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope.kotlinSour public class IDELightClassGenerationSupport extends LightClassGenerationSupport { + public static IDELightClassGenerationSupport getInstanceForIDE(@NotNull Project project) { + return (IDELightClassGenerationSupport) ServiceManager.getService(project, LightClassGenerationSupport.class); + } + private final Project project; public IDELightClassGenerationSupport(@NotNull Project project) { @@ -96,4 +103,20 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport return result; } + + @NotNull + public MultiMap getAllPackageClasses(@NotNull final GlobalSearchScope scope) { + Collection packageFqNames = JetPackageDeclarationIndex.getInstance().getAllKeys(project); + + MultiMap result = new MultiMap(); + for (String packageFqName : packageFqNames) { + Collection files = JetPackageDeclarationIndex.getInstance().get(packageFqName, project, kotlinSources(scope)); + if (!files.isEmpty()) { + FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(new FqName(packageFqName)); + result.putValue(packageClassFqName.shortName().getName(), packageClassFqName); + } + + } + return result; + } } diff --git a/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java b/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java index ace5859c40c..6d713428da7 100644 --- a/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java +++ b/idea/src/org/jetbrains/jet/plugin/editor/importOptimizer/JetImportOptimizer.java @@ -25,7 +25,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.ImportPath; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper; @@ -190,7 +190,7 @@ public class JetImportOptimizer implements ImportOptimizer { if (element instanceof JetFile) { return JetPsiUtil.getFQName((JetFile) element); } - + if (element instanceof JetSimpleNameExpression) { JetNamespaceHeader namespaceHeader = PsiTreeUtil.getParentOfType(element, JetNamespaceHeader.class); if (namespaceHeader != null) { @@ -221,7 +221,7 @@ public class JetImportOptimizer implements ImportOptimizer { return new FqName(qualifiedName); } } - + if (element instanceof PsiField) { PsiField field = (PsiField) element; @@ -260,7 +260,7 @@ public class JetImportOptimizer implements ImportOptimizer { if (memberName == null) { return null; } - if (classFQN.shortName().getName().equals(JvmAbi.PACKAGE_CLASS)) { + if (PackageClassUtils.isPackageClass(classFQN)) { return QualifiedNamesUtil.combine(classFQN.parent(), Name.identifier(memberName)); } else { diff --git a/idea/src/org/jetbrains/jet/plugin/filters/JetExceptionFilter.java b/idea/src/org/jetbrains/jet/plugin/filters/JetExceptionFilter.java index 9dc5504201e..c5a05fc77cf 100644 --- a/idea/src/org/jetbrains/jet/plugin/filters/JetExceptionFilter.java +++ b/idea/src/org/jetbrains/jet/plugin/filters/JetExceptionFilter.java @@ -26,8 +26,10 @@ import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmClassName; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.plugin.caches.resolve.IDELightClassGenerationSupport; import org.jetbrains.jet.plugin.util.DebuggerUtils; import java.util.regex.Matcher; @@ -55,10 +57,8 @@ public class JetExceptionFilter implements Filter { // fullyQualifiedName is of format "package.Class$Inner" String fullyQualifiedName = element.getClassName(); - int lastDot = fullyQualifiedName.lastIndexOf('.'); - String classNameWithInners = fullyQualifiedName.substring(lastDot + 1); // All classes except 'namespace' and its inner classes are handled correctly in the default ExceptionFilter - if (!classNameWithInners.equals(JvmAbi.PACKAGE_CLASS) && !classNameWithInners.startsWith(JvmAbi.PACKAGE_CLASS + "$")) { + if (!isPackageClassOrSubClass(fullyQualifiedName)) { return null; } @@ -74,6 +74,20 @@ public class JetExceptionFilter implements Filter { return new OpenFileHyperlinkInfo(project, virtualFile, element.getLineNumber() - 1); } + private boolean isPackageClassOrSubClass(String fqName) { + if (fqName.equals(PackageClassUtils.getPackageClassName(FqName.ROOT))) { + return true; + } + + int lastDot = fqName.lastIndexOf('.'); + String classNameWithInners = fqName.substring(lastDot + 1); + int firstDollar = classNameWithInners.indexOf('$'); + String className = firstDollar >= 0 ? classNameWithInners.substring(0, firstDollar) : classNameWithInners; + + String packageClassName = PackageClassUtils.getPackageClassName(new FqName(fqName).parent()); + return packageClassName.equals(className); + } + // Matches strings like "\tat test.namespace$foo$f$1.invoke(a.kt:3)\n" private static final Pattern STACK_TRACE_ELEMENT_PATTERN = Pattern.compile("^\\s*at\\s+(.+)\\.(.+)\\((.+):(\\d+)\\)\\s*$"); diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java index 7c8acbfa947..e9adfa0ee94 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java @@ -33,10 +33,7 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.MemberComparator; -import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; -import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; -import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; +import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.renderer.DescriptorRenderer; @@ -236,7 +233,7 @@ public class DecompiledDataFactory { } public static boolean isKotlinNamespaceClass(@NotNull PsiClass psiClass) { - if (JvmAbi.PACKAGE_CLASS.equals(psiClass.getName()) && !isKotlinClass(psiClass)) { + if (PackageClassUtils.isPackageClass(psiClass) && !isKotlinClass(psiClass)) { for (PsiMethod method : psiClass.getMethods()) { if (hasAnnotation(method, JET_METHOD)) { return true; diff --git a/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java b/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java index 8d66f50d1c8..0b92d65e132 100644 --- a/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java +++ b/idea/src/org/jetbrains/jet/plugin/run/JetRunConfigurationProducer.java @@ -29,7 +29,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiUtil; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.plugin.JetMainDetector; @@ -76,7 +76,7 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im if (JetMainDetector.hasMain(jetFile.getDeclarations())) { mySourceElement = jetFile; FqName fqName = JetPsiUtil.getFQName(jetFile); - return fqName.child(Name.identifier(JvmAbi.PACKAGE_CLASS)); + return PackageClassUtils.getPackageClassFqName(fqName); } } @@ -93,7 +93,7 @@ public class JetRunConfigurationProducer extends RuntimeConfigurationProducer im RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(module.getProject(), context); JetRunConfiguration configuration = (JetRunConfiguration) settings.getConfiguration(); configuration.setModule(module); - configuration.setName(StringUtil.trimEnd(fqName.getFqName(), "." + JvmAbi.PACKAGE_CLASS)); + configuration.setName(StringUtil.trimEnd(fqName.getFqName(), "." + PackageClassUtils.getPackageClassName(fqName))); configuration.setRunClass(fqName.getFqName()); return settings; } diff --git a/idea/testData/completion/injava/ClassFromNamespace.java b/idea/testData/completion/injava/ClassFromNamespace.java index bb59804d85c..632afe633cc 100644 --- a/idea/testData/completion/injava/ClassFromNamespace.java +++ b/idea/testData/completion/injava/ClassFromNamespace.java @@ -5,5 +5,5 @@ public class Testing { } // EXIST: ClassFromJet -// EXIST: namespace +// EXIST: SomePackage // NUMBER: 2 diff --git a/idea/testData/completion/injava/JetFunction.java b/idea/testData/completion/injava/JetFunction.java index d15719deb2e..7975b254956 100644 --- a/idea/testData/completion/injava/JetFunction.java +++ b/idea/testData/completion/injava/JetFunction.java @@ -1,6 +1,6 @@ public class Testing { public static void main(String[] args) { - kotlin.testing.namespace. + kotlin.testing.TestingPackage. } } diff --git a/idea/testData/debugger/_DefaultPackage.kt b/idea/testData/debugger/_DefaultPackage.kt new file mode 100644 index 00000000000..d5736ec1f07 --- /dev/null +++ b/idea/testData/debugger/_DefaultPackage.kt @@ -0,0 +1,3 @@ +fun foo() { + "" // _DefaultPackage +} diff --git a/idea/testData/debugger/extensionFunction.kt b/idea/testData/debugger/extensionFunction.kt index 1adeebb29f0..21c3931450e 100644 --- a/idea/testData/debugger/extensionFunction.kt +++ b/idea/testData/debugger/extensionFunction.kt @@ -4,5 +4,5 @@ class A { } fun A.foo() { - "" // a/namespace + "" // a/APackage } diff --git a/idea/testData/debugger/localFunction.kt b/idea/testData/debugger/localFunction.kt index 1be28360ce1..4f0480b9f64 100644 --- a/idea/testData/debugger/localFunction.kt +++ b/idea/testData/debugger/localFunction.kt @@ -2,7 +2,7 @@ package test fun foo(): String { fun bar(): String { - return "" // test/namespace$foo$1 + return "" // test/TestPackage$foo$1 } return bar() } diff --git a/idea/testData/debugger/multiFileNamespace/a.kt b/idea/testData/debugger/multiFileNamespace/a.kt index bfda0fef253..221bcec7c9e 100644 --- a/idea/testData/debugger/multiFileNamespace/a.kt +++ b/idea/testData/debugger/multiFileNamespace/a.kt @@ -1,5 +1,5 @@ package test fun foo() { - "" // test/namespace$src$a$ + "" // test/TestPackage$src$a$ } diff --git a/idea/testData/debugger/multiFileNamespace/b.kt b/idea/testData/debugger/multiFileNamespace/b.kt index c520966eab4..c75df1f9eb3 100644 --- a/idea/testData/debugger/multiFileNamespace/b.kt +++ b/idea/testData/debugger/multiFileNamespace/b.kt @@ -1,5 +1,5 @@ package test fun bar() { - foo(); // test/namespace$src$b$ + foo(); // test/TestPackage$src$b$ } diff --git a/idea/testData/debugger/multiFileSameName/1/a.kt b/idea/testData/debugger/multiFileSameName/1/a.kt index d2a1d13804b..f4f9168d559 100644 --- a/idea/testData/debugger/multiFileSameName/1/a.kt +++ b/idea/testData/debugger/multiFileSameName/1/a.kt @@ -1,5 +1,5 @@ package test fun foo() { - "" // test/namespace$src$a$ + "" // test/TestPackage$src$a$ } diff --git a/idea/testData/debugger/multiFileSameName/2/a.kt b/idea/testData/debugger/multiFileSameName/2/a.kt index 38abaef3704..a5e446890a0 100644 --- a/idea/testData/debugger/multiFileSameName/2/a.kt +++ b/idea/testData/debugger/multiFileSameName/2/a.kt @@ -1,5 +1,5 @@ package test fun bar() { - "" // test/namespace$src$a$ + "" // test/TestPackage$src$a$ } diff --git a/idea/testData/debugger/multiFileSameName/3/a.kt b/idea/testData/debugger/multiFileSameName/3/a.kt index 4cf355e73f3..cd9fc9de04c 100644 --- a/idea/testData/debugger/multiFileSameName/3/a.kt +++ b/idea/testData/debugger/multiFileSameName/3/a.kt @@ -1,5 +1,5 @@ package test fun baz() { - "" // test/namespace$src$a$ + "" // test/TestPackage$src$a$ } diff --git a/idea/testData/debugger/multiFileSameName/4/a.kt b/idea/testData/debugger/multiFileSameName/4/a.kt index fb4cd582855..a2f60a7c415 100644 --- a/idea/testData/debugger/multiFileSameName/4/a.kt +++ b/idea/testData/debugger/multiFileSameName/4/a.kt @@ -1,5 +1,5 @@ package test fun quux() { - "" // test/namespace$src$a$ + "" // test/TestPackage$src$a$ } diff --git a/idea/testData/debugger/namespace.kt b/idea/testData/debugger/namespace.kt deleted file mode 100644 index c9ffe948cd3..00000000000 --- a/idea/testData/debugger/namespace.kt +++ /dev/null @@ -1,3 +0,0 @@ -fun foo() { - "" // namespace -} diff --git a/idea/testData/debugger/namespaceOfPackage.kt b/idea/testData/debugger/namespaceOfPackage.kt index 6bc14d5fc27..53fdc1d89c9 100644 --- a/idea/testData/debugger/namespaceOfPackage.kt +++ b/idea/testData/debugger/namespaceOfPackage.kt @@ -1,5 +1,5 @@ package test fun foo() { - "" // test/namespace + "" // test/TestPackage } diff --git a/idea/testData/libraries/decompiled/namespace.kt b/idea/testData/libraries/decompiled/LibrariesPackage.kt similarity index 100% rename from idea/testData/libraries/decompiled/namespace.kt rename to idea/testData/libraries/decompiled/LibrariesPackage.kt diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/JetPositionManagerTest.java b/idea/tests/org/jetbrains/jet/plugin/debugger/JetPositionManagerTest.java index a3960cb8c3a..6888669770d 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/JetPositionManagerTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/JetPositionManagerTest.java @@ -95,7 +95,7 @@ public class JetPositionManagerTest extends PositionManagerTestCase { doTest(); } - public void testNamespace() { + public void test_DefaultPackage() { doTest(); } diff --git a/idea/tests/org/jetbrains/jet/plugin/filters/JetExceptionFilterTest.java b/idea/tests/org/jetbrains/jet/plugin/filters/JetExceptionFilterTest.java index 42e28e792d5..288c61b47bb 100644 --- a/idea/tests/org/jetbrains/jet/plugin/filters/JetExceptionFilterTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/filters/JetExceptionFilterTest.java @@ -28,6 +28,8 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.MultiFileTestCase; import com.intellij.testFramework.PsiTestUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.plugin.PluginTestCaseBase; import org.jetbrains.jet.utils.ExceptionUtils; @@ -103,17 +105,17 @@ public class JetExceptionFilterTest extends MultiFileTestCase { } public void testSimple() { - doTest("simple.kt", "namespace", 2); + doTest("simple.kt", PackageClassUtils.getPackageClassName(FqName.ROOT), 2); } public void testKt2489() { - doTest("a.kt", "namespace$a$f$1", 3); - doTest("main.kt", "namespace$main$f$1", 3); + doTest("a.kt", PackageClassUtils.getPackageClassName(FqName.ROOT) + "$a$f$1", 3); + doTest("main.kt", PackageClassUtils.getPackageClassName(FqName.ROOT) + "$main$f$1", 3); } public void testMultiSameName() { // The order and the exact names do matter here - doTest("1/foo.kt", "multiSameName.namespace$foo$f$1", 4); - doTest("2/foo.kt", "multiSameName.namespace$foo$f$2", 4); + doTest("1/foo.kt", "multiSameName." + PackageClassUtils.getPackageClassName(new FqName("multiSameName")) + "$foo$f$1", 4); + doTest("2/foo.kt", "multiSameName." + PackageClassUtils.getPackageClassName(new FqName("multiSameName")) + "$foo$f$2", 4); } } diff --git a/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToDecompiledLibraryTest.java b/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToDecompiledLibraryTest.java index 9909415e8d2..86d6afeeaf2 100644 --- a/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToDecompiledLibraryTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/libraries/NavigateToDecompiledLibraryTest.java @@ -43,7 +43,7 @@ public class NavigateToDecompiledLibraryTest extends AbstractNavigateToLibraryTe doTest(); } - public void testnamespace() { + public void testLibrariesPackage() { doTest(); }