SymbolUsageValidator infrastructure
This commit is contained in:
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver;
|
import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver;
|
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver;
|
||||||
@@ -92,6 +93,7 @@ public class InjectorForLazyResolveWithJava {
|
|||||||
private final DeclarationProviderFactory declarationProviderFactory;
|
private final DeclarationProviderFactory declarationProviderFactory;
|
||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
private final ScopeProvider scopeProvider;
|
private final ScopeProvider scopeProvider;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final GlobalSearchScope moduleContentScope;
|
private final GlobalSearchScope moduleContentScope;
|
||||||
private final ModuleClassResolver moduleClassResolver;
|
private final ModuleClassResolver moduleClassResolver;
|
||||||
private final JavaDescriptorResolver javaDescriptorResolver;
|
private final JavaDescriptorResolver javaDescriptorResolver;
|
||||||
@@ -161,6 +163,7 @@ public class InjectorForLazyResolveWithJava {
|
|||||||
this.declarationProviderFactory = declarationProviderFactory;
|
this.declarationProviderFactory = declarationProviderFactory;
|
||||||
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
||||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.moduleContentScope = moduleContentScope;
|
this.moduleContentScope = moduleContentScope;
|
||||||
this.moduleClassResolver = moduleClassResolver;
|
this.moduleClassResolver = moduleClassResolver;
|
||||||
this.javaClassFinder = new JavaClassFinderImpl();
|
this.javaClassFinder = new JavaClassFinderImpl();
|
||||||
@@ -280,6 +283,7 @@ public class InjectorForLazyResolveWithJava {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -297,6 +301,8 @@ public class InjectorForLazyResolveWithJava {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer;
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer;
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
||||||
@@ -103,6 +104,7 @@ public class InjectorForReplWithJava {
|
|||||||
private final DeclarationProviderFactory declarationProviderFactory;
|
private final DeclarationProviderFactory declarationProviderFactory;
|
||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
private final ScopeProvider scopeProvider;
|
private final ScopeProvider scopeProvider;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final GlobalSearchScope moduleContentScope;
|
private final GlobalSearchScope moduleContentScope;
|
||||||
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
|
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
|
||||||
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
||||||
@@ -183,6 +185,7 @@ public class InjectorForReplWithJava {
|
|||||||
this.declarationProviderFactory = declarationProviderFactory;
|
this.declarationProviderFactory = declarationProviderFactory;
|
||||||
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
||||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.moduleContentScope = moduleContentScope;
|
this.moduleContentScope = moduleContentScope;
|
||||||
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
|
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
|
||||||
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
||||||
@@ -330,6 +333,7 @@ public class InjectorForReplWithJava {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -347,6 +351,8 @@ public class InjectorForReplWithJava {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
+6
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer;
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer;
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
||||||
@@ -103,6 +104,7 @@ public class InjectorForTopDownAnalyzerForJvm {
|
|||||||
private final DeclarationProviderFactory declarationProviderFactory;
|
private final DeclarationProviderFactory declarationProviderFactory;
|
||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
private final ScopeProvider scopeProvider;
|
private final ScopeProvider scopeProvider;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final GlobalSearchScope moduleContentScope;
|
private final GlobalSearchScope moduleContentScope;
|
||||||
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
|
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
|
||||||
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
||||||
@@ -182,6 +184,7 @@ public class InjectorForTopDownAnalyzerForJvm {
|
|||||||
this.declarationProviderFactory = declarationProviderFactory;
|
this.declarationProviderFactory = declarationProviderFactory;
|
||||||
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
||||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.moduleContentScope = moduleContentScope;
|
this.moduleContentScope = moduleContentScope;
|
||||||
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
|
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
|
||||||
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
||||||
@@ -329,6 +332,7 @@ public class InjectorForTopDownAnalyzerForJvm {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -346,6 +350,8 @@ public class InjectorForTopDownAnalyzerForJvm {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
|||||||
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
||||||
import org.jetbrains.kotlin.resolve.StatementFilter;
|
import org.jetbrains.kotlin.resolve.StatementFilter;
|
||||||
import org.jetbrains.kotlin.resolve.BodyResolver;
|
import org.jetbrains.kotlin.resolve.BodyResolver;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
||||||
@@ -70,6 +71,7 @@ public class InjectorForBodyResolve {
|
|||||||
private final AdditionalCheckerProvider additionalCheckerProvider;
|
private final AdditionalCheckerProvider additionalCheckerProvider;
|
||||||
private final StatementFilter statementFilter;
|
private final StatementFilter statementFilter;
|
||||||
private final BodyResolver bodyResolver;
|
private final BodyResolver bodyResolver;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final AnnotationResolver annotationResolver;
|
private final AnnotationResolver annotationResolver;
|
||||||
private final CallResolver callResolver;
|
private final CallResolver callResolver;
|
||||||
private final ArgumentTypeResolver argumentTypeResolver;
|
private final ArgumentTypeResolver argumentTypeResolver;
|
||||||
@@ -116,6 +118,7 @@ public class InjectorForBodyResolve {
|
|||||||
this.additionalCheckerProvider = additionalCheckerProvider;
|
this.additionalCheckerProvider = additionalCheckerProvider;
|
||||||
this.statementFilter = statementFilter;
|
this.statementFilter = statementFilter;
|
||||||
this.bodyResolver = new BodyResolver();
|
this.bodyResolver = new BodyResolver();
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.annotationResolver = new AnnotationResolver();
|
this.annotationResolver = new AnnotationResolver();
|
||||||
this.callResolver = new CallResolver();
|
this.callResolver = new CallResolver();
|
||||||
this.argumentTypeResolver = new ArgumentTypeResolver();
|
this.argumentTypeResolver = new ArgumentTypeResolver();
|
||||||
@@ -191,6 +194,7 @@ public class InjectorForBodyResolve {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -208,6 +212,8 @@ public class InjectorForBodyResolve {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
|||||||
import org.jetbrains.kotlin.types.DynamicTypesSettings;
|
import org.jetbrains.kotlin.types.DynamicTypesSettings;
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider.AdditionalFileScopeProvider;
|
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider.AdditionalFileScopeProvider;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.DeclarationScopeProviderImpl;
|
import org.jetbrains.kotlin.resolve.lazy.DeclarationScopeProviderImpl;
|
||||||
@@ -82,6 +83,7 @@ public class InjectorForLazyBodyResolve {
|
|||||||
private final DynamicTypesSettings dynamicTypesSettings;
|
private final DynamicTypesSettings dynamicTypesSettings;
|
||||||
private final KotlinBuiltIns kotlinBuiltIns;
|
private final KotlinBuiltIns kotlinBuiltIns;
|
||||||
private final PlatformToKotlinClassMap platformToKotlinClassMap;
|
private final PlatformToKotlinClassMap platformToKotlinClassMap;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
||||||
private final AdditionalFileScopeProvider additionalFileScopeProvider;
|
private final AdditionalFileScopeProvider additionalFileScopeProvider;
|
||||||
private final DeclarationScopeProviderImpl declarationScopeProvider;
|
private final DeclarationScopeProviderImpl declarationScopeProvider;
|
||||||
@@ -139,6 +141,7 @@ public class InjectorForLazyBodyResolve {
|
|||||||
this.dynamicTypesSettings = dynamicTypesSettings;
|
this.dynamicTypesSettings = dynamicTypesSettings;
|
||||||
this.kotlinBuiltIns = moduleDescriptor.getBuiltIns();
|
this.kotlinBuiltIns = moduleDescriptor.getBuiltIns();
|
||||||
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
|
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
||||||
this.additionalFileScopeProvider = new AdditionalFileScopeProvider();
|
this.additionalFileScopeProvider = new AdditionalFileScopeProvider();
|
||||||
this.lazyDeclarationResolver = new LazyDeclarationResolver(globalContext, bindingTrace);
|
this.lazyDeclarationResolver = new LazyDeclarationResolver(globalContext, bindingTrace);
|
||||||
@@ -244,6 +247,7 @@ public class InjectorForLazyBodyResolve {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -261,6 +265,8 @@ public class InjectorForLazyBodyResolve {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
+6
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.resolve.lazy.NoTopLevelDescriptorProvider;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.NoFileScopeProvider;
|
import org.jetbrains.kotlin.resolve.lazy.NoFileScopeProvider;
|
||||||
import org.jetbrains.kotlin.types.expressions.DeclarationScopeProviderForLocalClassifierAnalyzer;
|
import org.jetbrains.kotlin.types.expressions.DeclarationScopeProviderForLocalClassifierAnalyzer;
|
||||||
import org.jetbrains.kotlin.types.expressions.LocalLazyDeclarationResolver;
|
import org.jetbrains.kotlin.types.expressions.LocalLazyDeclarationResolver;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.resolve.BodyResolver;
|
import org.jetbrains.kotlin.resolve.BodyResolver;
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
||||||
@@ -85,6 +86,7 @@ public class InjectorForLazyLocalClassifierAnalyzer {
|
|||||||
private final NoFileScopeProvider noFileScopeProvider;
|
private final NoFileScopeProvider noFileScopeProvider;
|
||||||
private final DeclarationScopeProviderForLocalClassifierAnalyzer declarationScopeProviderForLocalClassifierAnalyzer;
|
private final DeclarationScopeProviderForLocalClassifierAnalyzer declarationScopeProviderForLocalClassifierAnalyzer;
|
||||||
private final LocalLazyDeclarationResolver localLazyDeclarationResolver;
|
private final LocalLazyDeclarationResolver localLazyDeclarationResolver;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final BodyResolver bodyResolver;
|
private final BodyResolver bodyResolver;
|
||||||
private final AnnotationResolver annotationResolver;
|
private final AnnotationResolver annotationResolver;
|
||||||
private final CallResolver callResolver;
|
private final CallResolver callResolver;
|
||||||
@@ -142,6 +144,7 @@ public class InjectorForLazyLocalClassifierAnalyzer {
|
|||||||
this.noFileScopeProvider = NoFileScopeProvider.INSTANCE$;
|
this.noFileScopeProvider = NoFileScopeProvider.INSTANCE$;
|
||||||
this.localLazyDeclarationResolver = new LocalLazyDeclarationResolver(globalContext, bindingTrace, localClassDescriptorHolder);
|
this.localLazyDeclarationResolver = new LocalLazyDeclarationResolver(globalContext, bindingTrace, localClassDescriptorHolder);
|
||||||
this.declarationScopeProviderForLocalClassifierAnalyzer = new DeclarationScopeProviderForLocalClassifierAnalyzer(localLazyDeclarationResolver, localClassDescriptorHolder);
|
this.declarationScopeProviderForLocalClassifierAnalyzer = new DeclarationScopeProviderForLocalClassifierAnalyzer(localLazyDeclarationResolver, localClassDescriptorHolder);
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.bodyResolver = new BodyResolver();
|
this.bodyResolver = new BodyResolver();
|
||||||
this.annotationResolver = new AnnotationResolver();
|
this.annotationResolver = new AnnotationResolver();
|
||||||
this.callResolver = new CallResolver();
|
this.callResolver = new CallResolver();
|
||||||
@@ -239,6 +242,7 @@ public class InjectorForLazyLocalClassifierAnalyzer {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -256,6 +260,8 @@ public class InjectorForLazyLocalClassifierAnalyzer {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.types.DynamicTypesSettings;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
||||||
import org.jetbrains.kotlin.context.LazyResolveToken;
|
import org.jetbrains.kotlin.context.LazyResolveToken;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
||||||
@@ -75,6 +76,7 @@ public class InjectorForLazyResolve {
|
|||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
private final ScopeProvider scopeProvider;
|
private final ScopeProvider scopeProvider;
|
||||||
private final LazyResolveToken lazyResolveToken;
|
private final LazyResolveToken lazyResolveToken;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final AnnotationResolver annotationResolver;
|
private final AnnotationResolver annotationResolver;
|
||||||
private final CallResolver callResolver;
|
private final CallResolver callResolver;
|
||||||
private final ArgumentTypeResolver argumentTypeResolver;
|
private final ArgumentTypeResolver argumentTypeResolver;
|
||||||
@@ -124,6 +126,7 @@ public class InjectorForLazyResolve {
|
|||||||
this.resolveSession = new ResolveSession(project, globalContext, moduleDescriptor, declarationProviderFactory, bindingTrace);
|
this.resolveSession = new ResolveSession(project, globalContext, moduleDescriptor, declarationProviderFactory, bindingTrace);
|
||||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||||
this.lazyResolveToken = new LazyResolveToken();
|
this.lazyResolveToken = new LazyResolveToken();
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.annotationResolver = new AnnotationResolver();
|
this.annotationResolver = new AnnotationResolver();
|
||||||
this.callResolver = new CallResolver();
|
this.callResolver = new CallResolver();
|
||||||
this.argumentTypeResolver = new ArgumentTypeResolver();
|
this.argumentTypeResolver = new ArgumentTypeResolver();
|
||||||
@@ -201,6 +204,7 @@ public class InjectorForLazyResolve {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -218,6 +222,8 @@ public class InjectorForLazyResolve {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
||||||
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider.DefaultProvider;
|
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider.DefaultProvider;
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
||||||
@@ -83,6 +84,7 @@ public class InjectorForLazyTopDownAnalyzerBasic {
|
|||||||
private final DeclarationProviderFactory declarationProviderFactory;
|
private final DeclarationProviderFactory declarationProviderFactory;
|
||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
private final ScopeProvider scopeProvider;
|
private final ScopeProvider scopeProvider;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
||||||
private final DefaultProvider defaultProvider;
|
private final DefaultProvider defaultProvider;
|
||||||
private final AnnotationResolver annotationResolver;
|
private final AnnotationResolver annotationResolver;
|
||||||
@@ -141,6 +143,7 @@ public class InjectorForLazyTopDownAnalyzerBasic {
|
|||||||
this.declarationProviderFactory = declarationProviderFactory;
|
this.declarationProviderFactory = declarationProviderFactory;
|
||||||
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
||||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
||||||
this.defaultProvider = DefaultProvider.INSTANCE$;
|
this.defaultProvider = DefaultProvider.INSTANCE$;
|
||||||
this.annotationResolver = new AnnotationResolver();
|
this.annotationResolver = new AnnotationResolver();
|
||||||
@@ -235,6 +238,7 @@ public class InjectorForLazyTopDownAnalyzerBasic {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -252,6 +256,8 @@ public class InjectorForLazyTopDownAnalyzerBasic {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.resolve.TypeResolver;
|
|||||||
import org.jetbrains.kotlin.context.GlobalContext;
|
import org.jetbrains.kotlin.context.GlobalContext;
|
||||||
import org.jetbrains.kotlin.storage.StorageManager;
|
import org.jetbrains.kotlin.storage.StorageManager;
|
||||||
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider.DefaultProvider;
|
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider.DefaultProvider;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver;
|
import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorResolver;
|
import org.jetbrains.kotlin.resolve.DescriptorResolver;
|
||||||
@@ -64,6 +65,7 @@ public class InjectorForMacros {
|
|||||||
private final GlobalContext globalContext;
|
private final GlobalContext globalContext;
|
||||||
private final StorageManager storageManager;
|
private final StorageManager storageManager;
|
||||||
private final DefaultProvider defaultProvider;
|
private final DefaultProvider defaultProvider;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final AnnotationResolver annotationResolver;
|
private final AnnotationResolver annotationResolver;
|
||||||
private final CallExpressionResolver callExpressionResolver;
|
private final CallExpressionResolver callExpressionResolver;
|
||||||
private final DescriptorResolver descriptorResolver;
|
private final DescriptorResolver descriptorResolver;
|
||||||
@@ -104,6 +106,7 @@ public class InjectorForMacros {
|
|||||||
this.dynamicTypesSettings = new DynamicTypesSettings();
|
this.dynamicTypesSettings = new DynamicTypesSettings();
|
||||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, typeLazinessToken, dynamicTypesSettings);
|
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, typeLazinessToken, dynamicTypesSettings);
|
||||||
this.defaultProvider = DefaultProvider.INSTANCE$;
|
this.defaultProvider = DefaultProvider.INSTANCE$;
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.callExpressionResolver = new CallExpressionResolver();
|
this.callExpressionResolver = new CallExpressionResolver();
|
||||||
this.descriptorResolver = new DescriptorResolver();
|
this.descriptorResolver = new DescriptorResolver();
|
||||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||||
@@ -141,6 +144,7 @@ public class InjectorForMacros {
|
|||||||
this.expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
this.expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
this.expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
this.expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
this.expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
this.expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
this.expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
this.callResolver.setArgumentTypeResolver(argumentTypeResolver);
|
this.callResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
this.callResolver.setCallCompleter(callCompleter);
|
this.callResolver.setCallCompleter(callCompleter);
|
||||||
@@ -177,6 +181,8 @@ public class InjectorForMacros {
|
|||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PreDestroy
|
@PreDestroy
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyAnnotationDescriptor;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyAnnotationsContextImpl;
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyAnnotationsContextImpl;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.CompositeSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.storage.StorageManager;
|
import org.jetbrains.kotlin.storage.StorageManager;
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils;
|
import org.jetbrains.kotlin.types.ErrorUtils;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
@@ -365,6 +366,7 @@ public class AnnotationResolver {
|
|||||||
new SimpleResolutionContext(trace, JetScope.Empty.INSTANCE$, NO_EXPECTED_TYPE, DataFlowInfo.EMPTY,
|
new SimpleResolutionContext(trace, JetScope.Empty.INSTANCE$, NO_EXPECTED_TYPE, DataFlowInfo.EMPTY,
|
||||||
ContextDependency.INDEPENDENT,
|
ContextDependency.INDEPENDENT,
|
||||||
new CompositeChecker(Lists.<CallChecker>newArrayList()),
|
new CompositeChecker(Lists.<CallChecker>newArrayList()),
|
||||||
|
new CompositeSymbolUsageValidator(),
|
||||||
new AdditionalTypeChecker.Composite(Lists.<AdditionalTypeChecker>newArrayList()),
|
new AdditionalTypeChecker.Composite(Lists.<AdditionalTypeChecker>newArrayList()),
|
||||||
StatementFilter.NONE);
|
StatementFilter.NONE);
|
||||||
ArgumentTypeResolver.updateNumberType(defaultType, argumentExpression, context);
|
ArgumentTypeResolver.updateNumberType(defaultType, argumentExpression, context);
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.resolve;
|
package org.jetbrains.kotlin.resolve;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
@@ -208,7 +209,17 @@ public class DelegatedPropertyResolver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
trace.record(DELEGATED_PROPERTY_RESOLVED_CALL, accessor, functionResults.getResultingCall());
|
ResolvedCall<FunctionDescriptor> resultingCall = functionResults.getResultingCall();
|
||||||
|
PsiElement declaration = DescriptorToSourceUtils.descriptorToDeclaration(propertyDescriptor);
|
||||||
|
if (declaration instanceof JetProperty) {
|
||||||
|
JetProperty property = (JetProperty) declaration;
|
||||||
|
JetPropertyDelegate delegate = property.getDelegate();
|
||||||
|
if (delegate != null) {
|
||||||
|
PsiElement byKeyword = delegate.getByKeywordNode().getPsi();
|
||||||
|
expressionTypingServices.getSymbolUsageValidator().validateCall(resultingCall.getResultingDescriptor(), trace, byKeyword);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
trace.record(DELEGATED_PROPERTY_RESOLVED_CALL, accessor, resultingCall);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Resolve get() or set() methods from delegate */
|
/* Resolve get() or set() methods from delegate */
|
||||||
|
|||||||
+17
-3
@@ -29,10 +29,13 @@ import org.jetbrains.kotlin.descriptors.*;
|
|||||||
import org.jetbrains.kotlin.diagnostics.Errors;
|
import org.jetbrains.kotlin.diagnostics.Errors;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.AbstractScopeAdapter;
|
import org.jetbrains.kotlin.resolve.scopes.AbstractScopeAdapter;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -40,6 +43,13 @@ import java.util.Set;
|
|||||||
import static org.jetbrains.kotlin.diagnostics.Errors.*;
|
import static org.jetbrains.kotlin.diagnostics.Errors.*;
|
||||||
|
|
||||||
public class QualifiedExpressionResolver {
|
public class QualifiedExpressionResolver {
|
||||||
|
private SymbolUsageValidator symbolUsageValidator;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public void setSymbolUsageValidator(SymbolUsageValidator symbolUsageValidator) {
|
||||||
|
this.symbolUsageValidator = symbolUsageValidator;
|
||||||
|
}
|
||||||
|
|
||||||
private static final Predicate<DeclarationDescriptor> CLASSIFIERS_AND_PACKAGE_VIEWS = new Predicate<DeclarationDescriptor>() {
|
private static final Predicate<DeclarationDescriptor> CLASSIFIERS_AND_PACKAGE_VIEWS = new Predicate<DeclarationDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(@Nullable DeclarationDescriptor descriptor) {
|
public boolean apply(@Nullable DeclarationDescriptor descriptor) {
|
||||||
@@ -257,7 +267,7 @@ public class QualifiedExpressionResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static Collection<DeclarationDescriptor> lookupSelectorDescriptors(
|
private Collection<DeclarationDescriptor> lookupSelectorDescriptors(
|
||||||
@NotNull JetSimpleNameExpression selector,
|
@NotNull JetSimpleNameExpression selector,
|
||||||
@NotNull Collection<DeclarationDescriptor> declarationDescriptors,
|
@NotNull Collection<DeclarationDescriptor> declarationDescriptors,
|
||||||
@NotNull BindingTrace trace,
|
@NotNull BindingTrace trace,
|
||||||
@@ -343,7 +353,7 @@ public class QualifiedExpressionResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static Collection<DeclarationDescriptor> filterAndStoreResolutionResult(
|
private Collection<DeclarationDescriptor> filterAndStoreResolutionResult(
|
||||||
@NotNull Collection<LookupResult> lookupResults,
|
@NotNull Collection<LookupResult> lookupResults,
|
||||||
@NotNull JetSimpleNameExpression referenceExpression,
|
@NotNull JetSimpleNameExpression referenceExpression,
|
||||||
@NotNull BindingTrace trace,
|
@NotNull BindingTrace trace,
|
||||||
@@ -397,7 +407,7 @@ public class QualifiedExpressionResolver {
|
|||||||
return filteredDescriptors;
|
return filteredDescriptors;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void storeResolutionResult(
|
private void storeResolutionResult(
|
||||||
@NotNull Collection<DeclarationDescriptor> descriptors,
|
@NotNull Collection<DeclarationDescriptor> descriptors,
|
||||||
@NotNull Collection<DeclarationDescriptor> canBeImportedDescriptors,
|
@NotNull Collection<DeclarationDescriptor> canBeImportedDescriptors,
|
||||||
@NotNull JetSimpleNameExpression referenceExpression,
|
@NotNull JetSimpleNameExpression referenceExpression,
|
||||||
@@ -435,6 +445,10 @@ public class QualifiedExpressionResolver {
|
|||||||
trace.record(BindingContext.REFERENCE_TARGET, referenceExpression, descriptors.iterator().next());
|
trace.record(BindingContext.REFERENCE_TARGET, referenceExpression, descriptors.iterator().next());
|
||||||
trace.record(BindingContext.RESOLUTION_SCOPE, referenceExpression, resolutionScope);
|
trace.record(BindingContext.RESOLUTION_SCOPE, referenceExpression, resolutionScope);
|
||||||
|
|
||||||
|
if (descriptor instanceof ClassifierDescriptor) {
|
||||||
|
symbolUsageValidator.validateTypeUsage((ClassifierDescriptor) descriptor, trace, referenceExpression);
|
||||||
|
}
|
||||||
|
|
||||||
if (descriptor instanceof DeclarationDescriptorWithVisibility) {
|
if (descriptor instanceof DeclarationDescriptorWithVisibility) {
|
||||||
checkVisibility((DeclarationDescriptorWithVisibility) descriptor, trace, referenceExpression, scopeToCheckVisibility);
|
checkVisibility((DeclarationDescriptorWithVisibility) descriptor, trace, referenceExpression, scopeToCheckVisibility);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
|||||||
import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResultsImpl
|
import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResultsImpl
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy
|
import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.CheckValueArgumentsMode
|
import org.jetbrains.kotlin.resolve.calls.context.CheckValueArgumentsMode
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall
|
|
||||||
import org.jetbrains.kotlin.types.JetType
|
import org.jetbrains.kotlin.types.JetType
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystem
|
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystem
|
||||||
@@ -33,10 +32,7 @@ import org.jetbrains.kotlin.resolve.calls.context.CallCandidateResolutionContext
|
|||||||
import org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus
|
import org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData
|
import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData
|
||||||
import org.jetbrains.kotlin.psi.ValueArgument
|
import org.jetbrains.kotlin.psi.ValueArgument
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMapping
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ArgumentUnmapped
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext
|
import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.*
|
import org.jetbrains.kotlin.resolve.calls.callUtil.*
|
||||||
@@ -52,6 +48,7 @@ import org.jetbrains.kotlin.resolve.TemporaryBindingTrace
|
|||||||
import org.jetbrains.kotlin.psi.JetQualifiedExpression
|
import org.jetbrains.kotlin.psi.JetQualifiedExpression
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind.*
|
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind.*
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.model.*
|
||||||
|
|
||||||
public class CallCompleter(
|
public class CallCompleter(
|
||||||
val argumentTypeResolver: ArgumentTypeResolver,
|
val argumentTypeResolver: ArgumentTypeResolver,
|
||||||
@@ -78,7 +75,14 @@ public class CallCompleter(
|
|||||||
temporaryTrace.commit()
|
temporaryTrace.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
resolvedCall?.let { context.callChecker.check(it, context) }
|
if (resolvedCall != null) {
|
||||||
|
context.callChecker.check(resolvedCall, context)
|
||||||
|
val element = if (resolvedCall is VariableAsFunctionResolvedCall)
|
||||||
|
resolvedCall.variableCall.getCall().getCalleeExpression()
|
||||||
|
else
|
||||||
|
resolvedCall.getCall().getCalleeExpression()
|
||||||
|
context.symbolUsageValidator.validateCall(resolvedCall.getResultingDescriptor(), context.trace, element)
|
||||||
|
}
|
||||||
|
|
||||||
if (results.isSingleResult() && results.getResultingCall().getStatus().isSuccess()) {
|
if (results.isSingleResult() && results.getResultingCall().getStatus().isSuccess()) {
|
||||||
return results.changeStatusToSuccess()
|
return results.changeStatusToSuccess()
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ public class CallResolver {
|
|||||||
return resolveFunctionCall(
|
return resolveFunctionCall(
|
||||||
BasicCallResolutionContext.create(
|
BasicCallResolutionContext.create(
|
||||||
trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED,
|
trace, scope, call, expectedType, dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED,
|
||||||
expressionTypingServices.getCallChecker(), expressionTypingServices.getAdditionalTypeChecker(), isAnnotationContext)
|
expressionTypingServices.getCallChecker(), expressionTypingServices.getSymbolUsageValidator(), expressionTypingServices.getAdditionalTypeChecker(), isAnnotationContext)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,7 +312,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, CheckValueArgumentsMode.ENABLED,
|
dataFlowInfo, ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED,
|
||||||
callChecker, expressionTypingServices.getAdditionalTypeChecker(), false);
|
callChecker, expressionTypingServices.getSymbolUsageValidator(), expressionTypingServices.getAdditionalTypeChecker(), false);
|
||||||
|
|
||||||
if (call.getCalleeExpression() == null) return checkArgumentTypesAndFail(context);
|
if (call.getCalleeExpression() == null) return checkArgumentTypesAndFail(context);
|
||||||
|
|
||||||
|
|||||||
+10
-9
@@ -26,6 +26,7 @@ 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;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
|
||||||
public class BasicCallResolutionContext extends CallResolutionContext<BasicCallResolutionContext> {
|
public class BasicCallResolutionContext extends CallResolutionContext<BasicCallResolutionContext> {
|
||||||
@@ -40,6 +41,7 @@ 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 SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
boolean isAnnotationContext,
|
boolean isAnnotationContext,
|
||||||
@@ -47,8 +49,7 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
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, symbolUsageValidator, additionalTypeChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
collectAllCandidates, insideSafeCallChain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -61,12 +62,13 @@ public class BasicCallResolutionContext extends CallResolutionContext<BasicCallR
|
|||||||
@NotNull ContextDependency contextDependency,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull CheckValueArgumentsMode checkArguments,
|
@NotNull CheckValueArgumentsMode checkArguments,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
|
@NotNull SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@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, symbolUsageValidator, additionalTypeChecker, StatementFilter.NONE, isAnnotationContext, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -76,8 +78,9 @@ 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.callChecker, context.additionalTypeChecker, context.statementFilter,
|
context.resolutionResultsCache, dataFlowInfoForArguments,
|
||||||
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
context.callChecker, context.symbolUsageValidator, context.additionalTypeChecker,
|
||||||
|
context.statementFilter, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -101,15 +104,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,
|
dataFlowInfoForArguments, callChecker, symbolUsageValidator, additionalTypeChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
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,
|
dataFlowInfoForArguments, callChecker, symbolUsageValidator, additionalTypeChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideCallChain);
|
||||||
collectAllCandidates, insideCallChain);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-4
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo;
|
|||||||
import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy;
|
import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
|
||||||
public final class CallCandidateResolutionContext<D extends CallableDescriptor> extends CallResolutionContext<CallCandidateResolutionContext<D>> {
|
public final class CallCandidateResolutionContext<D extends CallableDescriptor> extends CallResolutionContext<CallCandidateResolutionContext<D>> {
|
||||||
@@ -53,6 +54,7 @@ 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 SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
@NotNull ReceiverValue explicitExtensionReceiverForInvoke,
|
@NotNull ReceiverValue explicitExtensionReceiverForInvoke,
|
||||||
@@ -61,7 +63,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, symbolUsageValidator, additionalTypeChecker, statementFilter, isAnnotationContext,
|
||||||
collectAllCandidates, insideSafeCallChain);
|
collectAllCandidates, insideSafeCallChain);
|
||||||
this.candidateCall = candidateCall;
|
this.candidateCall = candidateCall;
|
||||||
this.tracing = tracing;
|
this.tracing = tracing;
|
||||||
@@ -77,7 +79,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.symbolUsageValidator, context.additionalTypeChecker, context.statementFilter, explicitExtensionReceiverForInvoke,
|
||||||
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,7 +103,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.symbolUsageValidator, context.additionalTypeChecker, context.statementFilter,
|
||||||
ReceiverValue.NO_RECEIVER, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
ReceiverValue.NO_RECEIVER, context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +121,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, symbolUsageValidator, additionalTypeChecker, statementFilter,
|
||||||
explicitExtensionReceiverForInvoke, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
explicitExtensionReceiverForInvoke, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.resolve.calls.model.DataFlowInfoForArgumentsImpl;
|
|||||||
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;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
|
||||||
public abstract class CallResolutionContext<Context extends CallResolutionContext<Context>> extends ResolutionContext<Context> {
|
public abstract class CallResolutionContext<Context extends CallResolutionContext<Context>> extends ResolutionContext<Context> {
|
||||||
@@ -49,13 +50,15 @@ public abstract class CallResolutionContext<Context extends CallResolutionContex
|
|||||||
@SuppressWarnings("NullableProblems")
|
@SuppressWarnings("NullableProblems")
|
||||||
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
@Nullable MutableDataFlowInfoForArguments dataFlowInfoForArguments,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
|
SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@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, additionalTypeChecker,
|
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callChecker, symbolUsageValidator,
|
||||||
|
additionalTypeChecker,
|
||||||
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
this.call = call;
|
this.call = call;
|
||||||
this.checkArguments = checkArguments;
|
this.checkArguments = checkArguments;
|
||||||
|
|||||||
+5
@@ -24,6 +24,7 @@ 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;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
import org.jetbrains.kotlin.types.TypeUtils;
|
import org.jetbrains.kotlin.types.TypeUtils;
|
||||||
|
|
||||||
@@ -49,6 +50,8 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
@NotNull
|
@NotNull
|
||||||
public final CallChecker callChecker;
|
public final CallChecker callChecker;
|
||||||
@NotNull
|
@NotNull
|
||||||
|
public final SymbolUsageValidator symbolUsageValidator;
|
||||||
|
@NotNull
|
||||||
public final StatementFilter statementFilter;
|
public final StatementFilter statementFilter;
|
||||||
|
|
||||||
public final AdditionalTypeChecker additionalTypeChecker;
|
public final AdditionalTypeChecker additionalTypeChecker;
|
||||||
@@ -68,6 +71,7 @@ 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 SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
boolean isAnnotationContext,
|
boolean isAnnotationContext,
|
||||||
@@ -81,6 +85,7 @@ public abstract class ResolutionContext<Context extends ResolutionContext<Contex
|
|||||||
this.contextDependency = contextDependency;
|
this.contextDependency = contextDependency;
|
||||||
this.resolutionResultsCache = resolutionResultsCache;
|
this.resolutionResultsCache = resolutionResultsCache;
|
||||||
this.callChecker = callChecker;
|
this.callChecker = callChecker;
|
||||||
|
this.symbolUsageValidator = symbolUsageValidator;
|
||||||
this.statementFilter = statementFilter;
|
this.statementFilter = statementFilter;
|
||||||
this.additionalTypeChecker = additionalTypeChecker;
|
this.additionalTypeChecker = additionalTypeChecker;
|
||||||
this.isAnnotationContext = isAnnotationContext;
|
this.isAnnotationContext = isAnnotationContext;
|
||||||
|
|||||||
+8
-3
@@ -23,6 +23,7 @@ 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;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
|
||||||
public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionContext> {
|
public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionContext> {
|
||||||
@@ -34,13 +35,15 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
|
|||||||
@NotNull ContextDependency contextDependency,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull ResolutionResultsCache resolutionResultsCache,
|
@NotNull ResolutionResultsCache resolutionResultsCache,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
|
@NotNull SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@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, additionalTypeChecker,
|
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callChecker, symbolUsageValidator,
|
||||||
|
additionalTypeChecker,
|
||||||
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,11 +54,12 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
|
|||||||
@NotNull DataFlowInfo dataFlowInfo,
|
@NotNull DataFlowInfo dataFlowInfo,
|
||||||
@NotNull ContextDependency contextDependency,
|
@NotNull ContextDependency contextDependency,
|
||||||
@NotNull CallChecker callChecker,
|
@NotNull CallChecker callChecker,
|
||||||
|
@NotNull SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
||||||
@NotNull StatementFilter statementFilter
|
@NotNull StatementFilter statementFilter
|
||||||
) {
|
) {
|
||||||
this(trace, scope, expectedType, dataFlowInfo, contextDependency, new ResolutionResultsCacheImpl(),
|
this(trace, scope, expectedType, dataFlowInfo, contextDependency, new ResolutionResultsCacheImpl(),
|
||||||
callChecker, additionalTypeChecker, statementFilter, false, false, false);
|
callChecker, symbolUsageValidator, additionalTypeChecker, statementFilter, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -71,7 +75,8 @@ public class SimpleResolutionContext extends ResolutionContext<SimpleResolutionC
|
|||||||
boolean insideSafeCallChain
|
boolean insideSafeCallChain
|
||||||
) {
|
) {
|
||||||
return new SimpleResolutionContext(
|
return new SimpleResolutionContext(
|
||||||
trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache, callChecker, additionalTypeChecker,
|
trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache,
|
||||||
|
callChecker, symbolUsageValidator, additionalTypeChecker,
|
||||||
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.resolve.calls.model.MutableDataFlowInfoForArguments;
|
|||||||
import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall;
|
import org.jetbrains.kotlin.resolve.calls.model.MutableResolvedCall;
|
||||||
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;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -57,6 +58,7 @@ 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 SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
||||||
@NotNull StatementFilter statementFilter,
|
@NotNull StatementFilter statementFilter,
|
||||||
@NotNull Collection<MutableResolvedCall<F>> resolvedCalls,
|
@NotNull Collection<MutableResolvedCall<F>> resolvedCalls,
|
||||||
@@ -65,7 +67,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, symbolUsageValidator, additionalTypeChecker, statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
this.lazyCandidates = lazyCandidates;
|
this.lazyCandidates = lazyCandidates;
|
||||||
this.resolvedCalls = resolvedCalls;
|
this.resolvedCalls = resolvedCalls;
|
||||||
this.tracing = tracing;
|
this.tracing = tracing;
|
||||||
@@ -80,7 +82,8 @@ 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.statementFilter, Lists.<MutableResolvedCall<F>>newArrayList(),
|
context.callChecker, context.symbolUsageValidator, context.additionalTypeChecker,
|
||||||
|
context.statementFilter, Lists.<MutableResolvedCall<F>>newArrayList(),
|
||||||
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +128,9 @@ 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, callChecker, additionalTypeChecker, statementFilter, resolvedCalls,
|
resolutionResultsCache, dataFlowInfoForArguments,
|
||||||
|
callChecker, symbolUsageValidator, additionalTypeChecker,
|
||||||
|
statementFilter, resolvedCalls,
|
||||||
isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,7 +141,9 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends C
|
|||||||
public ResolutionTask<D, F> replaceCall(@NotNull Call newCall) {
|
public ResolutionTask<D, F> replaceCall(@NotNull Call newCall) {
|
||||||
return new ResolutionTask<D, F>(
|
return new ResolutionTask<D, F>(
|
||||||
lazyCandidates, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
lazyCandidates, tracing, trace, scope, newCall, expectedType, dataFlowInfo, contextDependency, checkArguments,
|
||||||
resolutionResultsCache, dataFlowInfoForArguments, callChecker, additionalTypeChecker, statementFilter, resolvedCalls,
|
resolutionResultsCache, dataFlowInfoForArguments,
|
||||||
|
callChecker, symbolUsageValidator, additionalTypeChecker,
|
||||||
|
statementFilter, resolvedCalls,
|
||||||
isAnnotationContext, collectAllCandidates, insideCallChain);
|
isAnnotationContext, collectAllCandidates, insideCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
|
|||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName
|
import org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.recordScopeAndDataFlowInfo
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.recordScopeAndDataFlowInfo
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.classObjectType
|
import org.jetbrains.kotlin.resolve.descriptorUtil.classObjectType
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getClassObjectReferenceTarget
|
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.hasClassObjectType
|
import org.jetbrains.kotlin.resolve.descriptorUtil.hasClassObjectType
|
||||||
import org.jetbrains.kotlin.resolve.scopes.ChainedScope
|
import org.jetbrains.kotlin.resolve.scopes.ChainedScope
|
||||||
import org.jetbrains.kotlin.resolve.scopes.FilteringScope
|
import org.jetbrains.kotlin.resolve.scopes.FilteringScope
|
||||||
@@ -182,12 +181,18 @@ private fun QualifierReceiver.resolveReferenceTarget(
|
|||||||
val isCallableWithReceiver = selector is CallableDescriptor &&
|
val isCallableWithReceiver = selector is CallableDescriptor &&
|
||||||
(selector.getDispatchReceiverParameter() != null || selector.getExtensionReceiverParameter() != null)
|
(selector.getDispatchReceiverParameter() != null || selector.getExtensionReceiverParameter() != null)
|
||||||
|
|
||||||
if (classifier is ClassDescriptor && classifier.hasClassObjectType && isCallableWithReceiver) {
|
val declarationDescriptor = descriptor
|
||||||
if (classifier.getCompanionObjectDescriptor() != null) {
|
if (declarationDescriptor is ClassifierDescriptor)
|
||||||
|
context.symbolUsageValidator.validateTypeUsage(declarationDescriptor, context.trace, referenceExpression)
|
||||||
|
|
||||||
|
if (isCallableWithReceiver && classifier is ClassDescriptor && classifier.hasClassObjectType) {
|
||||||
|
val companionObjectDescriptor = classifier.getCompanionObjectDescriptor()
|
||||||
|
if (companionObjectDescriptor != null) {
|
||||||
context.trace.record(SHORT_REFERENCE_TO_COMPANION_OBJECT, referenceExpression, classifier)
|
context.trace.record(SHORT_REFERENCE_TO_COMPANION_OBJECT, referenceExpression, classifier)
|
||||||
|
context.symbolUsageValidator.validateTypeUsage(companionObjectDescriptor, context.trace, referenceExpression)
|
||||||
|
return companionObjectDescriptor
|
||||||
}
|
}
|
||||||
return classifier.getClassObjectReferenceTarget()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return descriptor
|
return declarationDescriptor
|
||||||
}
|
}
|
||||||
|
|||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package org.jetbrains.kotlin.resolve.validation
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
|
|
||||||
|
public open class CompositeSymbolUsageValidator(val validators: List<SymbolUsageValidator>) : SymbolUsageValidator {
|
||||||
|
|
||||||
|
constructor(vararg validator : SymbolUsageValidator) : this(validator.toList()) {}
|
||||||
|
|
||||||
|
override fun validateCall(targetDescriptor: CallableDescriptor, trace: BindingTrace, element: PsiElement) {
|
||||||
|
validators.forEach { it.validateCall(targetDescriptor, trace, element) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun validateTypeUsage(targetDescriptor: ClassifierDescriptor, trace: BindingTrace, element: PsiElement) {
|
||||||
|
validators.forEach { it.validateTypeUsage(targetDescriptor, trace, element) }
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package org.jetbrains.kotlin.resolve.validation
|
||||||
|
|
||||||
|
object DefaultSymbolUsageValidator : CompositeSymbolUsageValidator()
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package org.jetbrains.kotlin.resolve.validation
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
|
|
||||||
|
public trait SymbolUsageValidator {
|
||||||
|
|
||||||
|
fun validateTypeUsage(targetDescriptor: ClassifierDescriptor, trace: BindingTrace, element: PsiElement) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun validateCall(targetDescriptor: CallableDescriptor, trace: BindingTrace, element: PsiElement) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+12
-2
@@ -62,6 +62,7 @@ import org.jetbrains.kotlin.resolve.scopes.WritableScopeImpl;
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver;
|
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.*;
|
import org.jetbrains.kotlin.types.*;
|
||||||
import org.jetbrains.kotlin.types.checker.JetTypeChecker;
|
import org.jetbrains.kotlin.types.checker.JetTypeChecker;
|
||||||
import org.jetbrains.kotlin.util.slicedMap.WritableSlice;
|
import org.jetbrains.kotlin.util.slicedMap.WritableSlice;
|
||||||
@@ -436,8 +437,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
trace.record(RESOLVED_CALL, call, resolvedCall);
|
trace.record(RESOLVED_CALL, call, resolvedCall);
|
||||||
trace.record(CALL, expression, call);
|
trace.record(CALL, expression, call);
|
||||||
|
|
||||||
context.callChecker.check(resolvedCall,
|
BasicCallResolutionContext resolutionContext = BasicCallResolutionContext.create(context, call, CheckValueArgumentsMode.DISABLED);
|
||||||
BasicCallResolutionContext.create(context, call, CheckValueArgumentsMode.DISABLED));
|
context.callChecker.check(resolvedCall, resolutionContext);
|
||||||
|
context.symbolUsageValidator.validateCall(descriptor, trace, expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isDeclaredInClass(ReceiverParameterDescriptor receiver) {
|
private static boolean isDeclaredInClass(ReceiverParameterDescriptor receiver) {
|
||||||
@@ -1006,11 +1008,19 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
|
|
||||||
boolean result = true;
|
boolean result = true;
|
||||||
JetExpression reportOn = expression != null ? expression : expressionWithParenthesis;
|
JetExpression reportOn = expression != null ? expression : expressionWithParenthesis;
|
||||||
|
if (reportOn instanceof JetQualifiedExpression)
|
||||||
|
reportOn = ((JetQualifiedExpression)reportOn).getSelectorExpression();
|
||||||
|
|
||||||
if (variable instanceof PropertyDescriptor) {
|
if (variable instanceof PropertyDescriptor) {
|
||||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variable;
|
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variable;
|
||||||
|
PropertySetterDescriptor setter = propertyDescriptor.getSetter();
|
||||||
if (propertyDescriptor.isSetterProjectedOut()) {
|
if (propertyDescriptor.isSetterProjectedOut()) {
|
||||||
trace.report(SETTER_PROJECTED_OUT.on(reportOn, propertyDescriptor));
|
trace.report(SETTER_PROJECTED_OUT.on(reportOn, propertyDescriptor));
|
||||||
result = false;
|
result = false;
|
||||||
|
} else {
|
||||||
|
if (setter != null) {
|
||||||
|
context.symbolUsageValidator.validateCall(setter, trace, reportOn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.context.GlobalContext;
|
|||||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
||||||
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider;
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.DynamicTypesSettings;
|
import org.jetbrains.kotlin.types.DynamicTypesSettings;
|
||||||
import org.jetbrains.kotlin.builtins.ReflectionTypes;
|
import org.jetbrains.kotlin.builtins.ReflectionTypes;
|
||||||
|
|
||||||
@@ -37,6 +38,7 @@ public class ExpressionTypingComponents {
|
|||||||
/*package*/ ForLoopConventionsChecker forLoopConventionsChecker;
|
/*package*/ ForLoopConventionsChecker forLoopConventionsChecker;
|
||||||
/*package*/ ReflectionTypes reflectionTypes;
|
/*package*/ ReflectionTypes reflectionTypes;
|
||||||
/*package*/ AdditionalCheckerProvider additionalCheckerProvider;
|
/*package*/ AdditionalCheckerProvider additionalCheckerProvider;
|
||||||
|
/*package*/ SymbolUsageValidator symbolUsageValidator;
|
||||||
/*package*/ DynamicTypesSettings dynamicTypesSettings;
|
/*package*/ DynamicTypesSettings dynamicTypesSettings;
|
||||||
/*package*/ KotlinBuiltIns builtIns;
|
/*package*/ KotlinBuiltIns builtIns;
|
||||||
/*package*/ LocalClassifierAnalyzer localClassifierAnalyzer;
|
/*package*/ LocalClassifierAnalyzer localClassifierAnalyzer;
|
||||||
@@ -86,6 +88,11 @@ public class ExpressionTypingComponents {
|
|||||||
this.additionalCheckerProvider = additionalCheckerProvider;
|
this.additionalCheckerProvider = additionalCheckerProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public void setSymbolUsageValidator(SymbolUsageValidator symbolUsageValidator) {
|
||||||
|
this.symbolUsageValidator = symbolUsageValidator;
|
||||||
|
}
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setDynamicTypesSettings(@NotNull DynamicTypesSettings dynamicTypesSettings) {
|
public void setDynamicTypesSettings(@NotNull DynamicTypesSettings dynamicTypesSettings) {
|
||||||
this.dynamicTypesSettings = dynamicTypesSettings;
|
this.dynamicTypesSettings = dynamicTypesSettings;
|
||||||
|
|||||||
+12
-4
@@ -29,6 +29,7 @@ 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.constants.CompileTimeConstantChecker;
|
import org.jetbrains.kotlin.resolve.constants.CompileTimeConstantChecker;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
|
|
||||||
public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingContext> {
|
public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingContext> {
|
||||||
@@ -56,6 +57,7 @@ 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 : expressionTypingServices.getCallChecker(),
|
callChecker != null ? callChecker : expressionTypingServices.getCallChecker(),
|
||||||
|
expressionTypingServices.getSymbolUsageValidator(),
|
||||||
expressionTypingServices.getAdditionalTypeChecker(),
|
expressionTypingServices.getAdditionalTypeChecker(),
|
||||||
StatementFilter.NONE, false);
|
StatementFilter.NONE, false);
|
||||||
}
|
}
|
||||||
@@ -64,7 +66,8 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
public static ExpressionTypingContext newContext(@NotNull ResolutionContext context) {
|
public static ExpressionTypingContext newContext(@NotNull ResolutionContext context) {
|
||||||
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.callChecker, context.additionalTypeChecker,
|
context.contextDependency, context.resolutionResultsCache,
|
||||||
|
context.callChecker, context.symbolUsageValidator, context.additionalTypeChecker,
|
||||||
context.statementFilter,
|
context.statementFilter,
|
||||||
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain
|
context.isAnnotationContext, context.collectAllCandidates, context.insideCallChain
|
||||||
);
|
);
|
||||||
@@ -79,12 +82,14 @@ 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 SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@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, additionalTypeChecker,
|
trace, scope, dataFlowInfo, expectedType, contextDependency, resolutionResultsCache, callChecker, symbolUsageValidator,
|
||||||
|
additionalTypeChecker,
|
||||||
statementFilter, isAnnotationContext, false, false);
|
statementFilter, isAnnotationContext, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,13 +103,15 @@ 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 SymbolUsageValidator symbolUsageValidator,
|
||||||
@NotNull AdditionalTypeChecker additionalTypeChecker,
|
@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, additionalTypeChecker,
|
super(trace, scope, expectedType, dataFlowInfo, contextDependency, resolutionResultsCache,
|
||||||
|
callChecker, symbolUsageValidator, additionalTypeChecker,
|
||||||
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,7 +128,8 @@ public class ExpressionTypingContext extends ResolutionContext<ExpressionTypingC
|
|||||||
boolean insideSafeCallChain
|
boolean insideSafeCallChain
|
||||||
) {
|
) {
|
||||||
return new ExpressionTypingContext(trace, scope, dataFlowInfo,
|
return new ExpressionTypingContext(trace, scope, dataFlowInfo,
|
||||||
expectedType, contextDependency, resolutionResultsCache, callChecker, additionalTypeChecker,
|
expectedType, contextDependency, resolutionResultsCache,
|
||||||
|
callChecker, symbolUsageValidator, additionalTypeChecker,
|
||||||
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
statementFilter, isAnnotationContext, collectAllCandidates, insideSafeCallChain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
@@ -42,6 +42,7 @@ import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluat
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
import org.jetbrains.kotlin.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.WritableScope;
|
import org.jetbrains.kotlin.resolve.scopes.WritableScope;
|
||||||
import org.jetbrains.kotlin.resolve.scopes.WritableScopeImpl;
|
import org.jetbrains.kotlin.resolve.scopes.WritableScopeImpl;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.types.ErrorUtils;
|
import org.jetbrains.kotlin.types.ErrorUtils;
|
||||||
import org.jetbrains.kotlin.types.JetType;
|
import org.jetbrains.kotlin.types.JetType;
|
||||||
import org.jetbrains.kotlin.types.expressions.typeInfoFactory.TypeInfoFactoryPackage;
|
import org.jetbrains.kotlin.types.expressions.typeInfoFactory.TypeInfoFactoryPackage;
|
||||||
@@ -461,6 +462,11 @@ public class ExpressionTypingServices {
|
|||||||
return new CompositeChecker(checkers);
|
return new CompositeChecker(checkers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public SymbolUsageValidator getSymbolUsageValidator() {
|
||||||
|
return expressionTypingComponents.symbolUsageValidator;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public AdditionalTypeChecker getAdditionalTypeChecker() {
|
public AdditionalTypeChecker getAdditionalTypeChecker() {
|
||||||
List<AdditionalTypeChecker> checkers = expressionTypingComponents.additionalCheckerProvider.getAdditionalTypeCheckers();
|
List<AdditionalTypeChecker> checkers = expressionTypingComponents.additionalCheckerProvider.getAdditionalTypeCheckers();
|
||||||
|
|||||||
+5
-1
@@ -262,7 +262,11 @@ public class ExpressionTypingUtils {
|
|||||||
JetType componentType = null;
|
JetType componentType = null;
|
||||||
if (results.isSuccess()) {
|
if (results.isSuccess()) {
|
||||||
context.trace.record(COMPONENT_RESOLVED_CALL, entry, results.getResultingCall());
|
context.trace.record(COMPONENT_RESOLVED_CALL, entry, results.getResultingCall());
|
||||||
componentType = results.getResultingDescriptor().getReturnType();
|
FunctionDescriptor componentFunction = results.getResultingDescriptor();
|
||||||
|
|
||||||
|
expressionTypingServices.getSymbolUsageValidator().validateCall(componentFunction, context.trace, entry);
|
||||||
|
|
||||||
|
componentType = componentFunction.getReturnType();
|
||||||
if (componentType != null && !noExpectedType(expectedType)
|
if (componentType != null && !noExpectedType(expectedType)
|
||||||
&& !JetTypeChecker.DEFAULT.isSubtypeOf(componentType, expectedType)) {
|
&& !JetTypeChecker.DEFAULT.isSubtypeOf(componentType, expectedType)) {
|
||||||
|
|
||||||
|
|||||||
+6
-2
@@ -80,8 +80,10 @@ public class ForLoopConventionsChecker {
|
|||||||
if (iteratorResolutionResults.isSuccess()) {
|
if (iteratorResolutionResults.isSuccess()) {
|
||||||
ResolvedCall<FunctionDescriptor> iteratorResolvedCall = iteratorResolutionResults.getResultingCall();
|
ResolvedCall<FunctionDescriptor> iteratorResolvedCall = iteratorResolutionResults.getResultingCall();
|
||||||
context.trace.record(LOOP_RANGE_ITERATOR_RESOLVED_CALL, loopRangeExpression, iteratorResolvedCall);
|
context.trace.record(LOOP_RANGE_ITERATOR_RESOLVED_CALL, loopRangeExpression, iteratorResolvedCall);
|
||||||
|
|
||||||
FunctionDescriptor iteratorFunction = iteratorResolvedCall.getResultingDescriptor();
|
FunctionDescriptor iteratorFunction = iteratorResolvedCall.getResultingDescriptor();
|
||||||
|
|
||||||
|
expressionTypingServices.getSymbolUsageValidator().validateCall(iteratorFunction, context.trace, loopRangeExpression);
|
||||||
|
|
||||||
JetType iteratorType = iteratorFunction.getReturnType();
|
JetType iteratorType = iteratorFunction.getReturnType();
|
||||||
JetType hasNextType = checkConventionForIterator(context, loopRangeExpression, iteratorType, "hasNext",
|
JetType hasNextType = checkConventionForIterator(context, loopRangeExpression, iteratorType, "hasNext",
|
||||||
HAS_NEXT_FUNCTION_AMBIGUITY, HAS_NEXT_MISSING, HAS_NEXT_FUNCTION_NONE_APPLICABLE,
|
HAS_NEXT_FUNCTION_AMBIGUITY, HAS_NEXT_MISSING, HAS_NEXT_FUNCTION_NONE_APPLICABLE,
|
||||||
@@ -130,7 +132,9 @@ public class ForLoopConventionsChecker {
|
|||||||
assert nextResolutionResults.isSuccess();
|
assert nextResolutionResults.isSuccess();
|
||||||
ResolvedCall<FunctionDescriptor> resolvedCall = nextResolutionResults.getResultingCall();
|
ResolvedCall<FunctionDescriptor> resolvedCall = nextResolutionResults.getResultingCall();
|
||||||
context.trace.record(resolvedCallKey, loopRangeExpression, resolvedCall);
|
context.trace.record(resolvedCallKey, loopRangeExpression, resolvedCall);
|
||||||
return resolvedCall.getResultingDescriptor().getReturnType();
|
FunctionDescriptor functionDescriptor = resolvedCall.getResultingDescriptor();
|
||||||
|
expressionTypingServices.getSymbolUsageValidator().validateCall(functionDescriptor, context.trace, loopRangeExpression);
|
||||||
|
return functionDescriptor.getReturnType();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -6,6 +6,6 @@ trait Tr<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun test(t: Tr<*>) {
|
fun test(t: Tr<*>) {
|
||||||
<!SETTER_PROJECTED_OUT!>t.v<!> = null!!
|
t.<!SETTER_PROJECTED_OUT!>v<!> = null!!
|
||||||
t.v checkType { it : _<Any?> }
|
t.v checkType { it : _<Any?> }
|
||||||
}
|
}
|
||||||
+1
-1
@@ -4,5 +4,5 @@ trait Tr<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun test(t: Tr<out String>) {
|
fun test(t: Tr<out String>) {
|
||||||
<!SETTER_PROJECTED_OUT!>t.v<!> += null!!
|
t.<!SETTER_PROJECTED_OUT!>v<!> += null!!
|
||||||
}
|
}
|
||||||
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.resolve.TypeResolver;
|
|||||||
import org.jetbrains.kotlin.context.GlobalContext;
|
import org.jetbrains.kotlin.context.GlobalContext;
|
||||||
import org.jetbrains.kotlin.storage.StorageManager;
|
import org.jetbrains.kotlin.storage.StorageManager;
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider;
|
import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
||||||
@@ -65,6 +66,7 @@ public class InjectorForTests {
|
|||||||
private final GlobalContext globalContext;
|
private final GlobalContext globalContext;
|
||||||
private final StorageManager storageManager;
|
private final StorageManager storageManager;
|
||||||
private final KotlinJvmCheckerProvider kotlinJvmCheckerProvider;
|
private final KotlinJvmCheckerProvider kotlinJvmCheckerProvider;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final AnnotationResolver annotationResolver;
|
private final AnnotationResolver annotationResolver;
|
||||||
private final CallResolver callResolver;
|
private final CallResolver callResolver;
|
||||||
private final ArgumentTypeResolver argumentTypeResolver;
|
private final ArgumentTypeResolver argumentTypeResolver;
|
||||||
@@ -107,6 +109,7 @@ public class InjectorForTests {
|
|||||||
this.callResolver = new CallResolver();
|
this.callResolver = new CallResolver();
|
||||||
this.expressionTypingUtils = new ExpressionTypingUtils(getExpressionTypingServices(), callResolver, kotlinBuiltIns);
|
this.expressionTypingUtils = new ExpressionTypingUtils(getExpressionTypingServices(), callResolver, kotlinBuiltIns);
|
||||||
this.kotlinJvmCheckerProvider = KotlinJvmCheckerProvider.INSTANCE$;
|
this.kotlinJvmCheckerProvider = KotlinJvmCheckerProvider.INSTANCE$;
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.argumentTypeResolver = new ArgumentTypeResolver();
|
this.argumentTypeResolver = new ArgumentTypeResolver();
|
||||||
this.candidateResolver = new CandidateResolver();
|
this.candidateResolver = new CandidateResolver();
|
||||||
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
||||||
@@ -169,6 +172,7 @@ public class InjectorForTests {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -177,6 +181,8 @@ public class InjectorForTests {
|
|||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PreDestroy
|
@PreDestroy
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.JavaLazyAnalyzerPostConstruct
|
import org.jetbrains.kotlin.resolve.jvm.JavaLazyAnalyzerPostConstruct
|
||||||
import org.jetbrains.kotlin.resolve.lazy.*
|
import org.jetbrains.kotlin.resolve.lazy.*
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.types.DynamicTypesAllowed
|
import org.jetbrains.kotlin.types.DynamicTypesAllowed
|
||||||
import org.jetbrains.kotlin.types.DynamicTypesSettings
|
import org.jetbrains.kotlin.types.DynamicTypesSettings
|
||||||
@@ -106,6 +107,7 @@ private fun generatorForLazyLocalClassifierAnalyzer() =
|
|||||||
field<NoFileScopeProvider>()
|
field<NoFileScopeProvider>()
|
||||||
field<DeclarationScopeProviderForLocalClassifierAnalyzer>()
|
field<DeclarationScopeProviderForLocalClassifierAnalyzer>()
|
||||||
field<LocalLazyDeclarationResolver>()
|
field<LocalLazyDeclarationResolver>()
|
||||||
|
field<DefaultSymbolUsageValidator>()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generatorForLazyBodyResolve() =
|
private fun generatorForLazyBodyResolve() =
|
||||||
@@ -118,6 +120,7 @@ private fun generatorForLazyBodyResolve() =
|
|||||||
parameter<DynamicTypesSettings>()
|
parameter<DynamicTypesSettings>()
|
||||||
|
|
||||||
field<ModuleDescriptor>(init = GivenExpression("analyzer.getModuleDescriptor()"), useAsContext = true)
|
field<ModuleDescriptor>(init = GivenExpression("analyzer.getModuleDescriptor()"), useAsContext = true)
|
||||||
|
field<DefaultSymbolUsageValidator>()
|
||||||
|
|
||||||
publicField<LazyTopDownAnalyzerForTopLevel>()
|
publicField<LazyTopDownAnalyzerForTopLevel>()
|
||||||
}
|
}
|
||||||
@@ -211,6 +214,7 @@ private fun generatorForMacro() =
|
|||||||
init = GivenExpression("org.jetbrains.kotlin.context.ContextPackage.GlobalContext()"))
|
init = GivenExpression("org.jetbrains.kotlin.context.ContextPackage.GlobalContext()"))
|
||||||
|
|
||||||
field<AdditionalCheckerProvider.DefaultProvider>()
|
field<AdditionalCheckerProvider.DefaultProvider>()
|
||||||
|
field<DefaultSymbolUsageValidator>()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generatorForTests() =
|
private fun generatorForTests() =
|
||||||
@@ -228,6 +232,7 @@ private fun generatorForTests() =
|
|||||||
useAsContext = true)
|
useAsContext = true)
|
||||||
|
|
||||||
field<KotlinJvmCheckerProvider>()
|
field<KotlinJvmCheckerProvider>()
|
||||||
|
field<DefaultSymbolUsageValidator>()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generatorForBodyResolve() =
|
private fun generatorForBodyResolve() =
|
||||||
@@ -240,6 +245,7 @@ private fun generatorForBodyResolve() =
|
|||||||
parameter<StatementFilter>()
|
parameter<StatementFilter>()
|
||||||
|
|
||||||
publicField<BodyResolver>()
|
publicField<BodyResolver>()
|
||||||
|
field<DefaultSymbolUsageValidator>()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generatorForLazyResolve() =
|
private fun generatorForLazyResolve() =
|
||||||
@@ -256,6 +262,7 @@ private fun generatorForLazyResolve() =
|
|||||||
|
|
||||||
field<ScopeProvider>()
|
field<ScopeProvider>()
|
||||||
field<LazyResolveToken>()
|
field<LazyResolveToken>()
|
||||||
|
field<DefaultSymbolUsageValidator>()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DependencyInjectorGenerator.commonForResolveSessionBased() {
|
private fun DependencyInjectorGenerator.commonForResolveSessionBased() {
|
||||||
@@ -267,6 +274,7 @@ private fun DependencyInjectorGenerator.commonForResolveSessionBased() {
|
|||||||
|
|
||||||
publicField<ResolveSession>()
|
publicField<ResolveSession>()
|
||||||
field<ScopeProvider>()
|
field<ScopeProvider>()
|
||||||
|
field<DefaultSymbolUsageValidator>()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DependencyInjectorGenerator.commonForJavaTopDownAnalyzer() {
|
private fun DependencyInjectorGenerator.commonForJavaTopDownAnalyzer() {
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
|||||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
|
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker
|
import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.CompositeSymbolUsageValidator
|
||||||
|
|
||||||
enum class Tail {
|
enum class Tail {
|
||||||
COMMA
|
COMMA
|
||||||
@@ -170,17 +171,11 @@ class ExpectedInfos(
|
|||||||
|
|
||||||
val expectedType = (callElement as? JetExpression)?.let { bindingContext[BindingContext.EXPECTED_EXPRESSION_TYPE, it] } ?: TypeUtils.NO_EXPECTED_TYPE
|
val expectedType = (callElement as? JetExpression)?.let { bindingContext[BindingContext.EXPECTED_EXPRESSION_TYPE, it] } ?: TypeUtils.NO_EXPECTED_TYPE
|
||||||
val dataFlowInfo = bindingContext.getDataFlowInfo(calleeExpression)
|
val dataFlowInfo = bindingContext.getDataFlowInfo(calleeExpression)
|
||||||
val callResolutionContext = BasicCallResolutionContext.create(
|
val bindingTrace = DelegatingBindingTrace(bindingContext, "Temporary trace for completion")
|
||||||
DelegatingBindingTrace(bindingContext, "Temporary trace for completion"),
|
val context = BasicCallResolutionContext.create(bindingTrace, resolutionScope, call, expectedType, dataFlowInfo,
|
||||||
resolutionScope,
|
ContextDependency.INDEPENDENT, CheckValueArgumentsMode.ENABLED,
|
||||||
call,
|
CompositeChecker(listOf()), CompositeSymbolUsageValidator(), AdditionalTypeChecker.Composite(listOf()), false)
|
||||||
expectedType,
|
val callResolutionContext = context.replaceCollectAllCandidates(true)
|
||||||
dataFlowInfo,
|
|
||||||
ContextDependency.INDEPENDENT,
|
|
||||||
CheckValueArgumentsMode.ENABLED,
|
|
||||||
CompositeChecker(listOf()),
|
|
||||||
AdditionalTypeChecker.Composite(listOf()),
|
|
||||||
false).replaceCollectAllCandidates(true)
|
|
||||||
val callResolver = InjectorForMacros(
|
val callResolver = InjectorForMacros(
|
||||||
callElement.getProject(),
|
callElement.getProject(),
|
||||||
resolutionFacade.findModuleDescriptor(callElement)
|
resolutionFacade.findModuleDescriptor(callElement)
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
||||||
|
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
||||||
import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider;
|
import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider;
|
||||||
import org.jetbrains.kotlin.types.DynamicTypesAllowed;
|
import org.jetbrains.kotlin.types.DynamicTypesAllowed;
|
||||||
@@ -83,6 +84,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
|||||||
private final DeclarationProviderFactory declarationProviderFactory;
|
private final DeclarationProviderFactory declarationProviderFactory;
|
||||||
private final ResolveSession resolveSession;
|
private final ResolveSession resolveSession;
|
||||||
private final ScopeProvider scopeProvider;
|
private final ScopeProvider scopeProvider;
|
||||||
|
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||||
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
||||||
private final KotlinJsCheckerProvider kotlinJsCheckerProvider;
|
private final KotlinJsCheckerProvider kotlinJsCheckerProvider;
|
||||||
private final DynamicTypesAllowed dynamicTypesAllowed;
|
private final DynamicTypesAllowed dynamicTypesAllowed;
|
||||||
@@ -141,6 +143,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
|||||||
this.declarationProviderFactory = declarationProviderFactory;
|
this.declarationProviderFactory = declarationProviderFactory;
|
||||||
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
||||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||||
|
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||||
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
||||||
this.kotlinJsCheckerProvider = KotlinJsCheckerProvider.INSTANCE$;
|
this.kotlinJsCheckerProvider = KotlinJsCheckerProvider.INSTANCE$;
|
||||||
this.dynamicTypesAllowed = new DynamicTypesAllowed();
|
this.dynamicTypesAllowed = new DynamicTypesAllowed();
|
||||||
@@ -235,6 +238,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
|||||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||||
|
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||||
@@ -252,6 +256,8 @@ public class InjectorForTopDownAnalyzerForJs {
|
|||||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
|
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||||
|
|
||||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||||
|
|
||||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||||
|
|||||||
Reference in New Issue
Block a user