Minor, fix warnings and formatting in QualifiedExpressionResolver

This commit is contained in:
Alexander Udalov
2014-09-03 16:19:29 +04:00
parent 76986f850f
commit cb81023469
@@ -51,7 +51,7 @@ public class QualifiedExpressionResolver {
EVERYTHING EVERYTHING
} }
@KotlinSignature( "fun analyseImportReference(importDirective: JetImportDirective, scope: JetScope, trace: BindingTrace, module: ModuleDescriptor): Collection<out DeclarationDescriptor>") @KotlinSignature("fun analyseImportReference(importDirective: JetImportDirective, scope: JetScope, trace: BindingTrace, module: ModuleDescriptor): Collection<out DeclarationDescriptor>")
@NotNull @NotNull
public Collection<? extends DeclarationDescriptor> analyseImportReference( public Collection<? extends DeclarationDescriptor> analyseImportReference(
@NotNull JetImportDirective importDirective, @NotNull JetImportDirective importDirective,
@@ -119,10 +119,12 @@ public class QualifiedExpressionResolver {
return descriptors; return descriptors;
} }
private boolean canImportMembersFrom(@NotNull Collection<? extends DeclarationDescriptor> descriptors, private static boolean canImportMembersFrom(
@NotNull JetSimpleNameExpression reference, @NotNull BindingTrace trace, @NotNull LookupMode lookupMode @NotNull Collection<? extends DeclarationDescriptor> descriptors,
@NotNull JetSimpleNameExpression reference,
@NotNull BindingTrace trace,
@NotNull LookupMode lookupMode
) { ) {
if (lookupMode == LookupMode.ONLY_CLASSES) { if (lookupMode == LookupMode.ONLY_CLASSES) {
return true; return true;
} }
@@ -130,7 +132,9 @@ public class QualifiedExpressionResolver {
if (descriptors.size() == 1) { if (descriptors.size() == 1) {
return canImportMembersFrom(descriptors.iterator().next(), reference, trace, lookupMode); return canImportMembersFrom(descriptors.iterator().next(), reference, trace, lookupMode);
} }
TemporaryBindingTrace temporaryTrace = TemporaryBindingTrace.create(trace, "trace to find out if members can be imported from", reference);
TemporaryBindingTrace temporaryTrace =
TemporaryBindingTrace.create(trace, "trace to find out if members can be imported from", reference);
boolean canImport = false; boolean canImport = false;
for (DeclarationDescriptor descriptor : descriptors) { for (DeclarationDescriptor descriptor : descriptors) {
canImport |= canImportMembersFrom(descriptor, reference, temporaryTrace, lookupMode); canImport |= canImportMembersFrom(descriptor, reference, temporaryTrace, lookupMode);
@@ -141,8 +145,11 @@ public class QualifiedExpressionResolver {
return canImport; return canImport;
} }
private boolean canImportMembersFrom(@NotNull DeclarationDescriptor descriptor, private static boolean canImportMembersFrom(
@NotNull JetSimpleNameExpression reference, @NotNull BindingTrace trace, @NotNull LookupMode lookupMode @NotNull DeclarationDescriptor descriptor,
@NotNull JetSimpleNameExpression reference,
@NotNull BindingTrace trace,
@NotNull LookupMode lookupMode
) { ) {
assert lookupMode == LookupMode.EVERYTHING; assert lookupMode == LookupMode.EVERYTHING;
@@ -157,13 +164,16 @@ public class QualifiedExpressionResolver {
} }
@NotNull @NotNull
public Collection<? extends DeclarationDescriptor> lookupDescriptorsForUserType(@NotNull JetUserType userType, public Collection<? extends DeclarationDescriptor> lookupDescriptorsForUserType(
@NotNull JetScope outerScope, @NotNull BindingTrace trace) { @NotNull JetUserType userType,
@NotNull JetScope outerScope,
@NotNull BindingTrace trace
) {
if (userType.isAbsoluteInRootPackage()) { if (userType.isAbsoluteInRootPackage()) {
trace.report(Errors.UNSUPPORTED.on(userType, "package")); trace.report(Errors.UNSUPPORTED.on(userType, "package"));
return Collections.emptyList(); return Collections.emptyList();
} }
JetSimpleNameExpression referenceExpression = userType.getReferenceExpression(); JetSimpleNameExpression referenceExpression = userType.getReferenceExpression();
if (referenceExpression == null) { if (referenceExpression == null) {
return Collections.emptyList(); return Collections.emptyList();
@@ -177,19 +187,26 @@ public class QualifiedExpressionResolver {
} }
@NotNull @NotNull
public Collection<? extends DeclarationDescriptor> lookupDescriptorsForQualifiedExpression(@NotNull JetQualifiedExpression importedReference, public Collection<? extends DeclarationDescriptor> lookupDescriptorsForQualifiedExpression(
@NotNull JetScope outerScope, @NotNull JetScope scopeToCheckVisibility, @NotNull BindingTrace trace, @NotNull LookupMode lookupMode, boolean storeResult) { @NotNull JetQualifiedExpression importedReference,
@NotNull JetScope outerScope,
@NotNull JetScope scopeToCheckVisibility,
@NotNull BindingTrace trace,
@NotNull LookupMode lookupMode,
boolean storeResult
) {
JetExpression receiverExpression = importedReference.getReceiverExpression(); JetExpression receiverExpression = importedReference.getReceiverExpression();
Collection<? extends DeclarationDescriptor> declarationDescriptors; Collection<? extends DeclarationDescriptor> declarationDescriptors;
if (receiverExpression instanceof JetQualifiedExpression) { if (receiverExpression instanceof JetQualifiedExpression) {
declarationDescriptors = lookupDescriptorsForQualifiedExpression((JetQualifiedExpression)receiverExpression, outerScope, scopeToCheckVisibility, trace, declarationDescriptors =
lookupMode, storeResult); lookupDescriptorsForQualifiedExpression((JetQualifiedExpression) receiverExpression, outerScope, scopeToCheckVisibility,
trace, lookupMode, storeResult);
} }
else { else {
assert receiverExpression instanceof JetSimpleNameExpression; assert receiverExpression instanceof JetSimpleNameExpression;
declarationDescriptors = lookupDescriptorsForSimpleNameReference((JetSimpleNameExpression)receiverExpression, outerScope, scopeToCheckVisibility, trace, declarationDescriptors =
lookupMode, true, storeResult); lookupDescriptorsForSimpleNameReference((JetSimpleNameExpression) receiverExpression, outerScope,
scopeToCheckVisibility, trace, lookupMode, true, storeResult);
} }
JetExpression selectorExpression = importedReference.getSelectorExpression(); JetExpression selectorExpression = importedReference.getSelectorExpression();
@@ -207,20 +224,24 @@ public class QualifiedExpressionResolver {
} }
@NotNull @NotNull
private Collection<? extends DeclarationDescriptor> lookupSelectorDescriptors(@NotNull JetSimpleNameExpression selector, private static Collection<? extends DeclarationDescriptor> lookupSelectorDescriptors(
@NotNull Collection<? extends DeclarationDescriptor> declarationDescriptors, @NotNull BindingTrace trace, @NotNull JetSimpleNameExpression selector,
@NotNull JetScope scopeToCheckVisibility, @NotNull LookupMode lookupMode, boolean storeResult) { @NotNull Collection<? extends DeclarationDescriptor> declarationDescriptors,
@NotNull BindingTrace trace,
@NotNull JetScope scopeToCheckVisibility,
@NotNull LookupMode lookupMode,
boolean storeResult
) {
Set<SuccessfulLookupResult> results = Sets.newHashSet(); Set<SuccessfulLookupResult> results = Sets.newHashSet();
for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) { for (DeclarationDescriptor declarationDescriptor : declarationDescriptors) {
if (declarationDescriptor instanceof PackageViewDescriptor) { if (declarationDescriptor instanceof PackageViewDescriptor) {
addResult(results, lookupSimpleNameReference(selector, ((PackageViewDescriptor)declarationDescriptor).getMemberScope(), addResult(results, lookupSimpleNameReference(selector, ((PackageViewDescriptor) declarationDescriptor).getMemberScope(),
lookupMode, true)); lookupMode, true));
} }
if (declarationDescriptor instanceof ClassDescriptor) { if (declarationDescriptor instanceof ClassDescriptor) {
addResult(results, lookupSimpleNameReference(selector, getAppropriateScope((ClassDescriptor)declarationDescriptor, addResult(results, lookupSimpleNameReference(selector, getAppropriateScope((ClassDescriptor) declarationDescriptor,
lookupMode), lookupMode, false)); lookupMode), lookupMode, false));
ClassDescriptor classObjectDescriptor = ((ClassDescriptor)declarationDescriptor).getClassObjectDescriptor(); ClassDescriptor classObjectDescriptor = ((ClassDescriptor) declarationDescriptor).getClassObjectDescriptor();
if (classObjectDescriptor != null) { if (classObjectDescriptor != null) {
addResult(results, lookupSimpleNameReference(selector, getAppropriateScope(classObjectDescriptor, lookupMode), addResult(results, lookupSimpleNameReference(selector, getAppropriateScope(classObjectDescriptor, lookupMode),
lookupMode, false)); lookupMode, false));
@@ -231,30 +252,42 @@ public class QualifiedExpressionResolver {
} }
@NotNull @NotNull
private JetScope getAppropriateScope(@NotNull ClassDescriptor classDescriptor, @NotNull LookupMode lookupMode) { private static JetScope getAppropriateScope(@NotNull ClassDescriptor classDescriptor, @NotNull LookupMode lookupMode) {
return lookupMode == LookupMode.ONLY_CLASSES ? classDescriptor.getUnsubstitutedInnerClassesScope() : classDescriptor.getDefaultType().getMemberScope(); return lookupMode == LookupMode.ONLY_CLASSES
? classDescriptor.getUnsubstitutedInnerClassesScope()
: classDescriptor.getDefaultType().getMemberScope();
} }
private void addResult(@NotNull Set<SuccessfulLookupResult> results, @NotNull LookupResult result) { private static void addResult(@NotNull Set<SuccessfulLookupResult> results, @NotNull LookupResult result) {
if (result == LookupResult.EMPTY) return; if (result == LookupResult.EMPTY) return;
results.add((SuccessfulLookupResult)result); results.add((SuccessfulLookupResult) result);
} }
@NotNull @NotNull
public Collection<? extends DeclarationDescriptor> lookupDescriptorsForSimpleNameReference(@NotNull JetSimpleNameExpression referenceExpression, @SuppressWarnings("MethodMayBeStatic")
@NotNull JetScope outerScope, @NotNull JetScope scopeToCheckVisibility, @NotNull BindingTrace trace, @NotNull LookupMode lookupMode, boolean packageLevel, boolean storeResult) { public Collection<? extends DeclarationDescriptor> lookupDescriptorsForSimpleNameReference(
@NotNull JetSimpleNameExpression referenceExpression,
@NotNull JetScope outerScope,
@NotNull JetScope scopeToCheckVisibility,
@NotNull BindingTrace trace,
@NotNull LookupMode lookupMode,
boolean packageLevel,
boolean storeResult
) {
LookupResult lookupResult = lookupSimpleNameReference(referenceExpression, outerScope, lookupMode, packageLevel); LookupResult lookupResult = lookupSimpleNameReference(referenceExpression, outerScope, lookupMode, packageLevel);
if (lookupResult == LookupResult.EMPTY) return Collections.emptyList(); if (lookupResult == LookupResult.EMPTY) return Collections.emptyList();
return filterAndStoreResolutionResult(Collections.singletonList((SuccessfulLookupResult)lookupResult), referenceExpression, trace, scopeToCheckVisibility, return filterAndStoreResolutionResult(Collections.singletonList((SuccessfulLookupResult) lookupResult), referenceExpression, trace,
lookupMode, storeResult); scopeToCheckVisibility, lookupMode, storeResult);
} }
@NotNull @NotNull
private LookupResult lookupSimpleNameReference(@NotNull JetSimpleNameExpression referenceExpression, private static LookupResult lookupSimpleNameReference(
@NotNull JetScope outerScope, @NotNull LookupMode lookupMode, boolean packageLevel) { @NotNull JetSimpleNameExpression referenceExpression,
@NotNull JetScope outerScope,
@NotNull LookupMode lookupMode,
boolean packageLevel
) {
Name referencedName = referenceExpression.getReferencedNameAsName(); Name referencedName = referenceExpression.getReferencedNameAsName();
Set<DeclarationDescriptor> descriptors = Sets.newHashSet(); Set<DeclarationDescriptor> descriptors = Sets.newHashSet();
@@ -281,13 +314,18 @@ public class QualifiedExpressionResolver {
} }
@NotNull @NotNull
private Collection<? extends DeclarationDescriptor> filterAndStoreResolutionResult(@NotNull Collection<SuccessfulLookupResult> lookupResults, private static Collection<? extends DeclarationDescriptor> filterAndStoreResolutionResult(
@NotNull JetSimpleNameExpression referenceExpression, @NotNull final BindingTrace trace, @NotNull JetScope scopeToCheckVisibility, @NotNull Collection<SuccessfulLookupResult> lookupResults,
@NotNull LookupMode lookupMode, boolean storeResult) { @NotNull JetSimpleNameExpression referenceExpression,
@NotNull BindingTrace trace,
@NotNull JetScope scopeToCheckVisibility,
@NotNull LookupMode lookupMode,
boolean storeResult
) {
if (lookupResults.isEmpty()) { if (lookupResults.isEmpty()) {
return Collections.emptyList(); return Collections.emptyList();
} }
Collection<DeclarationDescriptor> descriptors = Sets.newLinkedHashSet(); Collection<DeclarationDescriptor> descriptors = Sets.newLinkedHashSet();
for (SuccessfulLookupResult lookupResult : lookupResults) { for (SuccessfulLookupResult lookupResult : lookupResults) {
descriptors.addAll(lookupResult.descriptors); descriptors.addAll(lookupResult.descriptors);
@@ -327,13 +365,14 @@ public class QualifiedExpressionResolver {
return filteredDescriptors; return filteredDescriptors;
} }
private void storeResolutionResult(@NotNull Collection<? extends DeclarationDescriptor> descriptors, private static void storeResolutionResult(
@NotNull Collection<? extends DeclarationDescriptor> descriptors,
@NotNull Collection<? extends DeclarationDescriptor> canBeImportedDescriptors, @NotNull Collection<? extends DeclarationDescriptor> canBeImportedDescriptors,
@NotNull JetSimpleNameExpression referenceExpression, @NotNull JetSimpleNameExpression referenceExpression,
@NotNull Collection<JetScope> possibleResolutionScopes, @NotNull Collection<JetScope> possibleResolutionScopes,
@NotNull BindingTrace trace, @NotNull BindingTrace trace,
@NotNull JetScope scopeToCheckVisibility) { @NotNull JetScope scopeToCheckVisibility
) {
assert canBeImportedDescriptors.size() <= descriptors.size(); assert canBeImportedDescriptors.size() <= descriptors.size();
assert !possibleResolutionScopes.isEmpty(); assert !possibleResolutionScopes.isEmpty();
//todo completion here needs all possible resolution scopes, if there are many //todo completion here needs all possible resolution scopes, if there are many
@@ -386,7 +425,7 @@ public class QualifiedExpressionResolver {
* *
* @return <code>true</code> if method has successfully resolved ambiguity * @return <code>true</code> if method has successfully resolved ambiguity
*/ */
private boolean resolveClassPackageAmbiguity( private static boolean resolveClassPackageAmbiguity(
@NotNull Collection<? extends DeclarationDescriptor> filteredDescriptors, @NotNull Collection<? extends DeclarationDescriptor> filteredDescriptors,
@NotNull JetSimpleNameExpression referenceExpression, @NotNull JetSimpleNameExpression referenceExpression,
@NotNull JetScope resolutionScope, @NotNull JetScope resolutionScope,
@@ -420,10 +459,16 @@ public class QualifiedExpressionResolver {
return false; return false;
} }
private void checkVisibility(@NotNull DeclarationDescriptorWithVisibility descriptor, @NotNull BindingTrace trace, private static void checkVisibility(
@NotNull JetSimpleNameExpression referenceExpression, @NotNull JetScope scopeToCheckVisibility) { @NotNull DeclarationDescriptorWithVisibility descriptor,
@NotNull BindingTrace trace,
@NotNull JetSimpleNameExpression referenceExpression,
@NotNull JetScope scopeToCheckVisibility
) {
if (!Visibilities.isVisible(descriptor, scopeToCheckVisibility.getContainingDeclaration())) { if (!Visibilities.isVisible(descriptor, scopeToCheckVisibility.getContainingDeclaration())) {
trace.report(INVISIBLE_REFERENCE.on(referenceExpression, descriptor, descriptor.getVisibility(), descriptor.getContainingDeclaration())); //noinspection ConstantConditions
trace.report(INVISIBLE_REFERENCE.on(referenceExpression, descriptor, descriptor.getVisibility(),
descriptor.getContainingDeclaration()));
} }
} }