Fix DescriptorUtils.isLocal semantics

Non-member descriptors, e.g. type parameters, value parameters that defined in local function should be local too
Otherwise a lot of exceptions happens when resolving references within anonymous objects
This commit is contained in:
Denis Zharkov
2015-06-04 10:49:56 +03:00
parent e874ad9cbb
commit 4f85afb3f0
4 changed files with 35 additions and 2 deletions
@@ -69,8 +69,8 @@ public class DescriptorUtils {
*/
public static boolean isLocal(@NotNull DeclarationDescriptor descriptor) {
DeclarationDescriptor current = descriptor;
while (current instanceof MemberDescriptor) {
if (isAnonymousObject(current) || ((DeclarationDescriptorWithVisibility) current).getVisibility() == Visibilities.LOCAL) {
while (current != null) {
if (isAnonymousObject(current) || isDescriptorWithLocalVisibility(current)) {
return true;
}
current = current.getContainingDeclaration();
@@ -78,6 +78,11 @@ public class DescriptorUtils {
return false;
}
private static boolean isDescriptorWithLocalVisibility(DeclarationDescriptor current) {
return current instanceof DeclarationDescriptorWithVisibility &&
((DeclarationDescriptorWithVisibility) current).getVisibility() == Visibilities.LOCAL;
}
@NotNull
public static FqNameUnsafe getFqName(@NotNull DeclarationDescriptor descriptor) {
FqName safe = getFqNameSafeIfPossible(descriptor);