Added CallableDescriptorCollectors
to use it instead List<CallableDescriptorCollector>
This commit is contained in:
@@ -97,13 +97,13 @@ public class CallResolver {
|
||||
assert calleeExpression instanceof JetSimpleNameExpression;
|
||||
JetSimpleNameExpression nameExpression = (JetSimpleNameExpression) calleeExpression;
|
||||
Name referencedName = nameExpression.getReferencedNameAsName();
|
||||
List<CallableDescriptorCollector<? extends VariableDescriptor>> callableDescriptorCollectors = Lists.newArrayList();
|
||||
CallableDescriptorCollectors<VariableDescriptor> callableDescriptorCollectors;
|
||||
if (nameExpression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER) {
|
||||
referencedName = Name.identifier(referencedName.asString().substring(1));
|
||||
callableDescriptorCollectors.add(CallableDescriptorCollectors.PROPERTIES);
|
||||
callableDescriptorCollectors = CallableDescriptorCollectors.PROPERTIES;
|
||||
}
|
||||
else {
|
||||
callableDescriptorCollectors.add(CallableDescriptorCollectors.VARIABLES);
|
||||
callableDescriptorCollectors = CallableDescriptorCollectors.VARIABLES;
|
||||
}
|
||||
TracingStrategy tracing = TracingStrategyImpl.create(nameExpression, context.call);
|
||||
List<ResolutionTask<VariableDescriptor, VariableDescriptor>> prioritizedTasks =
|
||||
@@ -142,9 +142,7 @@ public class CallResolver {
|
||||
@NotNull BasicCallResolutionContext context,
|
||||
@NotNull TracingStrategy tracing
|
||||
) {
|
||||
List<CallableDescriptorCollector<? extends CallableDescriptor>> collectors = Collections
|
||||
.<CallableDescriptorCollector<? extends CallableDescriptor>>singletonList(CallableDescriptorCollectors.FUNCTIONS);
|
||||
return resolveCallWithGivenName(context, Name.identifier("invoke"), tracing, collectors);
|
||||
return resolveCallWithGivenName(context, Name.identifier("invoke"), tracing, CallableDescriptorCollectors.FUNCTIONS);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -152,7 +150,7 @@ public class CallResolver {
|
||||
@NotNull BasicCallResolutionContext context,
|
||||
@NotNull Name name,
|
||||
@NotNull TracingStrategy tracing,
|
||||
@NotNull List<CallableDescriptorCollector<? extends CallableDescriptor>> collectors
|
||||
@NotNull CallableDescriptorCollectors<CallableDescriptor> collectors
|
||||
) {
|
||||
List<ResolutionTask<CallableDescriptor, FunctionDescriptor>> tasks =
|
||||
TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks(context, name, tracing, collectors);
|
||||
|
||||
+27
-10
@@ -30,15 +30,23 @@ import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.LibrarySourceHacks.filterOutMembersFromLibrarySource;
|
||||
|
||||
public class CallableDescriptorCollectors {
|
||||
public static CallableDescriptorCollector<FunctionDescriptor> FUNCTIONS =
|
||||
@SuppressWarnings("unchecked")
|
||||
public class CallableDescriptorCollectors<D extends CallableDescriptor> implements Iterable<CallableDescriptorCollector<D>> {
|
||||
private static final CallableDescriptorCollector<FunctionDescriptor> FUNCTIONS_COLLECTOR =
|
||||
new FilteredCollector<FunctionDescriptor>(new FunctionCollector());
|
||||
public static CallableDescriptorCollector<VariableDescriptor> VARIABLES =
|
||||
private static final CallableDescriptorCollector<VariableDescriptor> VARIABLES_COLLECTOR =
|
||||
new FilteredCollector<VariableDescriptor>(new VariableCollector());
|
||||
public static CallableDescriptorCollector<VariableDescriptor> PROPERTIES =
|
||||
private static final CallableDescriptorCollector<VariableDescriptor> PROPERTIES_COLLECTOR =
|
||||
new FilteredCollector<VariableDescriptor>(new PropertyCollector());
|
||||
public static List<CallableDescriptorCollector<? extends CallableDescriptor>> FUNCTIONS_AND_VARIABLES =
|
||||
Lists.newArrayList(FUNCTIONS, VARIABLES);
|
||||
|
||||
public static final CallableDescriptorCollectors<CallableDescriptor> FUNCTIONS_AND_VARIABLES =
|
||||
new CallableDescriptorCollectors(FUNCTIONS_COLLECTOR, VARIABLES_COLLECTOR);
|
||||
public static final CallableDescriptorCollectors<CallableDescriptor> FUNCTIONS =
|
||||
new CallableDescriptorCollectors(FUNCTIONS_COLLECTOR);
|
||||
public static final CallableDescriptorCollectors<VariableDescriptor> VARIABLES =
|
||||
new CallableDescriptorCollectors(VARIABLES_COLLECTOR);
|
||||
public static final CallableDescriptorCollectors<VariableDescriptor> PROPERTIES =
|
||||
new CallableDescriptorCollectors(PROPERTIES_COLLECTOR);
|
||||
|
||||
private static class FunctionCollector implements CallableDescriptorCollector<FunctionDescriptor> {
|
||||
|
||||
@@ -145,19 +153,19 @@ public class CallableDescriptorCollectors {
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<VariableDescriptor> getNonExtensionsByName(JetScope scope, Name name, @NotNull BindingTrace bindingTrace) {
|
||||
return filterProperties(VARIABLES.getNonExtensionsByName(scope, name, bindingTrace));
|
||||
return filterProperties(VARIABLES_COLLECTOR.getNonExtensionsByName(scope, name, bindingTrace));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<VariableDescriptor> getMembersByName(@NotNull JetType receiver, Name name, @NotNull BindingTrace bindingTrace) {
|
||||
return filterProperties(VARIABLES.getMembersByName(receiver, name, bindingTrace));
|
||||
return filterProperties(VARIABLES_COLLECTOR.getMembersByName(receiver, name, bindingTrace));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<VariableDescriptor> getNonMembersByName(JetScope scope, Name name, @NotNull BindingTrace bindingTrace) {
|
||||
return filterProperties(VARIABLES.getNonMembersByName(scope, name, bindingTrace));
|
||||
return filterProperties(VARIABLES_COLLECTOR.getNonMembersByName(scope, name, bindingTrace));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -197,6 +205,15 @@ public class CallableDescriptorCollectors {
|
||||
}
|
||||
}
|
||||
|
||||
private CallableDescriptorCollectors() {
|
||||
private final Collection<CallableDescriptorCollector<D>> collectors;
|
||||
|
||||
private CallableDescriptorCollectors(CallableDescriptorCollector<D>... collectors) {
|
||||
this.collectors = Lists.newArrayList(collectors);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Iterator<CallableDescriptorCollector<D>> iterator() {
|
||||
return collectors.iterator();
|
||||
}
|
||||
}
|
||||
|
||||
+12
-12
@@ -81,7 +81,7 @@ public class TaskPrioritizer {
|
||||
@NotNull BasicCallResolutionContext context,
|
||||
@NotNull Name name,
|
||||
@NotNull TracingStrategy tracing,
|
||||
@NotNull List<CallableDescriptorCollector<? extends D>> callableDescriptorCollectors
|
||||
@NotNull CallableDescriptorCollectors<D> callableDescriptorCollectors
|
||||
) {
|
||||
List<Pair<JetScope, ReceiverValue>> variants = new ArrayList<Pair<JetScope, ReceiverValue>>(2);
|
||||
|
||||
@@ -136,10 +136,10 @@ public class TaskPrioritizer {
|
||||
List<JetType> variantsForExplicitReceiver = AutoCastUtils.getAutoCastVariants(explicitReceiver, c.context);
|
||||
|
||||
//members
|
||||
for (CallableDescriptorCollector<? extends D> callableDescriptorCollector : c.callableDescriptorCollectors) {
|
||||
for (CallableDescriptorCollector<D> callableDescriptorCollector : c.callableDescriptorCollectors) {
|
||||
Collection<ResolutionCandidate<D>> members = Lists.newArrayList();
|
||||
for (JetType type : variantsForExplicitReceiver) {
|
||||
Collection<? extends D> membersForThisVariant =
|
||||
Collection<D> membersForThisVariant =
|
||||
callableDescriptorCollector.getMembersByName(type, c.name, c.context.trace);
|
||||
convertWithReceivers(membersForThisVariant, explicitReceiver,
|
||||
NO_RECEIVER, members, createKind(THIS_OBJECT, isExplicit), c.context.call);
|
||||
@@ -147,7 +147,7 @@ public class TaskPrioritizer {
|
||||
c.result.addCandidates(members);
|
||||
}
|
||||
|
||||
for (CallableDescriptorCollector<? extends D> callableDescriptorCollector : c.callableDescriptorCollectors) {
|
||||
for (CallableDescriptorCollector<D> callableDescriptorCollector : c.callableDescriptorCollectors) {
|
||||
//member extensions
|
||||
for (ReceiverValue implicitReceiver : implicitReceivers) {
|
||||
addMemberExtensionCandidates(implicitReceiver, explicitReceiver,
|
||||
@@ -169,10 +169,10 @@ public class TaskPrioritizer {
|
||||
private static <D extends CallableDescriptor, F extends D> void addMemberExtensionCandidates(
|
||||
@NotNull ReceiverValue thisObject,
|
||||
@NotNull ReceiverValue receiverParameter,
|
||||
@NotNull CallableDescriptorCollector<? extends D> callableDescriptorCollector, TaskPrioritizerContext<D, F> c,
|
||||
@NotNull CallableDescriptorCollector<D> callableDescriptorCollector, TaskPrioritizerContext<D, F> c,
|
||||
@NotNull ExplicitReceiverKind receiverKind
|
||||
) {
|
||||
Collection<? extends D> memberExtensions = callableDescriptorCollector.getNonMembersByName(
|
||||
Collection<D> memberExtensions = callableDescriptorCollector.getNonMembersByName(
|
||||
thisObject.getType().getMemberScope(), c.name, c.context.trace);
|
||||
c.result.addCandidates(convertWithReceivers(
|
||||
memberExtensions, thisObject, receiverParameter, receiverKind, c.context.call));
|
||||
@@ -184,7 +184,7 @@ public class TaskPrioritizer {
|
||||
) {
|
||||
List<Collection<ResolutionCandidate<D>>> localsList = Lists.newArrayList();
|
||||
List<Collection<ResolutionCandidate<D>>> nonlocalsList = Lists.newArrayList();
|
||||
for (CallableDescriptorCollector<? extends D> callableDescriptorCollector : c.callableDescriptorCollectors) {
|
||||
for (CallableDescriptorCollector<D> callableDescriptorCollector : c.callableDescriptorCollectors) {
|
||||
|
||||
Collection<ResolutionCandidate<D>> members = convertWithImpliedThisAndNoReceiver(
|
||||
c.scope, callableDescriptorCollector.getNonExtensionsByName(c.scope, c.name, c.context.trace), c.context.call);
|
||||
@@ -253,13 +253,13 @@ public class TaskPrioritizer {
|
||||
@NotNull TaskPrioritizerContext<D, F> c,
|
||||
@NotNull ExplicitReceiverKind receiverKind
|
||||
) {
|
||||
for (CallableDescriptorCollector<? extends D> callableDescriptorCollector : c.callableDescriptorCollectors) {
|
||||
for (CallableDescriptorCollector<D> callableDescriptorCollector : c.callableDescriptorCollectors) {
|
||||
addMemberExtensionCandidates(thisObject, receiverParameter, callableDescriptorCollector, c, receiverKind);
|
||||
}
|
||||
}
|
||||
|
||||
private static <D extends CallableDescriptor> Collection<ResolutionCandidate<D>> convertWithReceivers(
|
||||
@NotNull Collection<? extends D> descriptors,
|
||||
@NotNull Collection<D> descriptors,
|
||||
@NotNull ReceiverValue thisObject,
|
||||
@NotNull ReceiverValue receiverParameter,
|
||||
@NotNull ExplicitReceiverKind explicitReceiverKind,
|
||||
@@ -271,7 +271,7 @@ public class TaskPrioritizer {
|
||||
}
|
||||
|
||||
private static <D extends CallableDescriptor> void convertWithReceivers(
|
||||
@NotNull Collection<? extends D> descriptors,
|
||||
@NotNull Collection<D> descriptors,
|
||||
@NotNull ReceiverValue thisObject,
|
||||
@NotNull ReceiverValue receiverParameter,
|
||||
@NotNull Collection<ResolutionCandidate<D>> result,
|
||||
@@ -383,14 +383,14 @@ public class TaskPrioritizer {
|
||||
@NotNull public final ResolutionTaskHolder<D, F> result;
|
||||
@NotNull public final BasicCallResolutionContext context;
|
||||
@NotNull public final JetScope scope;
|
||||
@NotNull public final List<CallableDescriptorCollector<? extends D>> callableDescriptorCollectors;
|
||||
@NotNull public final CallableDescriptorCollectors<D> callableDescriptorCollectors;
|
||||
|
||||
private TaskPrioritizerContext(
|
||||
@NotNull Name name,
|
||||
@NotNull ResolutionTaskHolder<D, F> result,
|
||||
@NotNull BasicCallResolutionContext context,
|
||||
@NotNull JetScope scope,
|
||||
@NotNull List<CallableDescriptorCollector<? extends D>> callableDescriptorCollectors
|
||||
@NotNull CallableDescriptorCollectors<D> callableDescriptorCollectors
|
||||
) {
|
||||
this.name = name;
|
||||
this.result = result;
|
||||
|
||||
Reference in New Issue
Block a user