private VariableDescriptor createLoopParameterDescriptor( KtParameter loopParameter, KotlinType expectedParameterType, ExpressionTypingContext context) { components .modifiersChecker .withTrace(context.trace) .checkParameterHasNoValOrVar(loopParameter, VAL_OR_VAR_ON_LOOP_PARAMETER); KtTypeReference typeReference = loopParameter.getTypeReference(); VariableDescriptor variableDescriptor; if (typeReference != null) { variableDescriptor = components.descriptorResolver.resolveLocalVariableDescriptor( context.scope, loopParameter, context.trace); KotlinType actualParameterType = variableDescriptor.getType(); if (expectedParameterType != null && !KotlinTypeChecker.DEFAULT.isSubtypeOf(expectedParameterType, actualParameterType)) { context.trace.report( TYPE_MISMATCH_IN_FOR_LOOP.on( typeReference, expectedParameterType, actualParameterType)); } } else { if (expectedParameterType == null) { expectedParameterType = ErrorUtils.createErrorType("Error"); } variableDescriptor = components.descriptorResolver.resolveLocalVariableDescriptor( loopParameter, expectedParameterType, context.trace, context.scope); } checkVariableShadowing(context.scope, context.trace, variableDescriptor); return variableDescriptor; }