Remove AdditionalTypeChecker from context, inject into points of usage
This commit is contained in:
@@ -43,9 +43,13 @@ public fun StorageComponentContainer.configureModule(
|
|||||||
useInstance(moduleContext.platformToKotlinClassMap)
|
useInstance(moduleContext.platformToKotlinClassMap)
|
||||||
useInstance(additionalCheckerProvider)
|
useInstance(additionalCheckerProvider)
|
||||||
useInstance(additionalCheckerProvider.symbolUsageValidator)
|
useInstance(additionalCheckerProvider.symbolUsageValidator)
|
||||||
|
|
||||||
additionalCheckerProvider.declarationCheckers.forEach {
|
additionalCheckerProvider.declarationCheckers.forEach {
|
||||||
useInstance(it)
|
useInstance(it)
|
||||||
}
|
}
|
||||||
|
additionalCheckerProvider.typeCheckers.forEach {
|
||||||
|
useInstance(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun StorageComponentContainer.configureModule(
|
public fun StorageComponentContainer.configureModule(
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public abstract class AdditionalCheckerProvider(
|
|||||||
|
|
||||||
public val declarationCheckers: List<DeclarationChecker> = DEFAULT_DECLARATION_CHECKERS + additionalDeclarationCheckers
|
public val declarationCheckers: List<DeclarationChecker> = DEFAULT_DECLARATION_CHECKERS + additionalDeclarationCheckers
|
||||||
public val callChecker: CallChecker = CompositeChecker(DEFAULT_CALL_CHECKERS + additionalCallCheckers)
|
public val callChecker: CallChecker = CompositeChecker(DEFAULT_CALL_CHECKERS + additionalCallCheckers)
|
||||||
public val typeChecker: AdditionalTypeChecker = AdditionalTypeChecker.Composite(DEFAULT_TYPE_CHECKERS + additionalTypeCheckers)
|
public val typeCheckers: List<AdditionalTypeChecker> = DEFAULT_TYPE_CHECKERS + additionalTypeCheckers
|
||||||
public val symbolUsageValidator: SymbolUsageValidator = SymbolUsageValidator.Composite(DEFAULT_VALIDATORS + additionalSymbolUsageValidators)
|
public val symbolUsageValidator: SymbolUsageValidator = SymbolUsageValidator.Composite(DEFAULT_VALIDATORS + additionalSymbolUsageValidators)
|
||||||
|
|
||||||
public object DefaultProvider : AdditionalCheckerProvider(listOf(), listOf(), listOf(), listOf()) {}
|
public object DefaultProvider : AdditionalCheckerProvider(listOf(), listOf(), listOf(), listOf()) {}
|
||||||
|
|||||||
@@ -264,8 +264,8 @@ public class CallResolver {
|
|||||||
return resolveFunctionCall(
|
return resolveFunctionCall(
|
||||||
BasicCallResolutionContext.create(
|
BasicCallResolutionContext.create(
|
||||||
trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
||||||
additionalCheckerProvider.getCallChecker(),
|
additionalCheckerProvider.getCallChecker(), isAnnotationContext
|
||||||
additionalCheckerProvider.getTypeChecker(), isAnnotationContext)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -345,7 +345,7 @@ public class CallResolver {
|
|||||||
CallMaker.makeCall(ReceiverValue.NO_RECEIVER, null, call),
|
CallMaker.makeCall(ReceiverValue.NO_RECEIVER, null, call),
|
||||||
NO_EXPECTED_TYPE,
|
NO_EXPECTED_TYPE,
|
||||||
dataFlowInfo, ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
dataFlowInfo, ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
||||||
callChecker, additionalCheckerProvider.getTypeChecker(), false);
|
callChecker, false);
|
||||||
|
|
||||||
if (call.getCalleeExpression() == null) return checkArgumentTypesAndFail(context);
|
if (call.getCalleeExpression() == null) return checkArgumentTypesAndFail(context);
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.resolve.calls.callResolverUtil.getEffectiveExpectedT
|
|||||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.getErasedReceiverType
|
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.getErasedReceiverType
|
||||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isInvokeCallOnExpressionWithBothReceivers
|
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isInvokeCallOnExpressionWithBothReceivers
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.isExplicitSafeCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.isExplicitSafeCall
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.*
|
import org.jetbrains.kotlin.resolve.calls.context.*
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatchStatus
|
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatchStatus
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall
|
||||||
@@ -64,7 +65,8 @@ public class CandidateResolver(
|
|||||||
private val argumentTypeResolver: ArgumentTypeResolver,
|
private val argumentTypeResolver: ArgumentTypeResolver,
|
||||||
private val genericCandidateResolver: GenericCandidateResolver,
|
private val genericCandidateResolver: GenericCandidateResolver,
|
||||||
private val reflectionTypes: ReflectionTypes,
|
private val reflectionTypes: ReflectionTypes,
|
||||||
private val modifiersChecker: ModifiersChecker
|
private val modifiersChecker: ModifiersChecker,
|
||||||
|
private val additionalTypeCheckers: Iterable<AdditionalTypeChecker>
|
||||||
){
|
){
|
||||||
|
|
||||||
public fun <D : CallableDescriptor, F : D> performResolutionForCandidateCall(
|
public fun <D : CallableDescriptor, F : D> performResolutionForCandidateCall(
|
||||||
@@ -463,7 +465,7 @@ public class CandidateResolver(
|
|||||||
tracing.unnecessarySafeCall(trace, receiverArgumentType)
|
tracing.unnecessarySafeCall(trace, receiverArgumentType)
|
||||||
}
|
}
|
||||||
|
|
||||||
additionalTypeChecker.checkReceiver(receiverParameter, receiverArgument, safeAccess, this)
|
additionalTypeCheckers.forEach { it.checkReceiver(receiverParameter, receiverArgument, safeAccess, this) }
|
||||||
|
|
||||||
return SUCCESS
|
return SUCCESS
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-24
@@ -16,34 +16,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.calls.checkers
|
package org.jetbrains.kotlin.resolve.calls.checkers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.psi.JetExpression
|
|
||||||
import org.jetbrains.kotlin.types.JetType
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext
|
|
||||||
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.psi.JetExpression
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.CallResolutionContext
|
import org.jetbrains.kotlin.resolve.calls.context.CallResolutionContext
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
|
import org.jetbrains.kotlin.types.JetType
|
||||||
|
|
||||||
public interface AdditionalTypeChecker {
|
public interface AdditionalTypeChecker {
|
||||||
|
|
||||||
public class Composite(val checkers: List<AdditionalTypeChecker>): AdditionalTypeChecker {
|
|
||||||
override fun checkType(expression: JetExpression, expressionType: JetType, c: ResolutionContext<*>) {
|
|
||||||
for (checker in checkers) {
|
|
||||||
checker.checkType(expression, expressionType, c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun checkReceiver(
|
|
||||||
receiverParameter: ReceiverParameterDescriptor,
|
|
||||||
receiverArgument: ReceiverValue,
|
|
||||||
safeAccess: Boolean,
|
|
||||||
c: CallResolutionContext<*>
|
|
||||||
) {
|
|
||||||
for (checker in checkers) {
|
|
||||||
checker.checkReceiver(receiverParameter, receiverArgument, safeAccess, c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun checkType(expression: JetExpression, expressionType: JetType, c: ResolutionContext<*>)
|
fun checkType(expression: JetExpression, expressionType: JetType, c: ResolutionContext<*>)
|
||||||
fun checkReceiver(
|
fun checkReceiver(
|
||||||
receiverParameter: ReceiverParameterDescriptor,
|
receiverParameter: ReceiverParameterDescriptor,
|
||||||
|
|||||||
+5
-8
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.kotlin.psi.Call;
|
import org.jetbrains.kotlin.psi.Call;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.StatementFilter;
|
import org.jetbrains.kotlin.resolve.StatementFilter;
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker;
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
||||||
@@ -40,14 +39,13 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
boolean isAnnotationContext,
|
boolean isAnnotationContext,
|
||||||
boolean collectAllCandidates,
|
boolean collectAllCandidates,
|
||||||
boolean insideSafeCallChain
|
boolean insideSafeCallChain
|
||||||
) {
|
) {
|
||||||
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
||||||
dataFlowInfoForArguments, callChecker, additionalTypeChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
dataFlowInfoForArguments, callChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -60,12 +58,11 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
@NotNull ContextDependency contextDependency,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull CheckArgumentTypesMode checkArguments,
|
@NotNull CheckArgumentTypesMode checkArguments,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
|
||||||
boolean isAnnotationContext
|
boolean isAnnotationContext
|
||||||
) {
|
) {
|
||||||
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
return new BasicCallResolutionContext(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||||
new ResolutionResultsCacheImpl(), null,
|
new ResolutionResultsCacheImpl(), null,
|
||||||
callChecker, additionalTypeChecker, StatementFilter.NONE, isAnnotationContext, false, false);
|
callChecker, StatementFilter.NONE, isAnnotationContext, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -76,7 +73,7 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
return new BasicCallResolutionContext(
|
return new BasicCallResolutionContext(
|
||||||
context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, checkArguments,
|
context.trace, context.scope, call, context.expectedType, context.dataFlowInfo, context.contextDependency, checkArguments,
|
||||||
context.resolutionResultsCache, dataFlowInfoForArguments,
|
context.resolutionResultsCache, dataFlowInfoForArguments,
|
||||||
context.callChecker, context.additionalTypeChecker,
|
context.callChecker,
|
||||||
context.statementFilter, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
context.statementFilter, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,13 +98,13 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
) {
|
) {
|
||||||
return new BasicCallResolutionContext(
|
return new BasicCallResolutionContext(
|
||||||
trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
||||||
dataFlowInfoForArguments, callChecker, additionalTypeChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
dataFlowInfoForArguments, callChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public BasicCallResolutionContext replaceCall(@NotNull Call newCall) {
|
public BasicCallResolutionContext replaceCall(@NotNull Call newCall) {
|
||||||
return new BasicCallResolutionContext(
|
return new BasicCallResolutionContext(
|
||||||
trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
||||||
dataFlowInfoForArguments, callChecker, additionalTypeChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideCallChain);
|
dataFlowInfoForArguments, callChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideCallChain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-6
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
|||||||
import org.jetbrains.kotlin.psi.Call;
|
import org.jetbrains.kotlin.psi.Call;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.StatementFilter;
|
import org.jetbrains.kotlin.resolve.StatementFilter;
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker;
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall;
|
import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall;
|
||||||
@@ -55,7 +54,6 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
@NotNull ReceiverValue explicitExtensionReceiverForInvoke,
|
@NotNull ReceiverValue explicitExtensionReceiverForInvoke,
|
||||||
@NotNull CandidateResolveMode candidateResolveMode,
|
@NotNull CandidateResolveMode candidateResolveMode,
|
||||||
@@ -64,7 +62,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
boolean insideSafeCallChain
|
boolean insideSafeCallChain
|
||||||
) {
|
) {
|
||||||
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
||||||
dataFlowInfoForArguments, callChecker, additionalTypeChecker, statementFilter, isAnnotationContext,
|
dataFlowInfoForArguments, callChecker, statementFilter, isAnnotationContext,
|
||||||
collectAllCandidates, insideSafeCallChain);
|
collectAllCandidates, insideSafeCallChain);
|
||||||
this.candidateCall = candidateCall;
|
this.candidateCall = candidateCall;
|
||||||
this.tracing = tracing;
|
this.tracing = tracing;
|
||||||
@@ -82,7 +80,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
candidateCall, tracing, trace, context.scope, call, context.expectedType,
|
candidateCall, tracing, trace, context.scope, call, context.expectedType,
|
||||||
context.dataFlowInfo, context.contextDependency, context.checkArguments,
|
context.dataFlowInfo, context.contextDependency, context.checkArguments,
|
||||||
context.resolutionResultsCache, context.dataFlowInfoForArguments,
|
context.resolutionResultsCache, context.dataFlowInfoForArguments,
|
||||||
context.callChecker, context.additionalTypeChecker, context.statementFilter, explicitExtensionReceiverForInvoke,
|
context.callChecker, context.statementFilter, explicitExtensionReceiverForInvoke,
|
||||||
candidateResolveMode, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
candidateResolveMode, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +91,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
return new CallCandidateResolutionContext<D>(
|
return new CallCandidateResolutionContext<D>(
|
||||||
candidateCall, tracing, context.trace, context.scope, context.call, context.expectedType,
|
candidateCall, tracing, context.trace, context.scope, context.call, context.expectedType,
|
||||||
context.dataFlowInfo, context.contextDependency, context.checkArguments, context.resolutionResultsCache,
|
context.dataFlowInfo, context.contextDependency, context.checkArguments, context.resolutionResultsCache,
|
||||||
context.dataFlowInfoForArguments, context.callChecker, context.additionalTypeChecker, context.statementFilter,
|
context.dataFlowInfoForArguments, context.callChecker, context.statementFilter,
|
||||||
ReceiverValue.NO_RECEIVER, CandidateResolveMode.FULLY, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
ReceiverValue.NO_RECEIVER, CandidateResolveMode.FULLY, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +109,7 @@ public final class CallCandidateResolutionContext<D extends CallableDescriptor>
|
|||||||
) {
|
) {
|
||||||
return new CallCandidateResolutionContext<D>(
|
return new CallCandidateResolutionContext<D>(
|
||||||
candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
candidateCall, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||||
resolutionResultsCache, dataFlowInfoForArguments, callChecker, additionalTypeChecker, statementFilter,
|
resolutionResultsCache, dataFlowInfoForArguments, callChecker, statementFilter,
|
||||||
explicitExtensionReceiverForInvoke, candidateResolveMode, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
explicitExtensionReceiverForInvoke, candidateResolveMode, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-3
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.kotlin.psi.Call;
|
import org.jetbrains.kotlin.psi.Call;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.StatementFilter;
|
import org.jetbrains.kotlin.resolve.StatementFilter;
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker;
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.DataFlowInfoForArgumentsImpl;
|
import org.jetbrains.kotlin.resolve.calls.model.DataFlowInfoForArgumentsImpl;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
||||||
@@ -49,14 +48,12 @@ public abstract class CallResolutionContext<Context extends CallResolutionContex
|
|||||||
@SuppressWarnings("NullableProblems")
|
@SuppressWarnings("NullableProblems")
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
boolean isAnnotationContext,
|
boolean isAnnotationContext,
|
||||||
boolean collectAllCandidates,
|
boolean collectAllCandidates,
|
||||||
boolean insideSafeCallChain
|
boolean insideSafeCallChain
|
||||||
) {
|
) {
|
||||||
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callChecker,
|
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callChecker,
|
||||||
additionalTypeChecker,
|
|
||||||
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
this.call = call;
|
this.call = call;
|
||||||
this.checkArguments = checkArguments;
|
this.checkArguments = checkArguments;
|
||||||
|
|||||||
-5
@@ -20,7 +20,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.StatementFilter;
|
import org.jetbrains.kotlin.resolve.StatementFilter;
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker;
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
@@ -51,8 +50,6 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
@NotNull
|
@NotNull
|
||||||
public final StatementFilter statementFilter;
|
public final StatementFilter statementFilter;
|
||||||
|
|
||||||
public final AdditionalTypeChecker additionalTypeChecker;
|
|
||||||
|
|
||||||
public final boolean isAnnotationContext;
|
public final boolean isAnnotationContext;
|
||||||
|
|
||||||
public final boolean collectAllCandidates;
|
public final boolean collectAllCandidates;
|
||||||
@@ -68,7 +65,6 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
@NotNull ContextDependency contextDependency,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
boolean isAnnotationContext,
|
boolean isAnnotationContext,
|
||||||
boolean collectAllCandidates,
|
boolean collectAllCandidates,
|
||||||
@@ -82,7 +78,6 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
this.resolutionResultsCache = resolutionResultsCache;
|
this.resolutionResultsCache = resolutionResultsCache;
|
||||||
this.callChecker = callChecker;
|
this.callChecker = callChecker;
|
||||||
this.statementFilter = statementFilter;
|
this.statementFilter = statementFilter;
|
||||||
this.additionalTypeChecker = additionalTypeChecker;
|
|
||||||
this.isAnnotationContext = isAnnotationContext;
|
this.isAnnotationContext = isAnnotationContext;
|
||||||
this.collectAllCandidates = collectAllCandidates;
|
this.collectAllCandidates = collectAllCandidates;
|
||||||
this.insideCallChain = insideCallChain;
|
this.insideCallChain = insideCallChain;
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
|||||||
import org.jetbrains.kotlin.psi.Call;
|
import org.jetbrains.kotlin.psi.Call;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.StatementFilter;
|
import org.jetbrains.kotlin.resolve.StatementFilter;
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker;
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.*;
|
import org.jetbrains.kotlin.resolve.calls.context.*;
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
||||||
@@ -56,7 +55,6 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
|
|||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
@NotNull Collection<MutableResolvedCall<F>> resolvedCalls,
|
@NotNull Collection<MutableResolvedCall<F>> resolvedCalls,
|
||||||
boolean isAnnotationContext,
|
boolean isAnnotationContext,
|
||||||
@@ -64,7 +62,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
|
|||||||
boolean insideSafeCallChain
|
boolean insideSafeCallChain
|
||||||
) {
|
) {
|
||||||
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
super(trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments, resolutionResultsCache,
|
||||||
dataFlowInfoForArguments, callChecker, additionalTypeChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
dataFlowInfoForArguments, callChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
this.lazyCandidates = lazyCandidates;
|
this.lazyCandidates = lazyCandidates;
|
||||||
this.resolvedCalls = resolvedCalls;
|
this.resolvedCalls = resolvedCalls;
|
||||||
this.tracing = tracing;
|
this.tracing = tracing;
|
||||||
@@ -79,7 +77,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
|
|||||||
context.trace, context.scope, context.call,
|
context.trace, context.scope, context.call,
|
||||||
context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments,
|
context.expectedType, context.dataFlowInfo, context.contextDependency, context.checkArguments,
|
||||||
context.resolutionResultsCache, context.dataFlowInfoForArguments,
|
context.resolutionResultsCache, context.dataFlowInfoForArguments,
|
||||||
context.callChecker, context.additionalTypeChecker,
|
context.callChecker,
|
||||||
context.statementFilter, new SmartList<MutableResolvedCall<F>>(),
|
context.statementFilter, new SmartList<MutableResolvedCall<F>>(),
|
||||||
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
||||||
}
|
}
|
||||||
@@ -113,7 +111,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
|
|||||||
return new ResolutionTask<D, F>(
|
return new ResolutionTask<D, F>(
|
||||||
lazyCandidates, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
lazyCandidates, tracing, trace, scope, call, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||||
resolutionResultsCache, dataFlowInfoForArguments,
|
resolutionResultsCache, dataFlowInfoForArguments,
|
||||||
callChecker, additionalTypeChecker,
|
callChecker,
|
||||||
statementFilter, resolvedCalls,
|
statementFilter, resolvedCalls,
|
||||||
isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.psi.*;
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker;
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext;
|
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext;
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue;
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue;
|
||||||
@@ -48,6 +49,12 @@ import static org.jetbrains.kotlin.types.TypeUtils.*;
|
|||||||
|
|
||||||
public class DataFlowAnalyzer {
|
public class DataFlowAnalyzer {
|
||||||
|
|
||||||
|
private final Iterable<? extends AdditionalTypeChecker> additionalTypeCheckers;
|
||||||
|
|
||||||
|
public DataFlowAnalyzer(@NotNull Iterable<? extends AdditionalTypeChecker> additionalTypeCheckers) {
|
||||||
|
this.additionalTypeCheckers = additionalTypeCheckers;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public DataFlowInfo extractDataFlowInfoFromCondition(
|
public DataFlowInfo extractDataFlowInfoFromCondition(
|
||||||
@Nullable JetExpression condition,
|
@Nullable JetExpression condition,
|
||||||
@@ -164,7 +171,9 @@ public class DataFlowAnalyzer {
|
|||||||
|
|
||||||
if (expressionType == null) return null;
|
if (expressionType == null) return null;
|
||||||
|
|
||||||
c.additionalTypeChecker.checkType(expression, expressionType, c);
|
for (AdditionalTypeChecker checker : additionalTypeCheckers) {
|
||||||
|
checker.checkType(expression, expressionType, c);
|
||||||
|
}
|
||||||
|
|
||||||
if (noExpectedType(c.expectedType) || !c.expectedType.getConstructor().isDenotable() ||
|
if (noExpectedType(c.expectedType) || !c.expectedType.getConstructor().isDenotable() ||
|
||||||
JetTypeChecker.DEFAULT.isSubtypeOf(expressionType, c.expectedType)) {
|
JetTypeChecker.DEFAULT.isSubtypeOf(expressionType, c.expectedType)) {
|
||||||
|
|||||||
+3
-8
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.StatementFilter;
|
import org.jetbrains.kotlin.resolve.StatementFilter;
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker;
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker;
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency;
|
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency;
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext;
|
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext;
|
||||||
@@ -57,7 +56,6 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
return newContext(trace, scope, dataFlowInfo, expectedType,
|
return newContext(trace, scope, dataFlowInfo, expectedType,
|
||||||
ContextDependency.INDEPENDENT, new ResolutionResultsCacheImpl(),
|
ContextDependency.INDEPENDENT, new ResolutionResultsCacheImpl(),
|
||||||
callChecker != null ? callChecker : additionalCheckerProvider.getCallChecker(),
|
callChecker != null ? callChecker : additionalCheckerProvider.getCallChecker(),
|
||||||
additionalCheckerProvider.getTypeChecker(),
|
|
||||||
StatementFilter.NONE, false);
|
StatementFilter.NONE, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +64,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
return new ExpressionTypingContext(
|
return new ExpressionTypingContext(
|
||||||
context.trace, context.scope, context.dataFlowInfo, context.expectedType,
|
context.trace, context.scope, context.dataFlowInfo, context.expectedType,
|
||||||
context.contextDependency, context.resolutionResultsCache,
|
context.contextDependency, context.resolutionResultsCache,
|
||||||
context.callChecker, context.additionalTypeChecker,
|
context.callChecker,
|
||||||
context.statementFilter,
|
context.statementFilter,
|
||||||
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain
|
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain
|
||||||
);
|
);
|
||||||
@@ -81,13 +79,11 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
@NotNull ContextDependency contextDependency,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
boolean isAnnotationContext
|
boolean isAnnotationContext
|
||||||
) {
|
) {
|
||||||
return new ExpressionTypingContext(
|
return new ExpressionTypingContext(
|
||||||
trace, scope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, callChecker,
|
trace, scope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, callChecker,
|
||||||
additionalTypeChecker,
|
|
||||||
statementFilter, isAnnotationContext, false, false);
|
statementFilter, isAnnotationContext, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,14 +97,13 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
@NotNull ContextDependency contextDependency,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
boolean isAnnotationContext,
|
boolean isAnnotationContext,
|
||||||
boolean collectAllCandidates,
|
boolean collectAllCandidates,
|
||||||
boolean insideSafeCallChain
|
boolean insideSafeCallChain
|
||||||
) {
|
) {
|
||||||
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache,
|
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache,
|
||||||
callChecker, additionalTypeChecker,
|
callChecker,
|
||||||
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +121,7 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
) {
|
) {
|
||||||
return new ExpressionTypingContext(trace, scope, dataFlowInfo,
|
return new ExpressionTypingContext(trace, scope, dataFlowInfo,
|
||||||
expectedType, contextDependency, resolutionResultsCache,
|
expectedType, contextDependency, resolutionResultsCache,
|
||||||
callChecker, additionalTypeChecker,
|
callChecker,
|
||||||
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
|
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CompositeChecker
|
import org.jetbrains.kotlin.resolve.calls.checkers.CompositeChecker
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode
|
import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode
|
||||||
@@ -165,7 +164,7 @@ public class ShadowedDeclarationsFilter(
|
|||||||
val dataFlowInfo = bindingContext.getDataFlowInfo(calleeExpression)
|
val dataFlowInfo = bindingContext.getDataFlowInfo(calleeExpression)
|
||||||
val context = BasicCallResolutionContext.create(bindingTrace, resolutionScope, newCall, TypeUtils.NO_EXPECTED_TYPE, dataFlowInfo,
|
val context = BasicCallResolutionContext.create(bindingTrace, resolutionScope, newCall, TypeUtils.NO_EXPECTED_TYPE, dataFlowInfo,
|
||||||
ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
||||||
CompositeChecker(listOf()), AdditionalTypeChecker.Composite(listOf()), false)
|
CompositeChecker(listOf()), false)
|
||||||
val callResolver = createContainerForMacros(project, moduleDescriptor).callResolver
|
val callResolver = createContainerForMacros(project, moduleDescriptor).callResolver
|
||||||
val results = if (isFunction) callResolver.resolveFunctionCall(context) else callResolver.resolveSimpleProperty(context)
|
val results = if (isFunction) callResolver.resolveFunctionCall(context) else callResolver.resolveSimpleProperty(context)
|
||||||
val resultingDescriptors = results.getResultingCalls().map { it.getResultingDescriptor() }
|
val resultingDescriptors = results.getResultingCalls().map { it.getResultingDescriptor() }
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfo
|
|||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.getTargetFunctionDescriptor
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.getTargetFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.noErrorsInValueArguments
|
import org.jetbrains.kotlin.resolve.calls.callUtil.noErrorsInValueArguments
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.CompositeChecker
|
import org.jetbrains.kotlin.resolve.calls.checkers.CompositeChecker
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode
|
import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode
|
||||||
@@ -180,7 +179,7 @@ class ExpectedInfos(
|
|||||||
val bindingTrace = DelegatingBindingTrace(bindingContext, "Temporary trace for completion")
|
val bindingTrace = DelegatingBindingTrace(bindingContext, "Temporary trace for completion")
|
||||||
val context = BasicCallResolutionContext.create(bindingTrace, resolutionScope, truncatedCall, callExpectedType, dataFlowInfo,
|
val context = BasicCallResolutionContext.create(bindingTrace, resolutionScope, truncatedCall, callExpectedType, dataFlowInfo,
|
||||||
ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
ContextDependency.INDEPENDENT, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS,
|
||||||
CompositeChecker(listOf()), AdditionalTypeChecker.Composite(listOf()), false)
|
CompositeChecker(listOf()), false)
|
||||||
val callResolutionContext = context.replaceCollectAllCandidates(true)
|
val callResolutionContext = context.replaceCollectAllCandidates(true)
|
||||||
val callResolver = createContainerForMacros(project, moduleDescriptor).callResolver
|
val callResolver = createContainerForMacros(project, moduleDescriptor).callResolver
|
||||||
val results: OverloadResolutionResults<FunctionDescriptor> = callResolver.resolveFunctionCall(callResolutionContext)
|
val results: OverloadResolutionResults<FunctionDescriptor> = callResolver.resolveFunctionCall(callResolutionContext)
|
||||||
|
|||||||
Reference in New Issue
Block a user