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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user