Fix CodegenFileClassesProvider problems related to wrong/incomplete code in IDE

This commit is contained in:
Dmitry Petrov
2015-09-09 18:44:43 +03:00
parent bf1c0260f1
commit 0839d78797
3 changed files with 5 additions and 55 deletions
@@ -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<JetFile, JvmFileClassInfo>()
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<JetFile>,
packagesWithObsoleteParts: Collection<FqName>,
multifileFacadesWithObsoleteParts: Collection<FqName>
) : CodegenFileClassesProvider {
val codegenFileClassesManager = CodegenFileClassesProvider()
files.forEach {
codegenFileClassesManager.addFileClassInfo(it)
}
val packagesToProcess = HashSet<FqName>(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) }
}
@@ -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")