- call multifile class members (compiling against binaries)

- inline multifile class members
HACK? scope-based part/facade resolution
This commit is contained in:
Dmitry Petrov
2015-09-11 10:08:01 +03:00
parent 50f83da6da
commit 838433ba8a
3 changed files with 30 additions and 5 deletions
@@ -61,12 +61,19 @@ public class LazyJavaPackageScope(
private val partToFacade = c.storageManager.createLazyValue {
val result = hashMapOf<String, String>()
for (kotlinClass in kotlinBinaryClasses()) {
kotlinClasses@for (kotlinClass in kotlinBinaryClasses()) {
val header = kotlinClass.classHeader
if (header.kind == KotlinClassHeader.Kind.MULTIFILE_CLASS_PART) {
val partName = kotlinClass.classId.shortClassName.asString()
val facadeName = header.multifileClassName ?: ""
result[partName] = facadeName
when (header.kind ) {
KotlinClassHeader.Kind.MULTIFILE_CLASS_PART -> {
val partName = kotlinClass.classId.shortClassName.asString()
val facadeName = header.multifileClassName ?: continue@kotlinClasses
result[partName] = facadeName
}
KotlinClassHeader.Kind.FILE_FACADE -> {
val fileFacadeName = kotlinClass.classId.shortClassName.asString()
result[fileFacadeName] = fileFacadeName
}
else -> {}
}
}
result
@@ -28,6 +28,12 @@ import org.jetbrains.kotlin.utils.Printer
public abstract class AbstractScopeAdapter : JetScope {
protected abstract val workerScope: JetScope
public fun getActualScope(): JetScope =
if (workerScope is AbstractScopeAdapter)
(workerScope as AbstractScopeAdapter).getActualScope()
else
workerScope
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> {
return workerScope.getImplicitReceiversHierarchy()
}