From c456ab0f740cf292190519e14ab66bb227f09db1 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 3 Nov 2015 15:16:19 +0300 Subject: [PATCH] Minor: refactoring ExpressionTypingUtils#checkVariableShadowing -- inline the search older descriptor --- .../ControlStructureTypingVisitor.java | 18 ++++++------------ .../expressions/ExpressionTypingUtils.java | 12 ++++++++---- .../ExpressionTypingVisitorForStatements.java | 6 +----- .../expressions/MultiDeclarationResolver.kt | 6 ++---- 4 files changed, 17 insertions(+), 25 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingVisitor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingVisitor.java index 09e6e7542e5..30ff68a359d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingVisitor.java @@ -24,9 +24,11 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.descriptors.*; -import org.jetbrains.kotlin.diagnostics.Errors; import org.jetbrains.kotlin.psi.*; -import org.jetbrains.kotlin.resolve.*; +import org.jetbrains.kotlin.resolve.BindingContext; +import org.jetbrains.kotlin.resolve.BindingContextUtils; +import org.jetbrains.kotlin.resolve.ModifierCheckerCore; +import org.jetbrains.kotlin.resolve.ModifiersChecker; import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo; @@ -36,13 +38,12 @@ import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope; import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver; -import org.jetbrains.kotlin.resolve.scopes.utils.ScopeUtilsKt; import org.jetbrains.kotlin.types.CommonSupertypes; import org.jetbrains.kotlin.types.ErrorUtils; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.TypeUtils; -import org.jetbrains.kotlin.types.expressions.ControlStructureTypingUtils.ResolveConstruct; import org.jetbrains.kotlin.types.checker.KotlinTypeChecker; +import org.jetbrains.kotlin.types.expressions.ControlStructureTypingUtils.ResolveConstruct; import org.jetbrains.kotlin.types.expressions.typeInfoFactory.TypeInfoFactoryKt; import java.util.ArrayList; @@ -453,15 +454,8 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor { resolveLocalVariableDescriptor(loopParameter, expectedParameterType, context.trace, context.scope); } - { - // http://youtrack.jetbrains.net/issue/KT-527 + checkVariableShadowing(context.scope, context.trace, variableDescriptor); - VariableDescriptor olderVariable = ScopeUtilsKt.findLocalVariable(context.scope, variableDescriptor.getName()); - if (olderVariable != null && isLocal(context.scope.getOwnerDescriptor(), olderVariable)) { - PsiElement declaration = DescriptorToSourceUtils.descriptorToDeclaration(variableDescriptor); - context.trace.report(Errors.NAME_SHADOWING.on(declaration, variableDescriptor.getName().asString())); - } - } return variableDescriptor; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingUtils.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingUtils.java index 97113e5c39e..c1b9438020e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingUtils.java @@ -32,10 +32,12 @@ import org.jetbrains.kotlin.diagnostics.Errors; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.*; +import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope; import org.jetbrains.kotlin.resolve.scopes.receivers.ClassReceiver; import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue; +import org.jetbrains.kotlin.resolve.scopes.utils.ScopeUtilsKt; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.expressions.typeInfoFactory.TypeInfoFactoryKt; @@ -122,14 +124,16 @@ public class ExpressionTypingUtils { } public static void checkVariableShadowing( - @NotNull ExpressionTypingContext context, - @NotNull VariableDescriptor variableDescriptor, - @Nullable VariableDescriptor oldDescriptor + @NotNull LexicalScope scope, + @NotNull BindingTrace trace, + @NotNull VariableDescriptor variableDescriptor ) { + VariableDescriptor oldDescriptor = ScopeUtilsKt.findLocalVariable(scope, variableDescriptor.getName()); + if (oldDescriptor != null && isLocal(variableDescriptor.getContainingDeclaration(), oldDescriptor)) { PsiElement declaration = DescriptorToSourceUtils.descriptorToDeclaration(variableDescriptor); if (declaration != null) { - context.trace.report(Errors.NAME_SHADOWING.on(declaration, variableDescriptor.getName().asString())); + trace.report(Errors.NAME_SHADOWING.on(declaration, variableDescriptor.getName().asString())); } } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java index 95ee20ed842..b41e2330357 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java @@ -40,7 +40,6 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory; import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope; import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver; -import org.jetbrains.kotlin.resolve.scopes.utils.ScopeUtilsKt; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.TypeUtils; import org.jetbrains.kotlin.types.checker.KotlinTypeChecker; @@ -153,10 +152,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito typeInfo = TypeInfoFactoryKt.noTypeInfo(context); } - { - VariableDescriptor olderVariable = ScopeUtilsKt.findLocalVariable(scope, propertyDescriptor.getName()); - ExpressionTypingUtils.checkVariableShadowing(context, propertyDescriptor, olderVariable); - } + ExpressionTypingUtils.checkVariableShadowing(context.scope, context.trace, propertyDescriptor); scope.addVariableDescriptor(propertyDescriptor); components.modifiersChecker.withTrace(context.trace).checkModifiersForLocalDeclaration(property, propertyDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/MultiDeclarationResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/MultiDeclarationResolver.kt index b3c88dc8d3b..89f991b2fcf 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/MultiDeclarationResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/MultiDeclarationResolver.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.resolve.TypeResolver import org.jetbrains.kotlin.resolve.dataClassUtils.createComponentName import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue -import org.jetbrains.kotlin.resolve.scopes.utils.findLocalVariable import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.types.KotlinType @@ -75,8 +74,7 @@ public class MultiDeclarationResolver( } val variableDescriptor = descriptorResolver.resolveLocalVariableDescriptorWithType(writableScope, entry, componentType, context.trace) - val olderVariable = writableScope.findLocalVariable(variableDescriptor.getName()) - ExpressionTypingUtils.checkVariableShadowing(context, variableDescriptor, olderVariable) + ExpressionTypingUtils.checkVariableShadowing(writableScope, context.trace, variableDescriptor) writableScope.addVariableDescriptor(variableDescriptor) } @@ -86,4 +84,4 @@ public class MultiDeclarationResolver( val entryTypeRef = entry.getTypeReference() ?: return TypeUtils.NO_EXPECTED_TYPE return typeResolver.resolveType(context.scope, entryTypeRef, context.trace, true) } -} \ No newline at end of file +}