From 0839d787975243ff4c3b87d661154328819651e6 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 9 Sep 2015 18:44:43 +0300 Subject: [PATCH] Fix CodegenFileClassesProvider problems related to wrong/incomplete code in IDE --- .../codegen/CodegenFileClassesProvider.kt | 38 ++----------------- .../kotlin/codegen/state/GenerationState.kt | 4 +- .../kotlin/fileClasses/JvmFileClassUtil.kt | 18 +-------- 3 files changed, 5 insertions(+), 55 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CodegenFileClassesProvider.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/CodegenFileClassesProvider.kt index 58a845754c4..5bf5eec8514 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CodegenFileClassesProvider.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CodegenFileClassesProvider.kt @@ -24,44 +24,12 @@ import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.resolve.BindingContext import java.util.* -public class CodegenFileClassesProvider private constructor() : JvmFileClassesProvider { +public class CodegenFileClassesProvider() : JvmFileClassesProvider { private val fileParts = hashMapOf() override fun getFileClassFqName(file: JetFile): FqName = getFileClassInfo(file).fileClassFqName public fun getFileClassInfo(file: JetFile): JvmFileClassInfo = - fileParts.getOrPut(file) { createFileClassInfo(file) } - - private fun createFileClassInfo(file: JetFile): JvmFileClassInfo = - JvmFileClassUtil.getFileClassInfoNoResolve(file) - - internal fun addFileClassInfo(file: JetFile) { - if (fileParts.containsKey(file)) return - fileParts[file] = createFileClassInfo(file) - } - - companion object { - public @jvmStatic fun createForCodegenTask( - bindingContext: BindingContext, - files: Collection, - packagesWithObsoleteParts: Collection, - multifileFacadesWithObsoleteParts: Collection - ) : CodegenFileClassesProvider { - val codegenFileClassesManager = CodegenFileClassesProvider() - files.forEach { - codegenFileClassesManager.addFileClassInfo(it) - } - - val packagesToProcess = HashSet(packagesWithObsoleteParts) - packagesToProcess.addAll(multifileFacadesWithObsoleteParts.map { it.parent() }) - for (packageFqName in packagesToProcess) { - bindingContext.get(BindingContext.PACKAGE_TO_FILES, packageFqName)?.forEach { - codegenFileClassesManager.addFileClassInfo(it) - } - } - - return codegenFileClassesManager - } - } -} + fileParts.getOrPut(file) { JvmFileClassUtil.getFileClassInfoNoResolve(file) } +} \ No newline at end of file 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 17f179b00e2..65c29cd7265 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -82,9 +82,7 @@ public class GenerationState jvmOverloads constructor( } } - public val fileClassesProvider: CodegenFileClassesProvider = - CodegenFileClassesProvider.createForCodegenTask(bindingContext, files, packagesWithObsoleteParts, - /* TODO */ multifileFacadesWithObsoleteParts = emptySet()) + public val fileClassesProvider: CodegenFileClassesProvider = CodegenFileClassesProvider() public val classBuilderMode: ClassBuilderMode = builderFactory.getClassBuilderMode() public val bindingTrace: BindingTrace = DelegatingBindingTrace(bindingContext, "trace in GenerationState") 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 741b289970b..d5364ff5b35 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt @@ -17,13 +17,10 @@ package org.jetbrains.kotlin.fileClasses import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor -import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.constants.StringValue public object JvmFileClassUtil { @@ -58,12 +55,6 @@ public object JvmFileClassUtil { public @JvmStatic fun manglePartName(facadeName: String, fileName: String): String = "1${PackagePartClassUtils.getFilePartShortName(fileName)}" - public @JvmStatic fun parseJvmFileClass(annotations: Annotations): ParsedJmvFileClassAnnotations? { - val jvmName = annotations.findAnnotation(JVM_NAME) ?: return null - val jvmMultifileClass = annotations.findAnnotation(JVM_MULTIFILE_CLASS) - return parseJvmFileClass(jvmName, jvmMultifileClass) - } - public @JvmStatic fun parseJvmFileClass(jvmName: AnnotationDescriptor, jvmMultifileClass: AnnotationDescriptor?): ParsedJmvFileClassAnnotations? { val jvmNameArgument = jvmName.allValueArguments.values().singleOrNull() ?: return null val name = (jvmNameArgument as? StringValue)?.value ?: return null @@ -78,6 +69,7 @@ public object JvmFileClassUtil { val jvmName = findAnnotationEntryOnFileNoResolve(file, JVM_NAME_SHORT) ?: return null val nameExpr = jvmName.valueArguments.firstOrNull()?.getArgumentExpression() ?: return null val name = getLiteralStringFromRestrictedConstExpression(nameExpr) ?: return null + if (!Name.isValidIdentifier(name)) return null val isMultifileClassPart = findAnnotationEntryOnFileNoResolve(file, JVM_MULTIFILE_CLASS_SHORT) != null return ParsedJmvFileClassAnnotations(name, isMultifileClassPart) } @@ -95,14 +87,6 @@ public object JvmFileClassUtil { return singleEntry.text } - public @JvmStatic fun collectFileAnnotations(file: JetFile, bindingContext: BindingContext): Annotations { - val fileAnnotationsList = file.fileAnnotationList ?: return Annotations.EMPTY - val annotationDescriptors = arrayListOf() - for (annotationEntry in fileAnnotationsList.annotationEntries) { - bindingContext.get(BindingContext.ANNOTATION, annotationEntry)?.let { annotationDescriptors.add(it) } - } - return AnnotationsImpl(annotationDescriptors) - } } public class ParsedJmvFileClassAnnotations(public val name: String, public val multipleFiles: Boolean)