From 4bc257bd7348c4d43d2b66e68688e7e3f37ce56a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 15 Sep 2015 15:39:18 +0300 Subject: [PATCH] Minor refactoring in LazyJavaPackageScope --- .../jetbrains/kotlin/codegen/JvmCodegenUtil.java | 16 ++++++++++------ .../lazy/descriptors/LazyJavaPackageFragment.kt | 10 +++++++--- .../lazy/descriptors/LazyJavaPackageScope.kt | 7 ------- .../src/org/jetbrains/kotlin/storage/storage.kt | 2 ++ 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java index 824c57d0c7a..f8d8143d226 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/JvmCodegenUtil.java @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.load.java.JvmAnnotationNames; import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor; import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageFragment; import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass; +import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement; import org.jetbrains.kotlin.load.kotlin.ModuleMapping; import org.jetbrains.kotlin.load.kotlin.VirtualFileKotlinClass; import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider; @@ -143,12 +144,15 @@ public class JvmCodegenUtil { return false; } - KotlinJvmBinaryClass binaryClass = ((LazyJavaPackageFragment) packageFragment).getScope().getKotlinBinaryClass(); - if (binaryClass instanceof VirtualFileKotlinClass) { - VirtualFile file = ((VirtualFileKotlinClass) binaryClass).getFile(); - if (file.getFileSystem().getProtocol() == StandardFileSystems.FILE_PROTOCOL) { - File ioFile = VfsUtilCore.virtualToIoFile(file); - return ioFile.getAbsolutePath().startsWith(outDirectory.getAbsolutePath() + File.separator); + SourceElement source = ((LazyJavaPackageFragment) packageFragment).getSource(); + if (source instanceof KotlinJvmBinarySourceElement) { + KotlinJvmBinaryClass binaryClass = ((KotlinJvmBinarySourceElement) source).getBinaryClass(); + if (binaryClass instanceof VirtualFileKotlinClass) { + VirtualFile file = ((VirtualFileKotlinClass) binaryClass).getFile(); + if (file.getFileSystem().getProtocol() == StandardFileSystems.FILE_PROTOCOL) { + File ioFile = VfsUtilCore.virtualToIoFile(file); + return ioFile.getAbsolutePath().startsWith(outDirectory.getAbsolutePath() + File.separator); + } } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageFragment.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageFragment.kt index 06b53183265..3e34e993643 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageFragment.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageFragment.kt @@ -22,8 +22,10 @@ import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaPackage import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement +import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.resolve.scopes.DecapitalizedAnnotationScope import org.jetbrains.kotlin.resolve.scopes.JetScope +import org.jetbrains.kotlin.storage.get class LazyJavaPackageFragment( private val c: LazyJavaResolverContext, @@ -38,6 +40,10 @@ class LazyJavaPackageFragment( LazyJavaClassDescriptor(c, this, javaClass.fqName!!, javaClass) } + internal val oldPackageFacade by c.storageManager.createNullableLazyValue { + c.components.kotlinClassFinder.findKotlinClass(PackageClassUtils.getPackageClassId(fqName)) + } + internal fun resolveTopLevelClass(javaClass: JavaClass) = topLevelClasses(javaClass) override fun getMemberScope(): JetScope = wrappedScope @@ -45,8 +51,6 @@ class LazyJavaPackageFragment( override fun toString() = "lazy java package fragment: $fqName" override fun getSource(): SourceElement { - val binaryClass = scope.kotlinBinaryClass ?: return SourceElement.NO_SOURCE - - return KotlinJvmBinarySourceElement(binaryClass) + return KotlinJvmBinarySourceElement(oldPackageFacade ?: return SourceElement.NO_SOURCE) } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt index 83718b368f8..b8d73eadf9d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.lazy.resolveKotlinBinaryClass import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.JavaPackage -import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader import org.jetbrains.kotlin.name.ClassId @@ -43,12 +42,6 @@ public class LazyJavaPackageScope( private val jPackage: JavaPackage, containingDeclaration: LazyJavaPackageFragment ) : LazyJavaStaticScope(c, containingDeclaration) { - - // TODO: Storing references is a temporary hack until modules infrastructure is implemented. - // See JetTypeMapperWithOutDirectories for details - public val kotlinBinaryClass: KotlinJvmBinaryClass? - = c.components.kotlinClassFinder.findKotlinClass(PackageClassUtils.getPackageClassId(packageFragment.fqName)) - private val kotlinBinaryClasses = c.storageManager.createLazyValue { val simpleNames = c.components.packageMapper.findPackageParts(jPackage.getFqName().asString()) val packageClassId = PackageClassUtils.getPackageClassId(packageFragment.fqName).packageFqName diff --git a/core/util.runtime/src/org/jetbrains/kotlin/storage/storage.kt b/core/util.runtime/src/org/jetbrains/kotlin/storage/storage.kt index 9584dc3c806..cc03af591c2 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/storage/storage.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/storage/storage.kt @@ -33,3 +33,5 @@ public interface NullableLazyValue : Function0 { } public fun NotNullLazyValue.get(_this: Any?, p: PropertyMetadata): T = invoke() + +public fun NullableLazyValue.get(_this: Any?, p: PropertyMetadata): T? = invoke()