From 149e70aa07cab89ad855d44c0e41abb0c0655b33 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 15 Oct 2015 18:13:04 +0300 Subject: [PATCH] Dropping package facades: - light classes: do not generate light class for package facade - drop package facades as multifile classes compilation mode support - get rid of some additional package facade fqName usages - update tests for light classes --- .../codegen/CodegenFileClassesProvider.kt | 13 +--- .../kotlin/codegen/KotlinCodegenFacade.java | 14 ++-- .../kotlin/codegen/SamWrapperCodegen.java | 7 +- .../kotlin/codegen/state/GenerationState.kt | 4 +- .../kotlin/codegen/state/JetTypeMapper.java | 20 +++--- .../arguments/K2JVMCompilerArguments.java | 3 - .../jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt | 1 - .../CliLightClassGenerationSupport.kt | 11 --- .../compiler/KotlinToJVMBytecodeCompiler.java | 4 +- .../cli/jvm/config/JVMConfigurationKeys.java | 2 - .../kotlin/fileClasses/JvmFileClassUtil.kt | 9 --- .../kotlin/asJava/JavaElementFinder.java | 6 -- .../asJava/KotlinJavaFileStubProvider.java | 1 - .../asJava/KotlinLightClassForFacade.kt | 18 ----- .../asJava/LightClassGenerationSupport.java | 3 - .../kotlin/asJava/StubClassBuilder.java | 20 +----- .../kotlin/codegen/AnnotationGenTest.java | 4 -- .../kotlin/codegen/CodegenTestUtil.java | 1 - ...eticMethodForAnnotatedPropertyGenTest.java | 12 +--- .../kotlin/name/PackageClassNameTest.java | 68 ------------------- .../kotlin/load/kotlin/PackageClassUtils.java | 2 +- .../resolve/IDELightClassGenerationSupport.kt | 35 ---------- .../internal/KotlinBytecodeToolWindow.java | 1 - .../kotlin/idea/run/JetRunConfiguration.java | 3 +- .../file.kt | 0 .../packageClassTwoFiles/file1.kt | 5 -- .../packageClassTwoFiles/file2.kt | 5 -- idea/testData/fakeLightClassForPackage/1.kt | 3 - idea/testData/fakeLightClassForPackage/2.kt | 3 - .../kotlinTopLevelMethodUsages.2.java | 6 +- .../kotlinTopLevelMethodUsages.3.java | 11 --- .../kotlinTopLevelPropertyUsages.2.java | 8 +-- .../kotlinTopLevelPropertyUsages.3.java | 11 --- .../unusedSymbol/property/usedInJava.java | 4 +- .../AssignMappedKotlinType.java | 22 +++--- .../JvmOverloadsFunctions.java | 2 +- .../TopLevelFunctionInDataFlowInspection.java | 4 +- .../UsingKotlinPackageDeclarations.java | 8 +-- .../asJava/FakeLightClassForPackageTest.java | 62 ----------------- .../LightClassesClasspathSortingTest.kt | 8 +-- .../NavigateToDecompiledLibraryTest.java | 4 -- .../idea/filters/JetExceptionFilterTest.kt | 5 +- 42 files changed, 60 insertions(+), 373 deletions(-) delete mode 100644 compiler/tests/org/jetbrains/kotlin/name/PackageClassNameTest.java rename idea/testData/decompiler/lightClassesOrder/{packageClassOneFile => fileClass}/file.kt (100%) delete mode 100644 idea/testData/decompiler/lightClassesOrder/packageClassTwoFiles/file1.kt delete mode 100644 idea/testData/decompiler/lightClassesOrder/packageClassTwoFiles/file2.kt delete mode 100644 idea/testData/fakeLightClassForPackage/1.kt delete mode 100644 idea/testData/fakeLightClassForPackage/2.kt delete mode 100644 idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsages.3.java delete mode 100644 idea/testData/findUsages/kotlin/findPropertyUsages/kotlinTopLevelPropertyUsages.3.java delete mode 100644 idea/tests/org/jetbrains/kotlin/asJava/FakeLightClassForPackageTest.java diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CodegenFileClassesProvider.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/CodegenFileClassesProvider.kt index 3f10d4b3d01..e0bc97fbcf1 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CodegenFileClassesProvider.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CodegenFileClassesProvider.kt @@ -21,14 +21,7 @@ import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.fileClasses.JvmFileClassesProvider import org.jetbrains.kotlin.psi.JetFile -public class CodegenFileClassesProvider(private val packageFacadesAsMultifileClasses: Boolean) : JvmFileClassesProvider { - override public fun getFileClassInfo(file: JetFile): JvmFileClassInfo { - val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file) - if (packageFacadesAsMultifileClasses && !fileClassInfo.withJvmMultifileClass) { - return JvmFileClassUtil.getMultifilePackageFacadePartInfo(file) - } - else { - return fileClassInfo - } - } +public class CodegenFileClassesProvider : JvmFileClassesProvider { + override public fun getFileClassInfo(file: JetFile): JvmFileClassInfo = + JvmFileClassUtil.getFileClassInfoNoResolve(file) } \ No newline at end of file diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/KotlinCodegenFacade.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/KotlinCodegenFacade.java index c93011e840f..8485f9dbe85 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/KotlinCodegenFacade.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/KotlinCodegenFacade.java @@ -61,7 +61,7 @@ public class KotlinCodegenFacade { ProgressIndicatorAndCompilationCanceledStatus.checkCanceled(); - MultiMap filesInPackageClasses = new MultiMap(); + MultiMap filesInPackages = new MultiMap(); MultiMap filesInMultifileClasses = new MultiMap(); for (JetFile file : state.getFiles()) { @@ -72,14 +72,8 @@ public class KotlinCodegenFacade { if (fileClassInfo.getWithJvmMultifileClass()) { filesInMultifileClasses.putValue(fileClassInfo.getFacadeClassFqName(), file); } - - if (state.getPackageFacadesAsMultifileClasses()) { - if (!fileClassInfo.getWithJvmMultifileClass()) { - filesInMultifileClasses.putValue(PackageClassUtils.getPackageClassFqName(file.getPackageFqName()), file); - } - } else { - filesInPackageClasses.putValue(file.getPackageFqName(), file); + filesInPackages.putValue(file.getPackageFqName(), file); } } @@ -90,9 +84,9 @@ public class KotlinCodegenFacade { } Set packagesWithObsoleteParts = new HashSet(state.getPackagesWithObsoleteParts()); - for (FqName packageFqName : Sets.union(packagesWithObsoleteParts, filesInPackageClasses.keySet())) { + for (FqName packageFqName : Sets.union(packagesWithObsoleteParts, filesInPackages.keySet())) { ProgressIndicatorAndCompilationCanceledStatus.checkCanceled(); - generatePackage(state, packageFqName, filesInPackageClasses.get(packageFqName), errorHandler); + generatePackage(state, packageFqName, filesInPackages.get(packageFqName), errorHandler); } ProgressIndicatorAndCompilationCanceledStatus.checkCanceled(); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java index ae3d9c637e5..a54ff63c587 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.codegen.state.JetTypeMapper; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl; import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl; +import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor; import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; @@ -169,16 +170,16 @@ public class SamWrapperCodegen { @NotNull private FqName getWrapperName(@NotNull JetFile containingFile) { - FqName packageClassFqName = PackageClassUtils.getPackageClassFqName(containingFile.getPackageFqName()); + FqName fileClassFqName = JvmFileClassUtil.getFileClassInfoNoResolve(containingFile).getFileClassFqName(); JavaClassDescriptor descriptor = samType.getJavaClassDescriptor(); int hash = PackagePartClassUtils.getPathHashCode(containingFile.getVirtualFile()) * 31 + DescriptorUtils.getFqNameSafe(descriptor).hashCode(); String shortName = String.format( "%s$sam$%s$%08x", - packageClassFqName.shortName().asString(), + fileClassFqName.shortName().asString(), descriptor.getName().asString(), hash ); - return packageClassFqName.parent().child(Name.identifier(shortName)); + return fileClassFqName.parent().child(Name.identifier(shortName)); } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index 19165f2c78d..9f5cda47f2c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.codegen.optimization.OptimizationClassBuilderFactory import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.diagnostics.DiagnosticSink -import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents import org.jetbrains.kotlin.modules.TargetId import org.jetbrains.kotlin.name.FqName @@ -53,7 +52,6 @@ public class GenerationState @JvmOverloads constructor( disableInline: Boolean = false, disableOptimization: Boolean = false, public val useTypeTableInSerializer: Boolean = false, - public val packageFacadesAsMultifileClasses: Boolean = false, public val diagnostics: DiagnosticSink = DiagnosticSink.DO_NOTHING, public val packagesWithObsoleteParts: Collection = emptySet(), public val obsoleteMultifileClasses: Collection = emptySet(), @@ -86,7 +84,7 @@ public class GenerationState @JvmOverloads constructor( } } - public val fileClassesProvider: CodegenFileClassesProvider = CodegenFileClassesProvider(packageFacadesAsMultifileClasses) + public val fileClassesProvider: CodegenFileClassesProvider = CodegenFileClassesProvider() private fun getIncrementalCacheForThisTarget() = if (incrementalCompilationComponents != null && targetId != null) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java index 91133c64a7a..56b6798ee67 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/JetTypeMapper.java @@ -43,7 +43,6 @@ import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature. import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor; import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor; import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageScope; -import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider; import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache; import org.jetbrains.kotlin.name.*; @@ -148,18 +147,13 @@ public class JetTypeMapper { @NotNull public Type mapOwner(@NotNull DeclarationDescriptor descriptor) { - return mapOwner(descriptor, false); - } - - @NotNull - private Type mapOwner(@NotNull DeclarationDescriptor descriptor, boolean isImplementation) { if (isLocalFunction(descriptor)) { return asmTypeForAnonymousClass(bindingContext, (FunctionDescriptor) descriptor); } DeclarationDescriptor container = descriptor.getContainingDeclaration(); if (container instanceof PackageFragmentDescriptor) { - return Type.getObjectType(internalNameForPackageMemberOwner((CallableMemberDescriptor) descriptor, isImplementation)); + return Type.getObjectType(internalNameForPackageMemberOwner((CallableMemberDescriptor) descriptor)); } else if (container instanceof ClassDescriptor) { return mapClass((ClassDescriptor) container); @@ -184,7 +178,8 @@ public class JetTypeMapper { if (isImplementation || descriptor instanceof PropertyDescriptor || Visibilities.isPrivate(visibility) || - isAccessor/*Cause of KT-9603*/) { + isAccessor/*Cause of KT-9603*/ + ) { return FileClasses.getFileClassInternalName(fileClassesProvider, file); } else { @@ -199,8 +194,8 @@ public class JetTypeMapper { if (facadeFqName != null) return facadeFqName; } - throw new RuntimeException("Unreachable state"); - //return PackageClassUtils.getPackageClassInternalName(packageFragment.getFqName()); + throw new RuntimeException("Could not find package member for " + descriptor + + " in package fragment " + descriptor.getContainingDeclaration()); } public static class ContainingClassesInfo { @@ -268,6 +263,8 @@ public class JetTypeMapper { return JvmClassName.byClassId(containingClasses.getFacadeClassId()).getInternalName(); } + private static final ClassId FAKE_CLASS_ID_FOR_BUILTINS = ClassId.topLevel(new FqName("kotlin.KotlinPackage")); + @Nullable private ContainingClassesInfo getPackageMemberContainingClassesInfo(@NotNull DeserializedCallableMemberDescriptor descriptor) { // XXX This method is a dirty hack. @@ -279,8 +276,7 @@ public class JetTypeMapper { PackageFragmentDescriptor packageFragmentDescriptor = (PackageFragmentDescriptor) containingDeclaration; if (packageFragmentDescriptor instanceof BuiltinsPackageFragment) { - ClassId builtinsFacadeClassId = ClassId.topLevel(PackageClassUtils.getPackageClassFqName(packageFragmentDescriptor.getFqName())); - return new ContainingClassesInfo(builtinsFacadeClassId, builtinsFacadeClassId); + return new ContainingClassesInfo(FAKE_CLASS_ID_FOR_BUILTINS, FAKE_CLASS_ID_FOR_BUILTINS); } Name implClassName = JvmFileClassUtil.getImplClassName(descriptor); diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java index 26b1c3809db..f2d74a1f204 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java @@ -62,9 +62,6 @@ public class K2JVMCompilerArguments extends CommonCompilerArguments { @Argument(value = "Xno-optimize", description = "Disable optimizations") public boolean noOptimize; - @Argument(value = "Xmultifile-package-facades", description = "Compile package facade classes as multifile classes") - public boolean packageFacadesAsMultifileClasses; - @Argument(value = "Xreport-perf", description = "Report detailed performance statistics") public boolean reportPerf; diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt index 9f144269479..43b8daa0486 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -272,7 +272,6 @@ public open class K2JVMCompiler : CLICompiler() { configuration.put(JVMConfigurationKeys.DISABLE_PARAM_ASSERTIONS, arguments.noParamAssertions) configuration.put(JVMConfigurationKeys.DISABLE_INLINE, arguments.noInline) configuration.put(JVMConfigurationKeys.DISABLE_OPTIMIZATION, arguments.noOptimize) - configuration.put(JVMConfigurationKeys.PACKAGE_FACADES_AS_MULTIFILE_CLASSES, arguments.packageFacadesAsMultifileClasses); } private fun getClasspath(paths: KotlinPaths, arguments: K2JVMCompilerArguments): List { diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt index 2d485cabe7b..052e8f79fc8 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.kt @@ -142,17 +142,6 @@ public class CliLightClassGenerationSupport(project: Project) : LightClassGenera return KotlinLightClassForExplicitDeclaration.create(psiManager, classOrObject) } - override fun getPackageClasses(packageFqName: FqName, scope: GlobalSearchScope): Collection { - val filesInPackage = findFilesForPackage(packageFqName, scope) - - val filesWithCallables = PackagePartClassUtils.getFilesWithCallables(filesInPackage) - if (filesWithCallables.isEmpty()) return emptyList() - - return emptyOrSingletonList( - KotlinLightClassForFacade.createForPackageFacade(psiManager, packageFqName, scope, filesWithCallables) - ) - } - override fun resolveClassToDescriptor(classOrObject: JetClassOrObject): ClassDescriptor? { return bindingContext.get(BindingContext.CLASS, classOrObject) } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index c4808fcce47..fba4c2d468f 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -44,6 +44,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.config.ContentRootsKt; import org.jetbrains.kotlin.context.ModuleContext; +import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil; import org.jetbrains.kotlin.idea.MainFunctionDetector; import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager; import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; @@ -205,7 +206,7 @@ public class KotlinToJVMBytecodeCompiler { return null; } FqName fqName = file.getPackageFqName(); - mainClass = PackageClassUtils.getPackageClassFqName(fqName); + mainClass = JvmFileClassUtil.getFileClassInfoNoResolve(file).getFacadeClassFqName(); } } return mainClass; @@ -399,7 +400,6 @@ public class KotlinToJVMBytecodeCompiler { configuration.get(JVMConfigurationKeys.DISABLE_INLINE, false), configuration.get(JVMConfigurationKeys.DISABLE_OPTIMIZATION, false), /* useTypeTableInSerializer = */ false, - configuration.get(JVMConfigurationKeys.PACKAGE_FACADES_AS_MULTIFILE_CLASSES, false), diagnosticHolder, packagesWithObsoleteParts, obsoleteMultifileClasses, diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/config/JVMConfigurationKeys.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/config/JVMConfigurationKeys.java index ad5c4e61b5a..06003573266 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/config/JVMConfigurationKeys.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/config/JVMConfigurationKeys.java @@ -39,8 +39,6 @@ public class JVMConfigurationKeys { CompilerConfigurationKey.create("disable inline"); public static final CompilerConfigurationKey DISABLE_OPTIMIZATION = CompilerConfigurationKey.create("disable optimization"); - public static final CompilerConfigurationKey PACKAGE_FACADES_AS_MULTIFILE_CLASSES = - CompilerConfigurationKey.create("compile package facades as multifile classes"); public static final CompilerConfigurationKey INCREMENTAL_COMPILATION_COMPONENTS = CompilerConfigurationKey.create("incremental cache provider"); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt index 0510a30cc7b..b50d53dc0ac 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt @@ -93,15 +93,6 @@ public object JvmFileClassUtil { public fun getHiddenPartFqName(file: JetFile, jvmFileClassAnnotations: ParsedJmvFileClassAnnotations): FqName = file.packageFqName.child(Name.identifier(manglePartName(jvmFileClassAnnotations.name, file.name))) - @JvmStatic - public fun getMultifilePackageFacadePartInfo(file: JetFile): JvmFileClassInfo { - val packageFqName = file.packageFqName - val packageFacadeFqName = PackageClassUtils.getPackageClassFqName(packageFqName) - val filePartName = manglePartName(packageFacadeFqName.shortName().asString(), file.name) - val filePartFqName = packageFqName.child(Name.identifier(filePartName)) - return JvmMultifileClassPartInfo(filePartFqName, packageFacadeFqName) - } - @JvmStatic public fun manglePartName(facadeName: String, fileName: String): String = "${facadeName}__${PackagePartClassUtils.getFilePartShortName(fileName)}" diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/JavaElementFinder.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/JavaElementFinder.java index ac9157e04d2..c763ffab972 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/JavaElementFinder.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/JavaElementFinder.java @@ -120,10 +120,6 @@ public class JavaElementFinder extends PsiElementFinder implements KotlinFinderM answer.addAll(lightClassGenerationSupport.getFacadeClasses(qualifiedName, scope)); - if (PackageClassUtils.isPackageClassFqName(qualifiedName)) { - answer.addAll(lightClassGenerationSupport.getPackageClasses(qualifiedName.parent(), scope)); - } - return sortByClasspath(answer, scope).toArray(new PsiClass[answer.size()]); } @@ -171,7 +167,6 @@ public class JavaElementFinder extends PsiElementFinder implements KotlinFinderM Collection declarations = lightClassGenerationSupport.findClassOrObjectDeclarationsInPackage(packageFQN, scope); Set answer = Sets.newHashSet(); - answer.add(PackageClassUtils.getPackageClassName(packageFQN)); answer.addAll(lightClassGenerationSupport.getFacadeNames(packageFQN, scope)); for (JetClassOrObject declaration : declarations) { @@ -224,7 +219,6 @@ public class JavaElementFinder extends PsiElementFinder implements KotlinFinderM List answer = new SmartList(); FqName packageFQN = new FqName(psiPackage.getQualifiedName()); - answer.addAll(lightClassGenerationSupport.getPackageClasses(packageFQN, scope)); answer.addAll(lightClassGenerationSupport.getFacadeClassesInPackage(packageFQN, scope)); Collection declarations = lightClassGenerationSupport.findClassOrObjectDeclarationsInPackage(packageFQN, scope); diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java index 2ae5293dcc3..8d3d0c4e21a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinJavaFileStubProvider.java @@ -435,7 +435,6 @@ public class KotlinJavaFileStubProvider // this is redundant, but computing it multiple times is costly - ): KotlinLightClassForFacade? { - if (files.any { LightClassUtil.belongsToKotlinBuiltIns(it) }) { - return null - } - - assert(files.isNotEmpty()) { "No files for package $packageFqName" } - - val packageClassFqName = PackageClassUtils.getPackageClassFqName(packageFqName) - val lightClassDataCache = PackageFacadeStubCache.getInstance(manager.project).get(packageFqName, searchScope) - return KotlinLightClassForFacade(manager, packageClassFqName, searchScope, lightClassDataCache, files, true) - } - public fun createForFacade( manager: PsiManager, facadeClassFqName: FqName, diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.java index 03131569e53..9793c6c9838 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassGenerationSupport.java @@ -70,9 +70,6 @@ public abstract class LightClassGenerationSupport { @Nullable public abstract PsiClass getPsiClass(@NotNull JetClassOrObject classOrObject); - @NotNull - public abstract Collection getPackageClasses(@NotNull FqName packageFqName, @NotNull GlobalSearchScope scope); - @Nullable public abstract ClassDescriptor resolveClassToDescriptor(@NotNull JetClassOrObject classOrObject); diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/StubClassBuilder.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/StubClassBuilder.java index cea2ce03d77..a1f9074cc92 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/StubClassBuilder.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/StubClassBuilder.java @@ -50,7 +50,6 @@ public class StubClassBuilder extends AbstractClassBuilder { private final StubElement parent; private StubBuildingVisitor v; private final Stack parentStack; - private boolean isPackageClass = false; public StubClassBuilder(@NotNull Stack parentStack) { this.parentStack = parentStack; @@ -79,18 +78,7 @@ public class StubClassBuilder extends AbstractClassBuilder { super.defineClass(origin, version, access, name, signature, superName, interfaces); - if (origin instanceof JetFile) { - FqName packageName = ((JetFile) origin).getPackageFqName(); - String packageClassName = PackageClassUtils.getPackageClassName(packageName); - - if (name.equals(packageClassName) || name.endsWith("/" + packageClassName)) { - isPackageClass = true; - } - } - - if (!isPackageClass) { - parentStack.push(v.getResult()); - } + parentStack.push(v.getResult()); ((StubBase) v.getResult()).putUserData(ClsWrapperStubPsiFactory.ORIGIN_ELEMENT, origin); } @@ -149,10 +137,8 @@ public class StubClassBuilder extends AbstractClassBuilder { @Override public void done() { - if (!isPackageClass) { - StubElement pop = parentStack.pop(); - assert pop == v.getResult(); - } + StubElement pop = parentStack.pop(); + assert pop == v.getResult(); super.done(); } } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/AnnotationGenTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/AnnotationGenTest.java index 767f05c73bf..c218cf4db7d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/AnnotationGenTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/AnnotationGenTest.java @@ -38,10 +38,6 @@ public class AnnotationGenTest extends CodegenTestCase { return generateAndCreateClassLoader(); } - private Class getPackageClass(@NotNull ClassLoader loader) throws ClassNotFoundException { - return loader.loadClass(PackageClassUtils.getPackageClassName(myFiles.getPsiFile().getPackageFqName())); - } - private Class getPackageSrcClass(@NotNull ClassLoader loader) throws ClassNotFoundException { return loader.loadClass(PackagePartClassUtils.getPackagePartInternalName(myFiles.getPsiFile())); } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestUtil.java b/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestUtil.java index ad80b82ddd1..c4520620b07 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestUtil.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CodegenTestUtil.java @@ -68,7 +68,6 @@ public class CodegenTestUtil { configuration.get(JVMConfigurationKeys.DISABLE_INLINE, false), configuration.get(JVMConfigurationKeys.DISABLE_OPTIMIZATION, false), /* useTypeTableInSerializer = */ false, - configuration.get(JVMConfigurationKeys.PACKAGE_FACADES_AS_MULTIFILE_CLASSES, false), forExtraDiagnostics ); KotlinCodegenFacade.compileCorrectFiles(state, CompilationErrorHandler.THROW_EXCEPTION); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/SyntheticMethodForAnnotatedPropertyGenTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/SyntheticMethodForAnnotatedPropertyGenTest.java index 75ed6b8cf49..3c557339894 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/SyntheticMethodForAnnotatedPropertyGenTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/SyntheticMethodForAnnotatedPropertyGenTest.java @@ -50,16 +50,8 @@ public class SyntheticMethodForAnnotatedPropertyGenTest extends CodegenTestCase public void testTopLevel() { loadFile(); - String packageClassName = PackageClassUtils.getPackageClassName(FqName.ROOT); - for (OutputFile outputFile : generateClassesInFile().asList()) { - String filPath = outputFile.getRelativePath(); - - if (filPath.startsWith(packageClassName) && !filPath.equals(packageClassName + ".class")) { - // This should be package$src class - Class a = generateClass(filPath.substring(0, filPath.length() - ".class".length())); - assertAnnotatedSyntheticMethodExistence(true, a); - } - } + Class a = generateClass("TopLevelKt"); + assertAnnotatedSyntheticMethodExistence(true, a); } public void testInTrait() throws ClassNotFoundException { diff --git a/compiler/tests/org/jetbrains/kotlin/name/PackageClassNameTest.java b/compiler/tests/org/jetbrains/kotlin/name/PackageClassNameTest.java deleted file mode 100644 index 995544a6f46..00000000000 --- a/compiler/tests/org/jetbrains/kotlin/name/PackageClassNameTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2010-2015 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.kotlin.name; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.junit.Test; - -import static org.jetbrains.kotlin.load.kotlin.PackageClassUtils.getPackageClassName; -import static org.junit.Assert.assertEquals; - -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"); - } - - private static void doTest(@NotNull String name, @NotNull String expectedForChild, @Nullable String expectedForParent) { - doTest(new FqName(name), expectedForChild, expectedForParent); - } - - private static 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())); - } - } -} diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/PackageClassUtils.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/PackageClassUtils.java index 6c8a1cef4b3..c3685693389 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/PackageClassUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/PackageClassUtils.java @@ -31,7 +31,7 @@ public final class PackageClassUtils { // ex. -> _DefaultPackage, a -> APackage, a.b -> BPackage @NotNull - public static String getPackageClassName(@NotNull FqName packageFQN) { + private static String getPackageClassName(@NotNull FqName packageFQN) { if (packageFQN.isRoot()) { return DEFAULT_PACKAGE_CLASS_NAME; } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index 2f5e98d6ca8..da0f108977d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -133,41 +133,6 @@ public class IDELightClassGenerationSupport(private val project: Project) : Ligh return KotlinLightClassForExplicitDeclaration.create(psiManager, classOrObject) } - override fun getPackageClasses(packageFqName: FqName, scope: GlobalSearchScope): Collection { - val filesWithCallables = PackagePartClassUtils.getFilesWithCallables(findFilesForPackage(packageFqName, scope)) - val filesByModule = filesWithCallables.groupBy { it.getModuleInfo() } - return filesByModule.flatMap { - createLightClassForPackageFacade(it.value, it.key, packageFqName) - } - } - - private fun createLightClassForPackageFacade( - files: List, - moduleInfo: IdeaModuleInfo, - packageFqName: FqName - ): List { - if (moduleInfo is ModuleSourceInfo) { - val lightClassForFacade = KotlinLightClassForFacade.createForPackageFacade( - psiManager, packageFqName, moduleInfo.contentScope(), files - ) - return withFakeLightClasses(lightClassForFacade, files) - - } - else { - val packageClassName = PackageClassUtils.getPackageClassName(packageFqName) - val virtualFileForPackageClass = files.asSequence().map { - it.virtualFile?.parent?.findChild("$packageClassName.class") - }.firstOrNull { it != null } ?: return emptyList() - - val clsClassFromPackageClass = createClsJavaClassFromVirtualFile( - mirrorFile = files.first(), - classFile = virtualFileForPackageClass, - correspondingClassOrObject = null - ) ?: return emptyList() - return listOf(KotlinLightClassForDecompiledDeclaration(clsClassFromPackageClass, null)) - } - } - private fun withFakeLightClasses( lightClassForFacade: KotlinLightClassForFacade?, facadeFiles: List diff --git a/idea/src/org/jetbrains/kotlin/idea/internal/KotlinBytecodeToolWindow.java b/idea/src/org/jetbrains/kotlin/idea/internal/KotlinBytecodeToolWindow.java index 2acc20dd105..c20e4750ec7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/internal/KotlinBytecodeToolWindow.java +++ b/idea/src/org/jetbrains/kotlin/idea/internal/KotlinBytecodeToolWindow.java @@ -240,7 +240,6 @@ public class KotlinBytecodeToolWindow extends JPanel implements Disposable { !enableInline, !enableOptimization, /*useTypeTableInSerializer=*/false, - /*packageFacadesAsMultifileClasses=*/false, sink); KotlinCodegenFacade.compileCorrectFiles(state, CompilationErrorHandler.THROW_EXCEPTION); } diff --git a/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfiguration.java b/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfiguration.java index 70c226d1ebc..3a8aee5b58b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfiguration.java +++ b/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfiguration.java @@ -301,8 +301,7 @@ public class JetRunConfiguration extends ModuleBasedConfiguration intCollection = TestPackage.getList(); - List intList = TestPackage.getList(); + Collection intCollection = AssignMappedKotlinTypeKt.getList(); + List intList = AssignMappedKotlinTypeKt.getList(); - Collection intMutableCollection = TestPackage.getMutableList(); - List intMutableList = TestPackage.getMutableList(); + Collection intMutableCollection = AssignMappedKotlinTypeKt.getMutableList(); + List intMutableList = AssignMappedKotlinTypeKt.getMutableList(); - Collection stringsCollection = TestPackage.getArrayList(); - ArrayList arrayListCollection = TestPackage.getArrayList(); + Collection stringsCollection = AssignMappedKotlinTypeKt.getArrayList(); + ArrayList arrayListCollection = AssignMappedKotlinTypeKt.getArrayList(); } } diff --git a/idea/testData/kotlinAndJavaChecker/JvmOverloadsFunctions.java b/idea/testData/kotlinAndJavaChecker/JvmOverloadsFunctions.java index eb064fc4584..443bced84a2 100644 --- a/idea/testData/kotlinAndJavaChecker/JvmOverloadsFunctions.java +++ b/idea/testData/kotlinAndJavaChecker/JvmOverloadsFunctions.java @@ -1,6 +1,6 @@ import test.kotlin.A; -import static test.kotlin.KotlinPackage.foo; +import static test.kotlin.JvmOverloadsFunctionsKt.foo; class JvmOverloadsFunctions { public static void main(String[] args) { diff --git a/idea/testData/kotlinAndJavaChecker/TopLevelFunctionInDataFlowInspection.java b/idea/testData/kotlinAndJavaChecker/TopLevelFunctionInDataFlowInspection.java index c219126dc46..3fe5b545a4c 100644 --- a/idea/testData/kotlinAndJavaChecker/TopLevelFunctionInDataFlowInspection.java +++ b/idea/testData/kotlinAndJavaChecker/TopLevelFunctionInDataFlowInspection.java @@ -1,11 +1,11 @@ package test; import org.jetbrains.annotations.NotNull; -import test.kotlin.KotlinPackage; +import test.kotlin.*; public class TopLevelFunctionInDataFlowInspection { void other(@NotNull Object some) { - Object foo = KotlinPackage.foo(some); + Object foo = TopLevelFunctionInDataFlowInspectionKt.foo(some); } } diff --git a/idea/testData/kotlinAndJavaChecker/UsingKotlinPackageDeclarations.java b/idea/testData/kotlinAndJavaChecker/UsingKotlinPackageDeclarations.java index 6688cf0958e..08d564d63b9 100644 --- a/idea/testData/kotlinAndJavaChecker/UsingKotlinPackageDeclarations.java +++ b/idea/testData/kotlinAndJavaChecker/UsingKotlinPackageDeclarations.java @@ -1,10 +1,10 @@ -import test.TestPackage; +package test; // Check absence of 'Static method reference via subclass warning' for kotlin usages public class UsingKotlinPackageDeclarations { public static int test() { - TestPackage.foo(); - TestPackage.setBar(15); - return TestPackage.getBar(); + UsingKotlinPackageDeclarationsKt.foo(); + UsingKotlinPackageDeclarationsKt.setBar(15); + return UsingKotlinPackageDeclarationsKt.getBar(); } } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/asJava/FakeLightClassForPackageTest.java b/idea/tests/org/jetbrains/kotlin/asJava/FakeLightClassForPackageTest.java deleted file mode 100644 index 64d12ff9553..00000000000 --- a/idea/tests/org/jetbrains/kotlin/asJava/FakeLightClassForPackageTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2010-2015 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.kotlin.asJava; - -import com.google.common.collect.Sets; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiFile; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.testFramework.LightProjectDescriptor; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.idea.test.JetLightCodeInsightFixtureTestCase; -import org.jetbrains.kotlin.idea.test.JetLightProjectDescriptor; -import org.jetbrains.kotlin.name.FqName; -import org.jetbrains.kotlin.psi.JetFile; - -import java.util.Set; - -public class FakeLightClassForPackageTest extends JetLightCodeInsightFixtureTestCase { - private static final String TEST_DATA_PATH = "idea/testData/fakeLightClassForPackage/"; - - public void testMultiFile() { - myFixture.configureByFiles(TEST_DATA_PATH + "1.kt", TEST_DATA_PATH + "2.kt"); - GlobalSearchScope searchScope = GlobalSearchScope.allScope(getProject()); - PsiClass[] classes = JavaElementFinder.getInstance(getProject()).findClasses("test.TestPackage", searchScope); - - assertEquals(3, classes.length); - - assertInstanceOf(classes[0], KotlinLightClassForFacade.class); - - Set expectedFiles = Sets.newHashSet( - LightClassGenerationSupport.getInstance(getProject()).findFilesForPackage(new FqName("test"), searchScope) - ); - - Set actualFiles = Sets.newHashSet(); - for (int i = 1; i < classes.length; i++) { - assertInstanceOf(classes[i], FakeLightClassForFileOfPackage.class); - actualFiles.add(((FakeLightClassForFileOfPackage) classes[i]).getContainingFile()); - } - - assertEquals(expectedFiles, actualFiles); - } - - @NotNull - @Override - protected LightProjectDescriptor getProjectDescriptor() { - return JetLightProjectDescriptor.INSTANCE; - } -} diff --git a/idea/tests/org/jetbrains/kotlin/asJava/LightClassesClasspathSortingTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/LightClassesClasspathSortingTest.kt index d04f511bfa9..c7152bb52a3 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/LightClassesClasspathSortingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/LightClassesClasspathSortingTest.kt @@ -31,12 +31,8 @@ class LightClassesClasspathSortingTest : KotlinCodeInsightTestCase() { doTest("test1.A") } - fun testPackageClassOneFile() { - doTest("test2.Test2Package") - } - - fun testPackageClassTwoFiles() { - doTest("test3.Test3Package") + fun testFileClass() { + doTest("test2.FileKt") } private fun doTest(fqName: String) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateToDecompiledLibraryTest.java b/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateToDecompiledLibraryTest.java index b5eafd50b3b..19dd7f92254 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateToDecompiledLibraryTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/navigation/NavigateToDecompiledLibraryTest.java @@ -60,10 +60,6 @@ public class NavigateToDecompiledLibraryTest extends LightCodeInsightFixtureTest doTest(); } - public void testLibrariesPackage() { - doTest(); - } - public void testSimpleClass() { doTest(); } diff --git a/idea/tests/org/jetbrains/kotlin/idea/filters/JetExceptionFilterTest.kt b/idea/tests/org/jetbrains/kotlin/idea/filters/JetExceptionFilterTest.kt index 682670c017a..5e0ef0aa9a8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/filters/JetExceptionFilterTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/filters/JetExceptionFilterTest.kt @@ -33,7 +33,6 @@ import com.intellij.testFramework.PsiTestUtil import junit.framework.TestCase import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.load.kotlin.PackageClassUtils.getPackageClassFqName -import org.jetbrains.kotlin.load.kotlin.PackageClassUtils.getPackageClassName import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.test.MockLibraryUtil @@ -109,11 +108,11 @@ public class JetExceptionFilterTest : MultiFileTestCase() { } public fun testBreakpointReachedAt() { - doTest("breakpointReachedAt.kt", 2, { getPackageClassName(FqName.ROOT) }, linePrefix = "Breakpoint reached at ") + doTest("breakpointReachedAt.kt", 2, { "BreakpointReachedAtKt" }, linePrefix = "Breakpoint reached at ") } public fun testSimple() { - doTest("simple.kt", 2, { getPackageClassName(FqName.ROOT) }) + doTest("simple.kt", 2, { "SimpleKt" }) } public fun testKt2489() {