Fix for KT-3684: IllegalAccess on a private property of the outer class

#KT-3684 Fixed
This commit is contained in:
Mikhael Bogdanov
2013-06-18 10:55:53 +04:00
parent 03a818f732
commit 8ac8798266
3 changed files with 25 additions and 3 deletions
@@ -252,7 +252,7 @@ public class OverrideResolver {
@NotNull ClassDescriptor current,
@NotNull DescriptorSink sink
) {
Collection<CallableMemberDescriptor> visibleOverridables = filterVisible(current, overridables);
Collection<CallableMemberDescriptor> visibleOverridables = filterVisibleFakeOverrides(current, overridables);
Modality modality = getMinimalModality(visibleOverridables);
boolean allInvisible = visibleOverridables.isEmpty();
Collection<CallableMemberDescriptor> effectiveOverridden = allInvisible ? overridables : visibleOverridables;
@@ -277,14 +277,15 @@ public class OverrideResolver {
}
@NotNull
private static Collection<CallableMemberDescriptor> filterVisible(
private static Collection<CallableMemberDescriptor> filterVisibleFakeOverrides(
@NotNull final ClassDescriptor current,
@NotNull Collection<CallableMemberDescriptor> toFilter
) {
return Collections2.filter(toFilter, new Predicate<CallableMemberDescriptor>() {
@Override
public boolean apply(@Nullable CallableMemberDescriptor descriptor) {
return Visibilities.isVisible(descriptor, current);
//nested class could capture private member, so check for private visibility added
return descriptor.getVisibility() != Visibilities.PRIVATE && Visibilities.isVisible(descriptor, current);
}
});
}