diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java index c72f6ea879f..1a625e59897 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java @@ -563,7 +563,7 @@ public class BodyResolver { final ConstructorDescriptor unsubstitutedPrimaryConstructor ) { return new LexicalScopeImpl(originalScope, unsubstitutedPrimaryConstructor, false, null, - LexicalScopeKind.PRIMARY_CONSTRUCTOR_DEFAULT_VALUE, RedeclarationHandler.DO_NOTHING, + LexicalScopeKind.DEFAULT_VALUE, RedeclarationHandler.DO_NOTHING, new Function1() { @Override public Unit invoke(LexicalScopeImpl.InitializeHandler handler) { @@ -787,9 +787,7 @@ public class BodyResolver { List valueParameterDescriptors = functionDescriptor.getValueParameters(); valueParameterResolver.resolveValueParameters( - valueParameters, valueParameterDescriptors, - ExpressionTypingContext.newContext( - trace, innerScope, outerDataFlowInfo, NO_EXPECTED_TYPE, callChecker) + valueParameters, valueParameterDescriptors, innerScope, outerDataFlowInfo, trace, callChecker ); // Synthetic "field" creation diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt index b437ee40a69..4c4fb9af1a1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt @@ -53,43 +53,44 @@ interface LexicalScope: HierarchicalScope { } } -enum class LexicalScopeKind { - EMPTY, +enum class LexicalScopeKind(val local: Boolean) { + EMPTY(false), - CLASS_HEADER, - CLASS_INHERITANCE, - CONSTRUCTOR_HEADER, - PRIMARY_CONSTRUCTOR_DEFAULT_VALUE, - CLASS_STATIC_SCOPE, - CLASS_MEMBER_SCOPE, - CLASS_INITIALIZER, + CLASS_HEADER(false), + CLASS_INHERITANCE(false), + CONSTRUCTOR_HEADER(false), + CLASS_STATIC_SCOPE(false), + CLASS_MEMBER_SCOPE(false), + CLASS_INITIALIZER(true), - PROPERTY_HEADER, - PROPERTY_INITIALIZER_OR_DELEGATE, - PROPERTY_ACCESSOR, - PROPERTY_DELEGATE_METHOD, + DEFAULT_VALUE(true), - FUNCTION_HEADER, - FUNCTION_INNER_SCOPE, + PROPERTY_HEADER(false), + PROPERTY_INITIALIZER_OR_DELEGATE(true), + PROPERTY_ACCESSOR(true), + PROPERTY_DELEGATE_METHOD(false), - CODE_BLOCK, + FUNCTION_HEADER(false), + FUNCTION_INNER_SCOPE(true), - LEFT_BOOLEAN_EXPRESSION, - RIGHT_BOOLEAN_EXPRESSION, + CODE_BLOCK(true), - THEN, - ELSE, - DO_WHILE, - CATCH, - FOR, - WHILE, - WHEN, + LEFT_BOOLEAN_EXPRESSION(true), + RIGHT_BOOLEAN_EXPRESSION(true), - FILE, - CALLABLE_REFERENCE, + THEN(true), + ELSE(true), + DO_WHILE(true), + CATCH(true), + FOR(true), + WHILE(true), + WHEN(true), + + FILE(false), + CALLABLE_REFERENCE(false), // for tests, KDoc & IDE - SYNTHETIC + SYNTHETIC(false) } interface ImportingScope : HierarchicalScope { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ValueParameterResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ValueParameterResolver.kt index 7305782bc0a..e8bef272236 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ValueParameterResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ValueParameterResolver.kt @@ -22,36 +22,36 @@ import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.DescriptorResolver import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil import org.jetbrains.kotlin.resolve.scopes.LexicalScope +import org.jetbrains.kotlin.resolve.scopes.LexicalScopeImpl +import org.jetbrains.kotlin.resolve.scopes.LexicalScopeKind import org.jetbrains.kotlin.types.TypeUtils public class ValueParameterResolver( private val expressionTypingServices: ExpressionTypingServices, private val constantExpressionEvaluator: ConstantExpressionEvaluator ) { + + @JvmOverloads public fun resolveValueParameters( valueParameters: List, valueParameterDescriptors: List, declaringScope: LexicalScope, dataFlowInfo: DataFlowInfo, - trace: BindingTrace + trace: BindingTrace, + callChecker: CallChecker = CallChecker.DoNothing ) { - resolveValueParameters(valueParameters, valueParameterDescriptors, - ExpressionTypingContext.newContext(trace, declaringScope, dataFlowInfo, TypeUtils.NO_EXPECTED_TYPE) - ) - } + val scopeForDefaultValue = LexicalScopeImpl(declaringScope, declaringScope.ownerDescriptor, false, null, LexicalScopeKind.DEFAULT_VALUE) + + val contextForDefaultValue = ExpressionTypingContext.newContext(trace, scopeForDefaultValue, dataFlowInfo, TypeUtils.NO_EXPECTED_TYPE, callChecker) - public fun resolveValueParameters( - valueParameters: List, - valueParameterDescriptors: List, - context: ExpressionTypingContext - ) { for ((descriptor, parameter) in valueParameterDescriptors zip valueParameters) { ForceResolveUtil.forceResolveAllContents(descriptor.getAnnotations()) - resolveDefaultValue(descriptor, parameter, context) + resolveDefaultValue(descriptor, parameter, contextForDefaultValue) } }