Frontend: use AdditionalCheckerProvider instead of CallResolverExtensionProvider
This commit is contained in:
+5
-6
@@ -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<AnnotationChecker> = listOf(
|
||||
PlatformStaticAnnotationChecker(), LocalFunInlineChecker(), ReifiedTypeParameterAnnotationChecker(), NativeFunChecker()
|
||||
)
|
||||
}
|
||||
public object JavaDeclarationCheckerProvider : AdditionalCheckerProvider(
|
||||
annotationCheckers = listOf(PlatformStaticAnnotationChecker(), LocalFunInlineChecker(), ReifiedTypeParameterAnnotationChecker(), NativeFunChecker()),
|
||||
additionalCallCheckers = listOf(NeedSyntheticChecker())
|
||||
)
|
||||
|
||||
public class LocalFunInlineChecker : AnnotationChecker {
|
||||
|
||||
|
||||
@@ -16,12 +16,20 @@
|
||||
|
||||
package org.jetbrains.kotlin.resolve
|
||||
|
||||
public trait AdditionalCheckerProvider {
|
||||
import org.jetbrains.annotations.ReadOnly
|
||||
|
||||
public val annotationCheckers: List<AnnotationChecker>
|
||||
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<AnnotationChecker> = listOf()
|
||||
}
|
||||
public abstract class AdditionalCheckerProvider(
|
||||
public val annotationCheckers: List<AnnotationChecker>,
|
||||
additionalCallCheckers: List<CallChecker>
|
||||
) {
|
||||
|
||||
public val callCheckers: List<CallChecker> = DEFAULT_CALL_CHECKERS + additionalCallCheckers
|
||||
|
||||
public object Empty : AdditionalCheckerProvider(listOf(), listOf()) {}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
-41
@@ -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;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -40,7 +40,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
||||
) {
|
||||
return newContext(trace, scope, dataFlowInfo, expectedType,
|
||||
ContextDependency.INDEPENDENT, new ResolutionResultsCacheImpl(),
|
||||
expressionTypingServices.createExtension(scope, false), false);
|
||||
expressionTypingServices.getCallChecker(), false);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+4
-9
@@ -34,10 +34,10 @@ import org.jetbrains.kotlin.psi.*;
|
||||
import org.jetbrains.kotlin.resolve.*;
|
||||
import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver;
|
||||
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.CompositeChecker;
|
||||
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency;
|
||||
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext;
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallResolverExtensionProvider;
|
||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
||||
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator;
|
||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||
@@ -67,7 +67,6 @@ public class ExpressionTypingServices {
|
||||
private DescriptorResolver descriptorResolver;
|
||||
private TypeResolver typeResolver;
|
||||
private AnnotationResolver annotationResolver;
|
||||
private CallResolverExtensionProvider extensionProvider;
|
||||
private PartialBodyResolveProvider partialBodyResolveProvider;
|
||||
private KotlinBuiltIns builtIns;
|
||||
|
||||
@@ -131,11 +130,6 @@ public class ExpressionTypingServices {
|
||||
this.annotationResolver = annotationResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setExtensionProvider(@NotNull CallResolverExtensionProvider extensionProvider) {
|
||||
this.extensionProvider = extensionProvider;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private PartialBodyResolveProvider getPartialBodyResolveProvider() {
|
||||
return partialBodyResolveProvider;
|
||||
@@ -417,7 +411,8 @@ public class ExpressionTypingServices {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public CallChecker createExtension(@NotNull JetScope scope, boolean isAnnotationContext) {
|
||||
return extensionProvider.createExtension(scope == JetScope.Empty.INSTANCE$ ? null : scope.getContainingDeclaration(), isAnnotationContext);
|
||||
public CallChecker getCallChecker() {
|
||||
List<CallChecker> checkers = expressionTypingComponents.additionalCheckerProvider.getCallCheckers();
|
||||
return new CompositeChecker(checkers);
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -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<AnnotationChecker> = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker())
|
||||
}
|
||||
public object KotlinJsDeclarationCheckerProvider : AdditionalCheckerProvider(
|
||||
annotationCheckers = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker()),
|
||||
additionalCallCheckers = listOf()
|
||||
)
|
||||
|
||||
private abstract class AbstractNativeAnnotationsChecker(private val requiredAnnotation: PredefinedAnnotation) : AnnotationChecker {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user