KT-2752: refactor support of modules and root packages
This commit is contained in:
@@ -27,24 +27,24 @@ import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
|
||||
import java.util.*
|
||||
|
||||
class FQNGenerator {
|
||||
private val cache: MutableMap<DeclarationDescriptor, FQNPart> = WeakHashMap()
|
||||
private val cache: MutableMap<DeclarationDescriptor, FQNPart?> = WeakHashMap()
|
||||
|
||||
fun generate(descriptor: DeclarationDescriptor) = cache.getOrPut(descriptor) { generateCacheMiss(descriptor.original) }
|
||||
|
||||
private fun generateCacheMiss(descriptor: DeclarationDescriptor): FQNPart {
|
||||
private fun generateCacheMiss(descriptor: DeclarationDescriptor): FQNPart? {
|
||||
// Members of companion objects of classes are treated as static members of these classes
|
||||
if (isNativeObject(descriptor) && isCompanionObject(descriptor)) {
|
||||
return generate(descriptor.containingDeclaration!!)
|
||||
}
|
||||
|
||||
when (descriptor) {
|
||||
is ModuleDescriptor -> return FQNPart(listOf(descriptor.name.asString()), true, descriptor, descriptor)
|
||||
is ModuleDescriptor -> return null
|
||||
is PackageFragmentDescriptor -> {
|
||||
return if (!descriptor.name.isSpecial) {
|
||||
FQNPart(descriptor.fqName.pathSegments().map { it.asString() }, true, descriptor,
|
||||
descriptor.containingDeclaration)
|
||||
FQNPart(descriptor.fqName.pathSegments().map { it.asString() }, true, descriptor, descriptor.containingDeclaration)
|
||||
}
|
||||
else {
|
||||
generate(descriptor.containingDeclaration)
|
||||
null
|
||||
}
|
||||
}
|
||||
is FakeCallableDescriptorForObject -> return generate(descriptor.getReferencedDescriptor())
|
||||
|
||||
+4
-4
@@ -46,7 +46,7 @@ class JsNameClashChecker : SimpleDeclarationChecker {
|
||||
}
|
||||
|
||||
private fun checkDescriptor(descriptor: DeclarationDescriptor, declaration: KtDeclaration, diagnosticHolder: DiagnosticSink) {
|
||||
val fqn = fqnGenerator.generate(descriptor)
|
||||
val fqn = fqnGenerator.generate(descriptor)!!
|
||||
if (fqn.shared && fqn.scope is ClassOrPackageFragmentDescriptor && isOpaque(fqn.descriptor)) {
|
||||
val scope = getScope(fqn.scope)
|
||||
val name = fqn.names.last()
|
||||
@@ -66,7 +66,7 @@ class JsNameClashChecker : SimpleDeclarationChecker {
|
||||
.mapNotNull { it as? CallableMemberDescriptor }
|
||||
.filter { it.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE }
|
||||
for (override in fakeOverrides) {
|
||||
val overrideFqn = fqnGenerator.generate(override)
|
||||
val overrideFqn = fqnGenerator.generate(override)!!
|
||||
val scope = getScope(overrideFqn.scope)
|
||||
val name = overrideFqn.names.last()
|
||||
val existing = scope[name]
|
||||
@@ -114,7 +114,7 @@ class JsNameClashChecker : SimpleDeclarationChecker {
|
||||
}
|
||||
}
|
||||
|
||||
val fqn = fqnGenerator.generate(descriptor)
|
||||
val fqn = fqnGenerator.generate(descriptor) ?: return
|
||||
if (fqn.shared && isOpaque(fqn.descriptor)) {
|
||||
target[fqn.names.last()] = fqn.descriptor
|
||||
(fqn.descriptor as? CallableMemberDescriptor)?.let { checkOverrideClashes(it, target) }
|
||||
@@ -125,7 +125,7 @@ class JsNameClashChecker : SimpleDeclarationChecker {
|
||||
var overridden = descriptor.overriddenDescriptors
|
||||
while (overridden.isNotEmpty()) {
|
||||
for (overridenDescriptor in overridden) {
|
||||
val overriddenFqn = fqnGenerator.generate(overridenDescriptor)
|
||||
val overriddenFqn = fqnGenerator.generate(overridenDescriptor)!!
|
||||
if (overriddenFqn.shared) {
|
||||
val existing = target[overriddenFqn.names.last()]
|
||||
if (existing != null) {
|
||||
|
||||
Reference in New Issue
Block a user