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:
committed by
Space Team
parent
ec3e13a091
commit
adc5fe6e4e
@@ -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)
|
|
||||||
|
|||||||
+2
-10
@@ -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() =
|
||||||
|
|||||||
Reference in New Issue
Block a user