|
22 | 22 | import org.jetbrains.kotlin.JetNodeTypes;
|
23 | 23 | import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
24 | 24 | import org.jetbrains.kotlin.descriptors.*;
|
| 25 | +import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor; |
25 | 26 | import org.jetbrains.kotlin.psi.*;
|
26 | 27 | import org.jetbrains.kotlin.resolve.BindingContext;
|
| 28 | +import org.jetbrains.kotlin.resolve.BindingContextUtils; |
27 | 29 | import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
28 | 30 | import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilPackage;
|
29 | 31 | import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext;
|
@@ -122,12 +124,13 @@ else if (receiverValue == ReceiverValue.NO_RECEIVER) {
|
122 | 124 | @NotNull
|
123 | 125 | public static DataFlowValue createDataFlowValue(
|
124 | 126 | @NotNull VariableDescriptor variableDescriptor,
|
| 127 | + @NotNull BindingContext bindingContext, |
125 | 128 | @Nullable ModuleDescriptor usageContainingModule
|
126 | 129 | ) {
|
127 | 130 | JetType type = variableDescriptor.getType();
|
128 | 131 | return new DataFlowValue(variableDescriptor, type,
|
129 | 132 | isStableVariable(variableDescriptor, usageContainingModule),
|
130 |
| - isLocalVariable(variableDescriptor), |
| 133 | + isLocalVariable(variableDescriptor, bindingContext), |
131 | 134 | getImmanentNullability(type));
|
132 | 135 | }
|
133 | 136 |
|
@@ -237,7 +240,7 @@ private static IdentifierInfo getIdForSimpleNameExpression(
|
237 | 240 | VariableDescriptor variableDescriptor = (VariableDescriptor) declarationDescriptor;
|
238 | 241 | return combineInfo(receiverInfo, createInfo(variableDescriptor,
|
239 | 242 | isStableVariable(variableDescriptor, usageModuleDescriptor),
|
240 |
| - isLocalVariable(variableDescriptor))); |
| 243 | + isLocalVariable(variableDescriptor, bindingContext))); |
241 | 244 | }
|
242 | 245 | if (declarationDescriptor instanceof PackageViewDescriptor) {
|
243 | 246 | return createPackageInfo(declarationDescriptor);
|
@@ -272,12 +275,10 @@ private static IdentifierInfo getIdForThisReceiver(@Nullable DeclarationDescript
|
272 | 275 | return NO_IDENTIFIER_INFO;
|
273 | 276 | }
|
274 | 277 |
|
275 |
| - public static boolean isLocalVariable(@NotNull VariableDescriptor variableDescriptor) { |
276 |
| - if (variableDescriptor instanceof PropertyDescriptor) { |
277 |
| - return false; |
278 |
| - } |
279 |
| - DeclarationDescriptor declaration = variableDescriptor.getContainingDeclaration(); |
280 |
| - if (declaration instanceof FunctionDescriptor) { |
| 278 | + public static boolean isLocalVariable(@NotNull VariableDescriptor variableDescriptor, @NotNull BindingContext bindingContext) { |
| 279 | + if (variableDescriptor instanceof LocalVariableDescriptor) { |
| 280 | + if (BindingContextUtils.isVarCapturedInClosure(bindingContext, variableDescriptor)) |
| 281 | + return false; |
281 | 282 | return true;
|
282 | 283 | }
|
283 | 284 | return false;
|
|
0 commit comments