From 21e28fa866b541378b278b11a648e278f14ea71c Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 29 Dec 2014 19:31:01 +0300 Subject: [PATCH] Frontend: use AdditionalCheckerProvider instead of CallResolverExtensionProvider --- .../kotlin/JavaDeclarationCheckerProvider.kt | 11 +++-- .../resolve/AdditionalCheckerProvider.kt | 18 +++++--- .../kotlin/resolve/calls/CallResolver.java | 2 +- .../CallResolverExtensionProvider.java | 41 ------------------- .../expressions/ExpressionTypingContext.java | 2 +- .../expressions/ExpressionTypingServices.java | 13 ++---- .../KotlinJsDeclarationCheckerProvider.kt | 8 ++-- 7 files changed, 29 insertions(+), 66 deletions(-) delete mode 100644 compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/CallResolverExtensionProvider.java diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/JavaDeclarationCheckerProvider.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/JavaDeclarationCheckerProvider.kt index f3e605c2771..a9bd2bcfa71 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/JavaDeclarationCheckerProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/JavaDeclarationCheckerProvider.kt @@ -41,13 +41,12 @@ import org.jetbrains.kotlin.resolve.annotations.hasIntrinsicAnnotation import org.jetbrains.kotlin.load.kotlin.nativeDeclarations.NativeFunChecker import org.jetbrains.kotlin.psi.JetPropertyAccessor import org.jetbrains.kotlin.descriptors.MemberDescriptor +import org.jetbrains.kotlin.resolve.calls.checkers.NeedSyntheticChecker -public object JavaDeclarationCheckerProvider : AdditionalCheckerProvider { - - override val annotationCheckers: List = listOf( - PlatformStaticAnnotationChecker(), LocalFunInlineChecker(), ReifiedTypeParameterAnnotationChecker(), NativeFunChecker() - ) -} +public object JavaDeclarationCheckerProvider : AdditionalCheckerProvider( + annotationCheckers = listOf(PlatformStaticAnnotationChecker(), LocalFunInlineChecker(), ReifiedTypeParameterAnnotationChecker(), NativeFunChecker()), + additionalCallCheckers = listOf(NeedSyntheticChecker()) +) public class LocalFunInlineChecker : AnnotationChecker { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AdditionalCheckerProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AdditionalCheckerProvider.kt index a8aad77eff9..d0e9d40608f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AdditionalCheckerProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AdditionalCheckerProvider.kt @@ -16,12 +16,20 @@ package org.jetbrains.kotlin.resolve -public trait AdditionalCheckerProvider { +import org.jetbrains.annotations.ReadOnly - public val annotationCheckers: List +import java.util.Collections +import kotlin.properties.Delegates +import org.jetbrains.kotlin.resolve.calls.checkers.* - public object Empty : AdditionalCheckerProvider { +private val DEFAULT_CALL_CHECKERS = listOf(CapturingInClosureChecker(), InlineCheckerWrapper(), ReifiedTypeParameterSubstitutionChecker()) - override val annotationCheckers: List = listOf() - } +public abstract class AdditionalCheckerProvider( + public val annotationCheckers: List, + additionalCallCheckers: List +) { + + public val callCheckers: List = DEFAULT_CALL_CHECKERS + additionalCallCheckers + + public object Empty : AdditionalCheckerProvider(listOf(), listOf()) {} } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java index 7836ee24c82..9ed4f32fb67 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallResolver.java @@ -219,7 +219,7 @@ public class CallResolver { return resolveFunctionCall( BasicCallResolutionContext.create( trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED, - expressionTypingServices.createExtension(scope, isAnnotationContext), isAnnotationContext) + expressionTypingServices.getCallChecker(), isAnnotationContext) ); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/CallResolverExtensionProvider.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/CallResolverExtensionProvider.java deleted file mode 100644 index afae2516576..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/CallResolverExtensionProvider.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.resolve.calls.checkers; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; -import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor; - -import java.lang.ref.WeakReference; -import java.util.*; - -public class CallResolverExtensionProvider { - - private final static CompositeChecker DEFAULT = - new CompositeChecker(Arrays.asList( - new NeedSyntheticChecker(), - new ReifiedTypeParameterSubstitutionChecker(), - new CapturingInClosureChecker(), - new InlineCheckerWrapper() - )); - - @NotNull - public CallChecker createExtension(@Nullable DeclarationDescriptor descriptor, boolean isAnnotationContext) { - return DEFAULT; - } -} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java index e8170ce5061..43924fb268b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingContext.java @@ -40,7 +40,7 @@ public class ExpressionTypingContext extends ResolutionContext checkers = expressionTypingComponents.additionalCheckerProvider.getCallCheckers(); + return new CompositeChecker(checkers); } } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/KotlinJsDeclarationCheckerProvider.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/KotlinJsDeclarationCheckerProvider.kt index eb454f5b195..a9042c8c602 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/KotlinJsDeclarationCheckerProvider.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/KotlinJsDeclarationCheckerProvider.kt @@ -31,10 +31,12 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf +import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker -public object KotlinJsDeclarationCheckerProvider : AdditionalCheckerProvider { - override val annotationCheckers: List = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker()) -} +public object KotlinJsDeclarationCheckerProvider : AdditionalCheckerProvider( + annotationCheckers = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker()), + additionalCallCheckers = listOf() +) private abstract class AbstractNativeAnnotationsChecker(private val requiredAnnotation: PredefinedAnnotation) : AnnotationChecker {