Fixed scope kind for default values
This commit is contained in:
@@ -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 {
|
||||
|
||||
+11
-11
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user