Import all members from class object
This commit is contained in:
@@ -100,7 +100,10 @@ public class ImportsResolver {
|
|||||||
namespaceScope.importScope(ScopeBoundToReceiver.create(descriptor, type.getMemberScope()));
|
namespaceScope.importScope(ScopeBoundToReceiver.create(descriptor, type.getMemberScope()));
|
||||||
}
|
}
|
||||||
else if (descriptor instanceof ClassDescriptor) {
|
else if (descriptor instanceof ClassDescriptor) {
|
||||||
namespaceScope.importScope(ScopeBoundToReceiver.create(descriptor, ((ClassDescriptor) descriptor).getDefaultType().getMemberScope()));
|
JetType classObjectType = ((ClassDescriptor) descriptor).getClassObjectType();
|
||||||
|
if (classObjectType != null) {
|
||||||
|
namespaceScope.importScope(ScopeBoundToReceiver.create(descriptor, classObjectType.getMemberScope()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
+18
-3
@@ -22,6 +22,7 @@ public class ScopeBoundToReceiver implements JetScope {
|
|||||||
|
|
||||||
private SetMultimap<String, VariableDescriptor> propertiesMap;
|
private SetMultimap<String, VariableDescriptor> propertiesMap;
|
||||||
private SetMultimap<String, FunctionDescriptor> functionsMap;
|
private SetMultimap<String, FunctionDescriptor> functionsMap;
|
||||||
|
private Map<String, ClassifierDescriptor> classMap;
|
||||||
private Map<DeclarationDescriptor, DeclarationDescriptor> descriptorsBoundToReceiver;
|
private Map<DeclarationDescriptor, DeclarationDescriptor> descriptorsBoundToReceiver;
|
||||||
private Function<DeclarationDescriptor, DeclarationDescriptor> addBoundToReceiverFunction;
|
private Function<DeclarationDescriptor, DeclarationDescriptor> addBoundToReceiverFunction;
|
||||||
|
|
||||||
@@ -38,7 +39,7 @@ public class ScopeBoundToReceiver implements JetScope {
|
|||||||
return receiver;
|
return receiver;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Function<DeclarationDescriptor, DeclarationDescriptor> getAddBoundToReceiverFunction() {
|
private Function<DeclarationDescriptor, DeclarationDescriptor> getAddBoundToReceiverFunction() {
|
||||||
if (addBoundToReceiverFunction == null) {
|
if (addBoundToReceiverFunction == null) {
|
||||||
addBoundToReceiverFunction = DescriptorUtils.getAddBoundToReceiverFunction(receiver);
|
addBoundToReceiverFunction = DescriptorUtils.getAddBoundToReceiverFunction(receiver);
|
||||||
}
|
}
|
||||||
@@ -59,6 +60,13 @@ public class ScopeBoundToReceiver implements JetScope {
|
|||||||
return functionsMap;
|
return functionsMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<String, ClassifierDescriptor> getClassMap() {
|
||||||
|
if (classMap == null) {
|
||||||
|
classMap = Maps.newHashMap();
|
||||||
|
}
|
||||||
|
return classMap;
|
||||||
|
}
|
||||||
|
|
||||||
private Map<DeclarationDescriptor, DeclarationDescriptor> getDescriptorsBoundToReceiver() {
|
private Map<DeclarationDescriptor, DeclarationDescriptor> getDescriptorsBoundToReceiver() {
|
||||||
if (descriptorsBoundToReceiver == null) {
|
if (descriptorsBoundToReceiver == null) {
|
||||||
descriptorsBoundToReceiver = Maps.newHashMap();
|
descriptorsBoundToReceiver = Maps.newHashMap();
|
||||||
@@ -69,7 +77,12 @@ public class ScopeBoundToReceiver implements JetScope {
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public ClassifierDescriptor getClassifier(@NotNull String name) {
|
public ClassifierDescriptor getClassifier(@NotNull String name) {
|
||||||
return getMemberBoundToReceiver(scope.getClassifier(name));
|
if (getClassMap().containsKey(name)) {
|
||||||
|
return getClassMap().get(name);
|
||||||
|
}
|
||||||
|
ClassifierDescriptor result = getMemberBoundToReceiver(scope.getClassifier(name));
|
||||||
|
getClassMap().put(name, result);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -95,7 +108,9 @@ public class ScopeBoundToReceiver implements JetScope {
|
|||||||
|
|
||||||
private <D extends DeclarationDescriptor> Set<D> getMembersBoundToReceiver(String name, SetMultimap<String, D> cache, Set<D> oldMembers) {
|
private <D extends DeclarationDescriptor> Set<D> getMembersBoundToReceiver(String name, SetMultimap<String, D> cache, Set<D> oldMembers) {
|
||||||
for (D oldMember : oldMembers) {
|
for (D oldMember : oldMembers) {
|
||||||
cache.put(name, getMemberBoundToReceiver(oldMember));
|
D memberBoundToReceiver = getMemberBoundToReceiver(oldMember);
|
||||||
|
cache.put(name, memberBoundToReceiver);
|
||||||
|
getDescriptorsBoundToReceiver().put(oldMember, memberBoundToReceiver);
|
||||||
}
|
}
|
||||||
return cache.get(name);
|
return cache.get(name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,3 +67,29 @@ object N {
|
|||||||
fun bar() {}
|
fun bar() {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//FILE:c.kt
|
||||||
|
// import all members from class object
|
||||||
|
package c
|
||||||
|
|
||||||
|
import A.*
|
||||||
|
import M.*
|
||||||
|
|
||||||
|
fun foo() {
|
||||||
|
val <!UNUSED_VARIABLE!>b<!>: B = B()
|
||||||
|
var <!UNUSED_VARIABLE!>r<!>: R = R()
|
||||||
|
}
|
||||||
|
|
||||||
|
class A() {
|
||||||
|
class object {
|
||||||
|
class B() {
|
||||||
|
class object {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object M {
|
||||||
|
fun foo() {}
|
||||||
|
class R() {}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user