From 37bcd455b5871ba5e40cb5d1ce204bd775dfb812 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 7 May 2015 19:43:17 +0300 Subject: [PATCH] Make ModuleDescriptor#getPackage() return not null lazy object with lazy scope Refactor: no need to create package view in order to obtain its subpackages LazyPackageViewDescriptorImpl to replace PackageViewDescriptorImpl This allows to avoid computations when package views are requested but their contents not necessarily queried For example: DescriptorResolver.resolvePackageHeader() --- .../builtins/BuiltInsSerializer.kt | 2 +- .../CliLightClassGenerationSupport.java | 4 +- .../kotlin/resolve/DescriptorResolver.java | 3 +- .../resolve/ImportDirectiveProcessor.kt | 4 +- .../kotlin/resolve/lazy/LazyFileScope.kt | 9 +--- .../resolve/lazy/ResolveSessionUtils.java | 2 +- .../kotlin/resolve/scopes/JetScopeUtils.java | 2 +- .../checkers/AbstractJetDiagnosticsTest.java | 4 +- .../AbstractCompileJavaAgainstKotlinTest.java | 2 +- .../jvm/compiler/AbstractLoadJavaTest.java | 5 +- .../AbstractSdkAnnotationsValidityTest.java | 2 +- ...ompileKotlinAgainstCustomBinariesTest.java | 2 +- .../jvm/compiler/LoadDescriptorUtil.java | 2 - .../MultiModuleJavaAnalysisCustomTest.kt | 2 +- .../AbstractJvmRuntimeDescriptorLoaderTest.kt | 2 +- .../builtins/BuiltInsSerializerTest.kt | 2 +- .../js/KotlinJavascriptSerializerTest.kt | 2 +- .../RecursiveDescriptorProcessorTest.java | 1 - .../kotlin/builtins/ReflectionTypes.kt | 6 +-- .../BuiltInFictitiousFunctionClassFactory.kt | 2 +- .../functions/FunctionClassDescriptor.kt | 2 +- .../kotlin/descriptors/ModuleDescriptor.kt | 9 ++-- .../descriptors/PackageViewDescriptor.kt | 2 + ...pl.kt => LazyPackageViewDescriptorImpl.kt} | 46 ++++++++++++------- .../descriptors/impl/ModuleDescriptorImpl.kt | 20 ++++---- .../descriptors/impl/SubpackagesScope.kt | 28 +++++++---- .../kotlin/resolve/DescriptorUtils.kt | 3 +- .../reflect/jvm/internal/KPackageImpl.kt | 2 +- .../kotlin/resolve/lazy/ElementResolver.kt | 6 +-- .../IDELightClassGenerationSupport.java | 2 +- .../kotlin/idea/kdoc/KDocReference.kt | 5 +- .../references/BuiltInsReferenceResolver.java | 1 - ...PositionManagerLibraryClassFileSearcher.kt | 5 -- .../quickfix/ReplaceWithAnnotationAnalyzer.kt | 2 +- .../callableBuilder/CallableBuilder.kt | 2 +- .../idea/util/ImportInsertHelperImpl.kt | 4 +- .../textBuilder/TextConsistencyBaseTest.kt | 3 +- .../refactoring/rename/AbstractRenameTest.kt | 2 +- .../idea/stubs/AbstractResolveByStubTest.java | 2 +- .../js/KotlinJavascriptSerializationUtil.kt | 2 +- 40 files changed, 103 insertions(+), 105 deletions(-) rename core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/{PackageViewDescriptorImpl.kt => LazyPackageViewDescriptorImpl.kt} (53%) diff --git a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt index babc3247531..c5d7686567b 100644 --- a/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializer.kt @@ -108,7 +108,7 @@ public class BuiltInsSerializer(private val dependOnOldBuiltIns: Boolean) { } private fun serializePackage(module: ModuleDescriptor, fqName: FqName, destDir: File) { - val packageView = module.getPackage(fqName) ?: error("No package resolved in $module") + val packageView = module.getPackage(fqName) // TODO: perform some kind of validation? At the moment not possible because DescriptorValidator is in compiler-tests // DescriptorValidator.validate(packageView) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.java index 81ebebd704a..0a4025a1668 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.java @@ -167,15 +167,13 @@ public class CliLightClassGenerationSupport extends LightClassGenerationSupport @Override public boolean packageExists(@NotNull FqName fqName, @NotNull GlobalSearchScope scope) { - return getModule().getPackage(fqName) != null; + return !getModule().getPackage(fqName).isEmpty(); } @NotNull @Override public Collection getSubPackages(@NotNull FqName fqn, @NotNull GlobalSearchScope scope) { PackageViewDescriptor packageView = getModule().getPackage(fqn); - if (packageView == null) return Collections.emptyList(); - Collection members = packageView.getMemberScope().getDescriptors(DescriptorKindFilter.PACKAGES, JetScope.ALL_NAME_FILTER); return ContainerUtil.mapNotNull(members, new Function() { @Override diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index 8b139bded99..94d6f0bcb33 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -1227,11 +1227,10 @@ public class DescriptorResolver { FqName fqName = packageDirective.getFqName(nameExpression); PackageViewDescriptor packageView = module.getPackage(fqName); - assert packageView != null : "package not found: " + fqName; trace.record(REFERENCE_TARGET, nameExpression, packageView); PackageViewDescriptor parentPackageView = packageView.getContainingDeclaration(); - assert parentPackageView != null : "package has no parent: " + packageView; + assert parentPackageView != null : "Should not be null since " + fqName + " should not be root"; trace.record(RESOLUTION_SCOPE, nameExpression, parentPackageView.getMemberScope()); } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ImportDirectiveProcessor.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ImportDirectiveProcessor.kt index 1890159f45d..1f9c27603e9 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ImportDirectiveProcessor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ImportDirectiveProcessor.kt @@ -86,10 +86,10 @@ public class ImportDirectiveProcessor( val packageView = moduleDescriptor.getPackage(fqName) if (jetExpression == null) { assert(fqName.isRoot()) - return packageView.sure { "Root package does not exist in module $moduleDescriptor" } + return packageView } return when { - packageView != null -> { + !packageView.isEmpty() -> { recordPackageViews(jetExpression, packageView, trace) packageView } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyFileScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyFileScope.kt index 5542de12dae..080087ed088 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyFileScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyFileScope.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.resolve.lazy import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor -import org.jetbrains.kotlin.descriptors.PackageViewDescriptor import org.jetbrains.kotlin.descriptors.impl.SubpackagesScope import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.JetCodeFragment @@ -67,8 +66,8 @@ class LazyFileScope private constructor( else file.getImportDirectives() - val packageView = getPackageViewDescriptor(file, resolveSession) val moduleDescriptor = resolveSession.getModuleDescriptor() + val packageView = moduleDescriptor.getPackage(file.getPackageFqName()) val packageFragment = resolveSession.getPackageFragment(file.getPackageFqName()) .sure { "Could not find fragment ${file.getPackageFqName()} for file ${file.getName()}" } @@ -96,11 +95,5 @@ class LazyFileScope private constructor( return LazyFileScope(scopeChain, aliasImportResolver, allUnderImportResolver, packageFragment, debugName) } - - private fun getPackageViewDescriptor(file: JetFile, resolveSession: ResolveSession): PackageViewDescriptor { - val fqName = file.getPackageFqName() - return resolveSession.getModuleDescriptor().getPackage(fqName) - ?: throw IllegalStateException("Package not found: $fqName maybe the file is not in scope of this resolve session: ${file.getName()}") - } } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSessionUtils.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSessionUtils.java index 00719403652..efde25a3dc0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSessionUtils.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ResolveSessionUtils.java @@ -59,7 +59,7 @@ public class ResolveSessionUtils { FqName packageFqName = fqName.parent(); while (true) { PackageViewDescriptor packageDescriptor = module.getPackage(packageFqName); - if (packageDescriptor != null) { + if (!packageDescriptor.isEmpty()) { FqName relativeClassFqName = NamePackage.tail(fqName, packageFqName); ClassDescriptor classDescriptor = findByQualifiedName(packageDescriptor.getMemberScope(), relativeClassFqName); if (classDescriptor != null && filter.apply(classDescriptor)) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/JetScopeUtils.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/JetScopeUtils.java index cec5e0df1b2..7320a9e0d2f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/JetScopeUtils.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/JetScopeUtils.java @@ -168,7 +168,7 @@ public final class JetScopeUtils { if (packageFragment == null) return null; PackageViewDescriptor packageView = packageFragment.getContainingDeclaration().getPackage(((JetFile) parent).getPackageFqName()); - return packageView != null ? packageView.getMemberScope() : null; + return packageView.getMemberScope(); } JetExpression expression = PsiTreeUtil.getParentOfType(element, JetExpression.class, false); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractJetDiagnosticsTest.java b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractJetDiagnosticsTest.java index 5af3b85cba1..7414f11fba9 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractJetDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractJetDiagnosticsTest.java @@ -262,8 +262,8 @@ public abstract class AbstractJetDiagnosticsTest extends BaseDiagnosticsTest { for (TestModule module : KotlinPackage.sort(modules.keySet())) { ModuleDescriptorImpl moduleDescriptor = modules.get(module); - DeclarationDescriptor aPackage = moduleDescriptor.getPackage(FqName.ROOT); - assertNotNull(aPackage); + PackageViewDescriptor aPackage = moduleDescriptor.getPackage(FqName.ROOT); + assertFalse(aPackage.isEmpty()); if (isMultiModuleTest) { rootPackageText.append(String.format("// -- Module: %s --\n", moduleDescriptor.getName())); diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileJavaAgainstKotlinTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileJavaAgainstKotlinTest.java index db74205fa2a..b3f5f3b8fbe 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileJavaAgainstKotlinTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractCompileJavaAgainstKotlinTest.java @@ -76,7 +76,7 @@ public abstract class AbstractCompileJavaAgainstKotlinTest extends TestCaseWithT AnalysisResult exhaust = JvmResolveUtil.analyzeFilesWithJavaIntegration(environment.getProject(), Collections.emptySet()); PackageViewDescriptor packageView = exhaust.getModuleDescriptor().getPackage(LoadDescriptorUtil.TEST_PACKAGE_FQNAME); - assertNotNull(packageView); + assertFalse(packageView.isEmpty()); validateAndCompareDescriptorWithFile(packageView, CONFIGURATION, expectedFile); } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java index 94756fff497..38a40d66b05 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractLoadJavaTest.java @@ -105,7 +105,6 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { configurationKind); PackageViewDescriptor packageFromSource = result.getModuleDescriptor().getPackage(TEST_PACKAGE_FQNAME); - assert packageFromSource != null : "Package " + TEST_PACKAGE_FQNAME + " not found"; Assert.assertEquals("test", packageFromSource.getName().asString()); PackageViewDescriptor packageFromBinary = LoadDescriptorUtil.loadTestPackageAndBindingContextFromJavaRoot( @@ -157,8 +156,6 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { ); PackageViewDescriptor packageView = moduleContext.getModule().getPackage(TEST_PACKAGE_FQNAME); - assert packageView != null : "Test package not found"; - checkJavaPackage(expectedFile, packageView, trace.getBindingContext(), DONT_INCLUDE_METHODS_OF_OBJECT); } @@ -187,7 +184,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { environment.getProject(), Collections.singleton(jetFile) ); PackageViewDescriptor packageView = result.getModuleDescriptor().getPackage(TEST_PACKAGE_FQNAME); - assertNotNull(packageView); + assertFalse(packageView.isEmpty()); validateAndCompareDescriptorWithFile(packageView, DONT_INCLUDE_METHODS_OF_OBJECT.withValidationStrategy( new DeserializedScopeValidationVisitor() diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSdkAnnotationsValidityTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSdkAnnotationsValidityTest.java index cc9b25666ad..beb3abe66b9 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSdkAnnotationsValidityTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/AbstractSdkAnnotationsValidityTest.java @@ -93,7 +93,7 @@ public abstract class AbstractSdkAnnotationsValidityTest extends UsefulTestCase topLevelClass.acceptVoid(visitor); - if (topLevelPackage != null) { + if (!topLevelPackage.isEmpty()) { topLevelPackage.acceptVoid(visitor); } } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java index 124fc493292..9994d6a0796 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.java @@ -90,7 +90,7 @@ public class CompileKotlinAgainstCustomBinariesTest extends TestCaseWithTmpdir { ); PackageViewDescriptor packageView = result.getModuleDescriptor().getPackage(LoadDescriptorUtil.TEST_PACKAGE_FQNAME); - assertNotNull("Failed to find package: " + LoadDescriptorUtil.TEST_PACKAGE_FQNAME, packageView); + assertFalse("Failed to find package: " + LoadDescriptorUtil.TEST_PACKAGE_FQNAME, packageView.isEmpty()); return packageView; } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadDescriptorUtil.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadDescriptorUtil.java index 86c31b30098..c95b3e37daf 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadDescriptorUtil.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadDescriptorUtil.java @@ -105,8 +105,6 @@ public final class LoadDescriptorUtil { ModuleDescriptor module = LazyResolveTestUtil.resolve(environment.getProject(), trace, Collections.emptyList()); PackageViewDescriptor packageView = module.getPackage(TEST_PACKAGE_FQNAME); - assert packageView != null; - return Pair.create(packageView, trace.getBindingContext()); } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt index 759cbea44b9..e1dc9172ea5 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/MultiModuleJavaAnalysisCustomTest.kt @@ -111,7 +111,7 @@ public class MultiModuleJavaAnalysisCustomTest : UsefulTestCase() { } private fun checkClassInPackage(moduleDescriptor: ModuleDescriptor, packageName: String, className: String) { - val kotlinPackage = moduleDescriptor.getPackage(FqName(packageName))!! + val kotlinPackage = moduleDescriptor.getPackage(FqName(packageName)) val kotlinClassName = Name.identifier(className) val kotlinClass = kotlinPackage.memberScope.getClassifier(kotlinClassName) as ClassDescriptor checkClass(kotlinClass) diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt index d61601619fc..80af6e1d8e4 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt @@ -144,7 +144,7 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi val header = ReflectKotlinClass.create(klass)?.getClassHeader() if (header?.kind == KotlinClassHeader.Kind.PACKAGE_FACADE) { - val packageView = module.getPackage(LoadDescriptorUtil.TEST_PACKAGE_FQNAME).sure { "Couldn't resolve package ${LoadDescriptorUtil.TEST_PACKAGE_FQNAME}" } + val packageView = module.getPackage(LoadDescriptorUtil.TEST_PACKAGE_FQNAME) packageScopes.add(packageView.memberScope) } else if (header == null || diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerTest.kt index 5c12656a58e..b8a7d2139dd 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/builtins/BuiltInsSerializerTest.kt @@ -51,7 +51,7 @@ public class BuiltInsSerializerTest : TestCaseWithTmpdir() { module.setDependencies(module, KotlinBuiltIns.getInstance().getBuiltInsModule()) RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile( - module.getPackage(TEST_PACKAGE_FQNAME)!!, + module.getPackage(TEST_PACKAGE_FQNAME), RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT, File(source.replace(".kt", ".txt")) ) diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt index 33e219def4b..28afd9532da 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializerTest.kt @@ -57,7 +57,7 @@ public class KotlinJavascriptSerializerTest : TestCaseWithTmpdir() { val module = deserialize(metaFile) RecursiveDescriptorComparator.validateAndCompareDescriptorWithFile( - module.getPackage(TEST_PACKAGE_FQNAME)!!, + module.getPackage(TEST_PACKAGE_FQNAME), RecursiveDescriptorComparator.DONT_INCLUDE_METHODS_OF_OBJECT, File(source.replace(".kt", ".txt")) ) diff --git a/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorProcessorTest.java b/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorProcessorTest.java index 6d8e57b6b9d..2b9bca8540c 100644 --- a/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorProcessorTest.java +++ b/compiler/tests/org/jetbrains/kotlin/test/util/RecursiveDescriptorProcessorTest.java @@ -46,7 +46,6 @@ public class RecursiveDescriptorProcessorTest extends KotlinTestWithEnvironment JetFile jetFile = JetTestUtils.createFile("declarations.kt", text, getEnvironment().getProject()); AnalysisResult result = JetTestUtils.analyzeFile(jetFile); PackageViewDescriptor testPackage = result.getModuleDescriptor().getPackage(FqName.topLevel(Name.identifier("test"))); - assert testPackage != null; List descriptors = recursivelyCollectDescriptors(testPackage); diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/ReflectionTypes.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/ReflectionTypes.kt index 032895c9f22..c3e81262a4c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/ReflectionTypes.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/ReflectionTypes.kt @@ -31,13 +31,13 @@ import kotlin.properties.Delegates val KOTLIN_REFLECT_FQ_NAME = FqName("kotlin.reflect") public class ReflectionTypes(private val module: ModuleDescriptor) { - private val kotlinReflectScope: JetScope? by Delegates.lazy { - module.getPackage(KOTLIN_REFLECT_FQ_NAME)?.memberScope + private val kotlinReflectScope: JetScope by Delegates.lazy { + module.getPackage(KOTLIN_REFLECT_FQ_NAME).memberScope } fun find(className: String): ClassDescriptor { val name = Name.identifier(className) - return kotlinReflectScope?.getClassifier(name) as? ClassDescriptor + return kotlinReflectScope.getClassifier(name) as? ClassDescriptor ?: ErrorUtils.createErrorClass(KOTLIN_REFLECT_FQ_NAME.child(name).asString()) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/BuiltInFictitiousFunctionClassFactory.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/BuiltInFictitiousFunctionClassFactory.kt index a5a787f4962..14208047b9e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/BuiltInFictitiousFunctionClassFactory.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/BuiltInFictitiousFunctionClassFactory.kt @@ -73,7 +73,7 @@ public class BuiltInFictitiousFunctionClassFactory( val kindWithArity = parseClassName(className, packageFqName) ?: return null val (kind, arity) = kindWithArity // KT-5100 - val containingPackageFragment = module.getPackage(packageFqName)!!.fragments.single() + val containingPackageFragment = module.getPackage(packageFqName).fragments.single() return FunctionClassDescriptor(storageManager, containingPackageFragment, kind, arity) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt index 24c1e93745e..8708c36cdac 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionClassDescriptor.kt @@ -158,7 +158,7 @@ public class FunctionClassDescriptor( if (functionKind.hasExtensionReceiver) functionArity++ val module = containingDeclaration.getContainingDeclaration() - val kotlinPackageFragment = module.getPackage(BUILT_INS_PACKAGE_FQ_NAME)!!.fragments.single() + val kotlinPackageFragment = module.getPackage(BUILT_INS_PACKAGE_FQ_NAME).fragments.single() // If this is a KMemberFunction{n} or KExtensionFunction{n}, it extends Function{n} with the annotation kotlin.extension, // so that the value of this type is callable as an extension function, with the receiver before the dot diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt index e6a0aecd468..b41ac8300e1 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ModuleDescriptor.kt @@ -24,9 +24,6 @@ import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.types.TypeSubstitutor public trait ModuleDescriptor : DeclarationDescriptor, ModuleParameters { - public fun getPackage(fqName: FqName): PackageViewDescriptor? - public fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection - override fun getContainingDeclaration(): DeclarationDescriptor? = null public val builtIns: KotlinBuiltIns @@ -40,6 +37,10 @@ public trait ModuleDescriptor : DeclarationDescriptor, ModuleParameters { override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R { return visitor.visitModuleDeclaration(this, data) } + + public fun getPackage(fqName: FqName): PackageViewDescriptor + + public fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection } trait ModuleParameters { @@ -56,4 +57,4 @@ public fun ModuleParameters(defaultImports: List, platformToKotlinCl object : ModuleParameters { override val defaultImports: List = defaultImports override val platformToKotlinClassMap: PlatformToKotlinClassMap = platformToKotlinClassMap - } \ No newline at end of file + } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageViewDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageViewDescriptor.kt index 10d4b4044ab..16f487046c4 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageViewDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/PackageViewDescriptor.kt @@ -29,4 +29,6 @@ public interface PackageViewDescriptor : DeclarationDescriptor { public val module: ModuleDescriptor public val fragments: List + + public fun isEmpty(): Boolean = fragments.isEmpty() } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageViewDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt similarity index 53% rename from core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageViewDescriptorImpl.kt rename to core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt index c20ad31f353..9d70597e7a7 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageViewDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt @@ -16,36 +16,46 @@ package org.jetbrains.kotlin.descriptors.impl -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptorVisitor +import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor +import org.jetbrains.kotlin.descriptors.PackageViewDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.scopes.ChainedScope import org.jetbrains.kotlin.resolve.scopes.JetScope +import org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter +import org.jetbrains.kotlin.storage.StorageManager +import org.jetbrains.kotlin.storage.get import org.jetbrains.kotlin.types.TypeSubstitutor -public class PackageViewDescriptorImpl( - override val module: ModuleDescriptor, +public class LazyPackageViewDescriptorImpl( + override val module: ModuleDescriptorImpl, override val fqName: FqName, - override val fragments: List + storageManager: StorageManager ) : DeclarationDescriptorImpl(Annotations.EMPTY, fqName.shortNameOrSpecial()), PackageViewDescriptor { - override val memberScope: JetScope = run { - assert(fragments.isNotEmpty()) { "$fqName in module" } - val scopes = fragments.map { it.getMemberScope() } + SubpackagesScope(this) - ChainedScope(this, "package view scope for $fqName in ${module.getName()}", *scopes.toTypedArray()) + override val fragments: List by storageManager.createLazyValue { + module.packageFragmentProvider.getPackageFragments(fqName) } - override fun getContainingDeclaration(): PackageViewDescriptor? = if (fqName.isRoot()) null else module.getPackage(fqName.parent()) + override val memberScope: JetScope = LazyScopeAdapter(storageManager.createLazyValue { + if (fragments.isEmpty()) { + JetScope.Empty + } + else { + val scopes = fragments.map { it.getMemberScope() } + SubpackagesScope(module, fqName) + ChainedScope(this, "package view scope for $fqName in ${module.getName()}", *scopes.toTypedArray()) + } + }) - override fun substitute(substitutor: TypeSubstitutor): DeclarationDescriptor? = this - - override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R = visitor.visitPackageViewDescriptor(this, data) + override fun getContainingDeclaration(): PackageViewDescriptor? { + return if (fqName.isRoot()) null else module.getPackage(fqName.parent()) + } override fun equals(other: Any?): Boolean { - if (javaClass != other?.javaClass) return false - - val that = other as PackageViewDescriptorImpl - return fqName == that.fqName && module == that.module + val that = other as? PackageViewDescriptor ?: return false + return this.fqName == that.fqName && this.module == that.module } override fun hashCode(): Int { @@ -53,4 +63,8 @@ public class PackageViewDescriptorImpl( result = 31 * result + fqName.hashCode() return result } + + override fun substitute(substitutor: TypeSubstitutor): DeclarationDescriptor? = this + + override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R = visitor.visitPackageViewDescriptor(this, data) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt index 8c448b2275f..7ae1f11db28 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -43,6 +43,12 @@ public class ModuleDescriptorImpl( private var dependencies: ModuleDependencies? = null private var packageFragmentProviderForModuleContent: PackageFragmentProvider? = null + override fun getPackage(fqName: FqName): PackageViewDescriptor = LazyPackageViewDescriptorImpl(this, fqName, storageManager) + + override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection { + return packageFragmentProvider.getSubPackagesOf(fqName, nameFilter) + } + private val packageFragmentProviderForWholeModuleWithDependencies by Delegates.lazy { val moduleDependencies = dependencies.sure { "Dependencies of module $id were not set before querying module content" } val dependenciesDescriptors = moduleDependencies.descriptors @@ -82,17 +88,11 @@ public class ModuleDescriptorImpl( */ public fun initialize(providerForModuleContent: PackageFragmentProvider) { assert(!isInitialized) { "Attempt to initialize module $id twice" } - packageFragmentProviderForModuleContent = providerForModuleContent + this.packageFragmentProviderForModuleContent = providerForModuleContent } - override fun getPackage(fqName: FqName): PackageViewDescriptor? { - val fragments = packageFragmentProviderForWholeModuleWithDependencies.getPackageFragments(fqName) - return if (!fragments.isEmpty()) PackageViewDescriptorImpl(this, fqName, fragments) else null - } - - override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection { - return packageFragmentProviderForWholeModuleWithDependencies.getSubPackagesOf(fqName, nameFilter) - } + val packageFragmentProvider: PackageFragmentProvider + get() = packageFragmentProviderForWholeModuleWithDependencies private val friendModules = LinkedHashSet() @@ -121,4 +121,4 @@ public class LazyModuleDependencies( override val descriptors: List get() = dependencies() -} \ No newline at end of file +} diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt index cb210fbd313..047dbbf275b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt @@ -17,28 +17,38 @@ package org.jetbrains.kotlin.descriptors.impl import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageViewDescriptor +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.scopes.JetScopeImpl -import org.jetbrains.kotlin.utils.* - -import java.util.ArrayList import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter +import org.jetbrains.kotlin.resolve.scopes.JetScopeImpl +import org.jetbrains.kotlin.utils.Printer +import org.jetbrains.kotlin.utils.addIfNotNull +import org.jetbrains.kotlin.utils.sure +import java.util.ArrayList -public class SubpackagesScope(private val containingDeclaration: PackageViewDescriptor) : JetScopeImpl() { +public class SubpackagesScope(private val moduleDescriptor: ModuleDescriptor, private val fqName: FqName) : JetScopeImpl() { override fun getContainingDeclaration(): DeclarationDescriptor { - return containingDeclaration + return moduleDescriptor.getPackage(fqName) } override fun getPackage(name: Name): PackageViewDescriptor? { - return if (name.isSpecial()) null else containingDeclaration.getModule().getPackage(containingDeclaration.getFqName().child(name)) + if (name.isSpecial()) { + return null + } + val packageViewDescriptor = moduleDescriptor.getPackage(fqName.child(name)) + if (packageViewDescriptor.isEmpty()) { + return null + } + return packageViewDescriptor } override fun getDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection { if (!kindFilter.acceptsKinds(DescriptorKindFilter.PACKAGES_MASK)) return listOf() - val subFqNames = containingDeclaration.getModule().getSubPackagesOf(containingDeclaration.getFqName(), nameFilter) + val subFqNames = moduleDescriptor.getSubPackagesOf(fqName, nameFilter) val result = ArrayList(subFqNames.size()) for (subFqName in subFqNames) { val shortName = subFqName.shortName() @@ -53,7 +63,7 @@ public class SubpackagesScope(private val containingDeclaration: PackageViewDesc p.println(javaClass.getSimpleName(), " {") p.pushIndent() - p.println("thisDescriptor = ", containingDeclaration) + p.println("thisDescriptor = ", getContainingDeclaration()) p.popIndent() p.println("}") diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt index 341cd3aa224..047d2535957 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt @@ -44,8 +44,7 @@ public val DeclarationDescriptor.module: ModuleDescriptor public fun ModuleDescriptor.resolveTopLevelClass(topLevelClassFqName: FqName): ClassDescriptor? { assert(!topLevelClassFqName.isRoot()) - return getPackage(topLevelClassFqName.parent())?.memberScope - ?.getClassifier(topLevelClassFqName.shortName()) as? ClassDescriptor + return getPackage(topLevelClassFqName.parent()).memberScope.getClassifier(topLevelClassFqName.shortName()) as? ClassDescriptor } public val ClassDescriptor.classId: ClassId diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt index a661a684fa5..28a9a48a9ca 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt @@ -26,7 +26,7 @@ class KPackageImpl(override val jClass: Class<*>) : KCallableContainerImpl(), KP val moduleData = jClass.getOrCreateModule() val fqName = jClass.classId.getPackageFqName() - moduleData.module.getPackage(fqName) ?: throw KotlinReflectionInternalError("Package not resolved: $fqName") + moduleData.module.getPackage(fqName) } override val scope: JetScope get() = descriptor.memberScope diff --git a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt index db5d245644f..8f7940423be 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/resolve/lazy/ElementResolver.kt @@ -181,7 +181,6 @@ public abstract class ElementResolver protected constructor( if (trace.getBindingContext()[BindingContext.REFERENCE_TARGET, jetElement] == null) { val fqName = header.getFqName(jetElement) val packageDescriptor = resolveSession.getModuleDescriptor().getPackage(fqName) - ?: error("Package descriptor should be present in session for $fqName") trace.record(BindingContext.REFERENCE_TARGET, jetElement, packageDescriptor) } } @@ -410,14 +409,13 @@ public abstract class ElementResolver protected constructor( // Inside import if (expression.getParentOfType(false) != null) { - val rootPackage = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT)!! + val rootPackage = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT) if (parent is JetDotQualifiedExpression) { val element = parent.getReceiverExpression() val fqName = expression.getContainingJetFile().getPackageFqName() val filePackage = resolveSession.getModuleDescriptor().getPackage(fqName) - ?: error("File package should be already resolved and be found") val descriptors = if (element is JetDotQualifiedExpression) { qualifiedExpressionResolver.lookupDescriptorsForQualifiedExpression( @@ -439,7 +437,7 @@ public abstract class ElementResolver protected constructor( val packageDirective = expression.getParentOfType(false) if (packageDirective != null) { val packageDescriptor = resolveSession.getModuleDescriptor().getPackage(packageDirective.getFqName(expression as JetSimpleNameExpression).parent()) - return packageDescriptor?.memberScope + return packageDescriptor.memberScope } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.java index 68d67345ef6..cb1b09ccf46 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.java @@ -128,7 +128,7 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport // make sure we create a package descriptor PackageViewDescriptor packageDescriptor = session.getModuleDescriptor().getPackage(packageFqName); - if (packageDescriptor == null) { + if (packageDescriptor.isEmpty()) { LOG.warn("No descriptor found for package " + packageFqName + " in file " + file.getName() + "\n" + file.getText()); session.forceResolveAll(); continue; diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocReference.kt index ddcd2fb7b53..69a14e754c9 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocReference.kt @@ -127,10 +127,7 @@ private fun resolveParamLink(fromDescriptor: DeclarationDescriptor, qualifiedNam } private fun getPackageInnerScope(descriptor: PackageFragmentDescriptor): JetScope { - val module = descriptor.getContainingDeclaration() - val packageView = module.getPackage(descriptor.fqName) - val packageScope = packageView!!.memberScope - return packageScope + return descriptor.getContainingDeclaration().getPackage(descriptor.fqName).memberScope } private fun getClassInnerScope(outerScope: JetScope, descriptor: ClassDescriptor): JetScope { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java index 224333c8869..1d9cc76bfd0 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/BuiltInsReferenceResolver.java @@ -122,7 +122,6 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent { } PackageViewDescriptor packageView = newModuleContext.getModule().getPackage(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME); - assert packageView != null : "Should contain " + KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME + " package"; List fragments = packageView.getFragments(); BuiltInsReferenceResolver.this.moduleDescriptor = newModuleContext.getModule(); diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/PositionManagerLibraryClassFileSearcher.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/PositionManagerLibraryClassFileSearcher.kt index ce1fd8a46b0..dc175d04f04 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/PositionManagerLibraryClassFileSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/PositionManagerLibraryClassFileSearcher.kt @@ -61,11 +61,6 @@ fun findPackagePartInternalNameForLibraryFile(topLevelDeclaration: JetDeclaratio val packageFqName = topLevelDeclaration.getContainingJetFile().getPackageFqName() val packageDescriptor = descriptor.module.getPackage(packageFqName) - if (packageDescriptor == null) { - reportError(topLevelDeclaration, descriptor) - return null - } - val descFromSourceText = render(descriptor) val descriptors: Collection = when (descriptor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceWithAnnotationAnalyzer.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceWithAnnotationAnalyzer.kt index 97ef825efb8..3594cc4a370 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceWithAnnotationAnalyzer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceWithAnnotationAnalyzer.kt @@ -163,7 +163,7 @@ object ReplaceWithAnnotationAnalyzer { return when (descriptor) { is PackageFragmentDescriptor -> { val moduleDescriptor = descriptor.getContainingDeclaration() - getResolutionScope(moduleDescriptor.getPackage(descriptor.fqName)!!) + getResolutionScope(moduleDescriptor.getPackage(descriptor.fqName)) } is PackageViewDescriptor -> diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index a239a1d7638..372f1f0889c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -329,7 +329,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { private fun getDeclarationScope(): JetScope { if (config.isExtension || receiverClassDescriptor == null) { - return currentFileModule.getPackage(config.currentFile.getPackageFqName())!!.memberScope + return currentFileModule.getPackage(config.currentFile.getPackageFqName()).memberScope } if (receiverClassDescriptor is ClassDescriptorWithResolutionScopes) { diff --git a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt index 8d766c6816e..4f9aaab7027 100644 --- a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt @@ -216,7 +216,7 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert } .filterNotNull() - val filePackage = moduleDescriptor.getPackage(file.getPackageFqName())!! + val filePackage = moduleDescriptor.getPackage(file.getPackageFqName()) fun isVisible(descriptor: DeclarationDescriptor): Boolean { if (descriptor !is DeclarationDescriptorWithVisibility) return true @@ -263,7 +263,7 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert private fun getMemberScope(fqName: FqName, moduleDescriptor: ModuleDescriptor): JetScope? { val packageView = moduleDescriptor.getPackage(fqName) - if (packageView != null) { + if (!packageView.isEmpty()) { return packageView.memberScope } diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/TextConsistencyBaseTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/TextConsistencyBaseTest.kt index 670274de2cb..bbffc933b16 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/TextConsistencyBaseTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/TextConsistencyBaseTest.kt @@ -67,8 +67,7 @@ private class ResolverForDecompilerImpl(val module: ModuleDescriptor) : Resolver } override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection { - val packageView = module.getPackage(packageFqName) ?: return listOf() - return packageView.memberScope.getAllDescriptors() filter { + return module.getPackage(packageFqName).memberScope.getAllDescriptors() filter { it is CallableMemberDescriptor && it.module != KotlinBuiltIns.getInstance().getBuiltInsModule() } sortBy MemberComparator.INSTANCE } diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/AbstractRenameTest.kt b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/AbstractRenameTest.kt index f8e9ecc50dc..0622cd4efc3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/AbstractRenameTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/AbstractRenameTest.kt @@ -249,7 +249,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() { val scopeToSearch = if (classIdStr != null) { module.findClassAcrossModuleDependencies(classIdStr.toClassId())!!.getDefaultType().getMemberScope() } else { - module.getPackage(FqName(packageFqnStr!!))!!.memberScope + module.getPackage(FqName(packageFqnStr!!)).memberScope } val psiElement = DescriptorToSourceUtils.descriptorToDeclaration(findDescriptorToRename(scopeToSearch))!! diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractResolveByStubTest.java b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractResolveByStubTest.java index 4f76e7f88ac..059dbab2163 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractResolveByStubTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractResolveByStubTest.java @@ -62,7 +62,7 @@ public abstract class AbstractResolveByStubTest extends KotlinCodeInsightTestCas JetFile file = (JetFile) getFile(); ModuleDescriptor module = ResolvePackage.findModuleDescriptor(file); PackageViewDescriptor packageViewDescriptor = module.getPackage(new FqName("test")); - Assert.assertNotNull(packageViewDescriptor); + Assert.assertFalse(packageViewDescriptor.isEmpty()); File fileToCompareTo = new File(FileUtil.getNameWithoutExtension(path) + ".txt"); diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt index 58ed9b5e7b5..9c573b257d5 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptSerializationUtil.kt @@ -101,7 +101,7 @@ public object KotlinJavascriptSerializationUtil { KotlinJavascriptMetadataUtils.formatMetadataAsString(moduleName, moduleDescriptor.toBinaryMetadata()) fun serializePackage(module: ModuleDescriptor, fqName: FqName, writeFun: (String, ByteArrayOutputStream) -> Unit) { - val packageView = module.getPackage(fqName) ?: error("No package resolved in $module") + val packageView = module.getPackage(fqName) val skip: (DeclarationDescriptor) -> Boolean = { DescriptorUtils.getContainingModule(it) != module }