rr/vd/KT-57514

Revert "Create SimpleFunctionDescriptorImpl under nonCancelableSection"

This reverts commit d959b3a289b24487dba2e36da94a34a0dbb4661e.

Revert "Create PropertyDescriptorImpl under nonCancelableSection"

This reverts commit 362e8c2151c8e18009463fd51b995cce27ac8eb5.

Merge-request: KT-MR-9772
Merged-by: Vladimir Dolzhenko <Vladimir.Dolzhenko@jetbrains.com>
This commit is contained in:
Vladimir Dolzhenko
2023-04-29 06:39:59 +00:00
committed by Space Team
parent ec3e13a091
commit adc5fe6e4e
3 changed files with 382 additions and 429 deletions
@@ -19,8 +19,6 @@ package org.jetbrains.kotlin.resolve;
import com.google.common.collect.HashMultimap; import com.google.common.collect.HashMultimap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.intellij.openapi.diagnostic.ControlFlowException;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import kotlin.Pair; import kotlin.Pair;
@@ -317,7 +315,6 @@ public class DescriptorResolver {
@NotNull Annotations additionalAnnotations, @NotNull Annotations additionalAnnotations,
@Nullable InferenceSession inferenceSession @Nullable InferenceSession inferenceSession
) { ) {
try {
KotlinType varargElementType = null; KotlinType varargElementType = null;
KotlinType variableType = type; KotlinType variableType = type;
if (valueParameter.hasModifier(VARARG_KEYWORD)) { if (valueParameter.hasModifier(VARARG_KEYWORD)) {
@@ -394,13 +391,6 @@ public class DescriptorResolver {
trace.record(BindingContext.VALUE_PARAMETER, valueParameter, valueParameterDescriptor); trace.record(BindingContext.VALUE_PARAMETER, valueParameter, valueParameterDescriptor);
return valueParameterDescriptor; return valueParameterDescriptor;
} }
catch (Exception e) {
if (e instanceof ControlFlowException) {
throw new IllegalStateException("Method should be run under nonCancelableSection", e);
}
throw e;
}
}
@NotNull @NotNull
private Annotations resolveValueParameterAnnotations( private Annotations resolveValueParameterAnnotations(
@@ -923,7 +913,6 @@ public class DescriptorResolver {
annotationSplitter.getOtherAnnotations()) annotationSplitter.getOtherAnnotations())
); );
return ProgressManager.getInstance().computeInNonCancelableSection(() -> {
PropertyDescriptorImpl propertyDescriptor = PropertyDescriptorImpl.create( PropertyDescriptorImpl propertyDescriptor = PropertyDescriptorImpl.create(
container, container,
propertyAnnotations, propertyAnnotations,
@@ -1066,7 +1055,6 @@ public class DescriptorResolver {
); );
trace.record(BindingContext.VARIABLE, variableDeclaration, propertyDescriptor); trace.record(BindingContext.VARIABLE, variableDeclaration, propertyDescriptor);
return propertyDescriptor; return propertyDescriptor;
});
} }
@NotNull @NotNull
@@ -17,8 +17,6 @@
package org.jetbrains.kotlin.resolve package org.jetbrains.kotlin.resolve
import com.google.common.collect.HashMultimap import com.google.common.collect.HashMultimap
import com.intellij.openapi.diagnostic.ControlFlowException
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.util.ThrowableComputable import com.intellij.openapi.util.ThrowableComputable
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.util.AstLoadingFilter import com.intellij.util.AstLoadingFilter
@@ -73,7 +71,6 @@ import org.jetbrains.kotlin.types.isError
import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations
import java.util.* import java.util.*
class FunctionDescriptorResolver( class FunctionDescriptorResolver(
private val typeResolver: TypeResolver, private val typeResolver: TypeResolver,
private val descriptorResolver: DescriptorResolver, private val descriptorResolver: DescriptorResolver,
@@ -132,7 +129,6 @@ class FunctionDescriptorResolver(
CallableMemberDescriptor.Kind.DECLARATION, CallableMemberDescriptor.Kind.DECLARATION,
function.toSourceElement() function.toSourceElement()
) )
return computeInNonCancelableSection {
initializeFunctionDescriptorAndExplicitReturnType( initializeFunctionDescriptorAndExplicitReturnType(
containingDescriptor, containingDescriptor,
scope, scope,
@@ -145,8 +141,7 @@ class FunctionDescriptorResolver(
) )
initializeFunctionReturnTypeBasedOnFunctionBody(scope, function, functionDescriptor, trace, dataFlowInfo, inferenceSession) initializeFunctionReturnTypeBasedOnFunctionBody(scope, function, functionDescriptor, trace, dataFlowInfo, inferenceSession)
BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, function, functionDescriptor) BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, function, functionDescriptor)
functionDescriptor return functionDescriptor
}
} }
private fun initializeFunctionReturnTypeBasedOnFunctionBody( private fun initializeFunctionReturnTypeBasedOnFunctionBody(
@@ -187,7 +182,6 @@ class FunctionDescriptorResolver(
dataFlowInfo: DataFlowInfo, dataFlowInfo: DataFlowInfo,
inferenceSession: InferenceSession? inferenceSession: InferenceSession?
) { ) {
try {
val headerScope = LexicalWritableScope( val headerScope = LexicalWritableScope(
scope, functionDescriptor, true, scope, functionDescriptor, true,
TraceBasedLocalRedeclarationChecker(trace, overloadChecker), LexicalScopeKind.FUNCTION_HEADER TraceBasedLocalRedeclarationChecker(trace, overloadChecker), LexicalScopeKind.FUNCTION_HEADER
@@ -300,12 +294,6 @@ class FunctionDescriptorResolver(
for (valueParameterDescriptor in valueParameterDescriptors) { for (valueParameterDescriptor in valueParameterDescriptors) {
ForceResolveUtil.forceResolveAllContents(valueParameterDescriptor.type.annotations) ForceResolveUtil.forceResolveAllContents(valueParameterDescriptor.type.annotations)
} }
} catch (e: Exception) {
if (e is ControlFlowException) {
throw IllegalStateException("Method should be run under nonCancelableSection", e)
}
throw e
}
} }
private fun getContractProvider( private fun getContractProvider(
@@ -456,6 +444,8 @@ class FunctionDescriptorResolver(
constructorDescriptor.isActual = modifierList?.hasActualModifier() == true || constructorDescriptor.isActual = modifierList?.hasActualModifier() == true ||
// We don't require 'actual' for constructors of actual annotations // We don't require 'actual' for constructors of actual annotations
classDescriptor.kind == ClassKind.ANNOTATION_CLASS && classDescriptor.isActual classDescriptor.kind == ClassKind.ANNOTATION_CLASS && classDescriptor.isActual
if (declarationToTrace is PsiElement)
trace.record(BindingContext.CONSTRUCTOR, declarationToTrace, constructorDescriptor)
val parameterScope = LexicalWritableScope( val parameterScope = LexicalWritableScope(
scope, scope,
constructorDescriptor, constructorDescriptor,
@@ -463,27 +453,20 @@ class FunctionDescriptorResolver(
TraceBasedLocalRedeclarationChecker(trace, overloadChecker), TraceBasedLocalRedeclarationChecker(trace, overloadChecker),
LexicalScopeKind.CONSTRUCTOR_HEADER LexicalScopeKind.CONSTRUCTOR_HEADER
) )
return computeInNonCancelableSection {
if (declarationToTrace is PsiElement)
trace.record(BindingContext.CONSTRUCTOR, declarationToTrace, constructorDescriptor)
val constructor = constructorDescriptor.initialize( val constructor = constructorDescriptor.initialize(
resolveValueParameters( resolveValueParameters(
constructorDescriptor, parameterScope, valueParameters, trace, null, inferenceSession constructorDescriptor, parameterScope, valueParameters, trace, null, inferenceSession
), ),
resolveVisibilityFromModifiers( resolveVisibilityFromModifiers(
modifierList, modifierList,
DescriptorUtils.getDefaultConstructorVisibility( DescriptorUtils.getDefaultConstructorVisibility(classDescriptor, languageVersionSettings.supportsFeature(LanguageFeature.AllowSealedInheritorsInDifferentFilesOfSamePackage))
classDescriptor,
languageVersionSettings.supportsFeature(LanguageFeature.AllowSealedInheritorsInDifferentFilesOfSamePackage)
)
) )
) )
constructor.returnType = classDescriptor.defaultType constructor.returnType = classDescriptor.defaultType
if (DescriptorUtils.isAnnotationClass(classDescriptor)) { if (DescriptorUtils.isAnnotationClass(classDescriptor)) {
CompileTimeConstantUtils.checkConstructorParametersType(valueParameters, trace) CompileTimeConstantUtils.checkConstructorParametersType(valueParameters, trace)
} }
constructor return constructor
}
} }
private fun resolveValueParameters( private fun resolveValueParameters(
@@ -494,7 +477,6 @@ class FunctionDescriptorResolver(
expectedParameterTypes: List<KotlinType>?, expectedParameterTypes: List<KotlinType>?,
inferenceSession: InferenceSession? inferenceSession: InferenceSession?
): List<ValueParameterDescriptor> { ): List<ValueParameterDescriptor> {
try {
val result = ArrayList<ValueParameterDescriptor>() val result = ArrayList<ValueParameterDescriptor>()
for (i in valueParameters.indices) { for (i in valueParameters.indices) {
@@ -545,16 +527,7 @@ class FunctionDescriptorResolver(
result.add(valueParameterDescriptor) result.add(valueParameterDescriptor)
} }
return result return result
} catch (e: Exception) {
if (e is ControlFlowException) {
throw IllegalStateException("Method should be run under nonCancelableSection", e)
}
throw e
}
} }
private data class ContextReceiverTypeWithLabel(val type: KotlinType, val label: Name?) private data class ContextReceiverTypeWithLabel(val type: KotlinType, val label: Name?)
} }
private fun <T> computeInNonCancelableSection(action: () -> T): T =
ProgressManager.getInstance().computeInNonCancelableSection<T, Exception>(action)
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.types.expressions package org.jetbrains.kotlin.types.expressions
import com.google.common.collect.Lists import com.google.common.collect.Lists
import com.intellij.openapi.progress.ProgressManager
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.builtins.* import org.jetbrains.kotlin.builtins.*
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
@@ -210,15 +209,9 @@ internal class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Expre
context: ExpressionTypingContext context: ExpressionTypingContext
): AnonymousFunctionDescriptor { ): AnonymousFunctionDescriptor {
val functionLiteral = expression.functionLiteral val functionLiteral = expression.functionLiteral
val annotations = components.annotationResolver.resolveAnnotationsWithArguments(
context.scope,
expression.getAnnotationEntries(),
context.trace
)
return ProgressManager.getInstance().computeInNonCancelableSection<AnonymousFunctionDescriptor, Exception> {
val functionDescriptor = AnonymousFunctionDescriptor( val functionDescriptor = AnonymousFunctionDescriptor(
context.scope.ownerDescriptor, context.scope.ownerDescriptor,
annotations, components.annotationResolver.resolveAnnotationsWithArguments(context.scope, expression.getAnnotationEntries(), context.trace),
CallableMemberDescriptor.Kind.DECLARATION, functionLiteral.toSourceElement(), CallableMemberDescriptor.Kind.DECLARATION, functionLiteral.toSourceElement(),
context.expectedType.isSuspendFunctionType() context.expectedType.isSuspendFunctionType()
).let { ).let {
@@ -232,8 +225,7 @@ internal class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Expre
ForceResolveUtil.forceResolveAllContents(parameterDescriptor.annotations) ForceResolveUtil.forceResolveAllContents(parameterDescriptor.annotations)
} }
BindingContextUtils.recordFunctionDeclarationToDescriptor(context.trace, functionLiteral, functionDescriptor) BindingContextUtils.recordFunctionDeclarationToDescriptor(context.trace, functionLiteral, functionDescriptor)
functionDescriptor return functionDescriptor
}
} }
private fun KotlinType.isBuiltinFunctionalType() = private fun KotlinType.isBuiltinFunctionalType() =