Fixed scope kind for default values

This commit is contained in:
Stanislav Erokhin
2015-11-09 13:40:19 +03:00
parent a502405779
commit ebc3ccbb2a
3 changed files with 42 additions and 43 deletions
@@ -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<LexicalScopeImpl.InitializeHandler, Unit>() {
@Override
public Unit invoke(LexicalScopeImpl.InitializeHandler handler) {
@@ -787,9 +787,7 @@ public class BodyResolver {
List<ValueParameterDescriptor> 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
@@ -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 {
@@ -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<KtParameter>,
valueParameterDescriptors: List<ValueParameterDescriptor>,
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<KtParameter>,
valueParameterDescriptors: List<ValueParameterDescriptor>,
context: ExpressionTypingContext
) {
for ((descriptor, parameter) in valueParameterDescriptors zip valueParameters) {
ForceResolveUtil.forceResolveAllContents(descriptor.getAnnotations())
resolveDefaultValue(descriptor, parameter, context)
resolveDefaultValue(descriptor, parameter, contextForDefaultValue)
}
}