KT-3257 Bad diagnostics when trying to instantiate a private class
#KT-3257 Fixed
This commit is contained in:
committed by
Nikolay Krasko
parent
d645fcaaa7
commit
4b656d8c8d
@@ -105,17 +105,21 @@ public class Visibilities {
|
||||
}
|
||||
|
||||
public static boolean isVisible(@Nullable DeclarationDescriptorWithVisibility what, @NotNull DeclarationDescriptor from) {
|
||||
return findInvisibleMember(what, from) == null;
|
||||
}
|
||||
|
||||
public static DeclarationDescriptorWithVisibility findInvisibleMember(
|
||||
@Nullable DeclarationDescriptorWithVisibility what,
|
||||
@NotNull DeclarationDescriptor from
|
||||
) {
|
||||
DeclarationDescriptorWithVisibility parent = what;
|
||||
while (parent != null) {
|
||||
if (parent.getVisibility() == LOCAL) {
|
||||
return true;
|
||||
}
|
||||
while (parent != null && parent.getVisibility() != LOCAL) {
|
||||
if (!parent.getVisibility().isVisible(parent, from)) {
|
||||
return false;
|
||||
return parent;
|
||||
}
|
||||
parent = DescriptorUtils.getParentOfType(parent, DeclarationDescriptorWithVisibility.class);
|
||||
}
|
||||
return true;
|
||||
return null;
|
||||
}
|
||||
|
||||
private static final Map<Visibility, Integer> ORDERED_VISIBILITIES = Maps.newHashMap();
|
||||
|
||||
@@ -93,9 +93,12 @@ public class CandidateResolver {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Visibilities.isVisible(candidate, context.scope.getContainingDeclaration())) {
|
||||
|
||||
DeclarationDescriptorWithVisibility invisibleMember =
|
||||
Visibilities.findInvisibleMember(candidate, context.scope.getContainingDeclaration());
|
||||
if (invisibleMember != null) {
|
||||
candidateCall.addStatus(OTHER_ERROR);
|
||||
context.tracing.invisibleMember(context.trace, candidate);
|
||||
context.tracing.invisibleMember(context.trace, invisibleMember);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user