Workaround to allow QualifiedExpressionResolver to be created without an Injector. Should be fixed by code owner.

This commit is contained in:
Ilya Ryzhenkov
2015-04-21 16:04:01 +03:00
parent 79388d0dbf
commit bcb0b499f4
5 changed files with 24 additions and 8 deletions
@@ -33,6 +33,7 @@ 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.CompositeSymbolUsageValidator;
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator; import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
import javax.inject.Inject; import javax.inject.Inject;
@@ -43,7 +44,14 @@ 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; private SymbolUsageValidator symbolUsageValidator = new CompositeSymbolUsageValidator();
/**
* @deprecated Instance of this class should be obtained from the Injector
*/
@Deprecated
public QualifiedExpressionResolver() {
}
@Inject @Inject
public void setSymbolUsageValidator(SymbolUsageValidator symbolUsageValidator) { public void setSymbolUsageValidator(SymbolUsageValidator symbolUsageValidator) {
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.resolve.FunctionDescriptorResolver;
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices; import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices;
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils; import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils;
import org.jetbrains.kotlin.resolve.TypeResolver; import org.jetbrains.kotlin.resolve.TypeResolver;
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver;
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;
@@ -44,7 +45,6 @@ import org.jetbrains.kotlin.types.expressions.LocalClassifierAnalyzer;
import org.jetbrains.kotlin.builtins.ReflectionTypes; import org.jetbrains.kotlin.builtins.ReflectionTypes;
import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver; import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver;
import org.jetbrains.kotlin.resolve.StatementFilter; import org.jetbrains.kotlin.resolve.StatementFilter;
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver;
import org.jetbrains.kotlin.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider; import org.jetbrains.kotlin.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
import org.jetbrains.kotlin.context.TypeLazinessToken; import org.jetbrains.kotlin.context.TypeLazinessToken;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -63,6 +63,7 @@ public class InjectorForTests {
private final ExpressionTypingServices expressionTypingServices; private final ExpressionTypingServices expressionTypingServices;
private final ExpressionTypingUtils expressionTypingUtils; private final ExpressionTypingUtils expressionTypingUtils;
private final TypeResolver typeResolver; private final TypeResolver typeResolver;
private final QualifiedExpressionResolver qualifiedExpressionResolver;
private final GlobalContext globalContext; private final GlobalContext globalContext;
private final StorageManager storageManager; private final StorageManager storageManager;
private final KotlinJvmCheckerProvider kotlinJvmCheckerProvider; private final KotlinJvmCheckerProvider kotlinJvmCheckerProvider;
@@ -82,7 +83,6 @@ public class InjectorForTests {
private final ReflectionTypes reflectionTypes; private final ReflectionTypes reflectionTypes;
private final CallExpressionResolver callExpressionResolver; private final CallExpressionResolver callExpressionResolver;
private final StatementFilter statementFilter; private final StatementFilter statementFilter;
private final QualifiedExpressionResolver qualifiedExpressionResolver;
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider; private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
private final TypeLazinessToken typeLazinessToken; private final TypeLazinessToken typeLazinessToken;
@@ -102,7 +102,7 @@ public class InjectorForTests {
this.storageManager = globalContext.getStorageManager(); this.storageManager = globalContext.getStorageManager();
this.typeLazinessToken = new TypeLazinessToken(); this.typeLazinessToken = new TypeLazinessToken();
this.dynamicTypesSettings = new DynamicTypesSettings(); this.dynamicTypesSettings = new DynamicTypesSettings();
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, typeLazinessToken, dynamicTypesSettings); this.typeResolver = new TypeResolver(annotationResolver, getQualifiedExpressionResolver(), moduleDescriptor, flexibleTypeCapabilitiesProvider, storageManager, typeLazinessToken, dynamicTypesSettings);
this.expressionTypingComponents = new ExpressionTypingComponents(); this.expressionTypingComponents = new ExpressionTypingComponents();
this.expressionTypingServices = new ExpressionTypingServices(expressionTypingComponents); this.expressionTypingServices = new ExpressionTypingServices(expressionTypingComponents);
this.functionDescriptorResolver = new FunctionDescriptorResolver(getTypeResolver(), getDescriptorResolver(), annotationResolver, storageManager, getExpressionTypingServices(), kotlinBuiltIns); this.functionDescriptorResolver = new FunctionDescriptorResolver(getTypeResolver(), getDescriptorResolver(), annotationResolver, storageManager, getExpressionTypingServices(), kotlinBuiltIns);
@@ -139,6 +139,8 @@ public class InjectorForTests {
this.expressionTypingServices.setStatementFilter(statementFilter); this.expressionTypingServices.setStatementFilter(statementFilter);
this.expressionTypingServices.setTypeResolver(typeResolver); this.expressionTypingServices.setTypeResolver(typeResolver);
this.qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
annotationResolver.setCallResolver(callResolver); annotationResolver.setCallResolver(callResolver);
annotationResolver.setStorageManager(storageManager); annotationResolver.setStorageManager(storageManager);
annotationResolver.setTypeResolver(typeResolver); annotationResolver.setTypeResolver(typeResolver);
@@ -181,8 +183,6 @@ public class InjectorForTests {
callExpressionResolver.setExpressionTypingServices(expressionTypingServices); callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
} }
@PreDestroy @PreDestroy
@@ -209,4 +209,8 @@ public class InjectorForTests {
return this.typeResolver; return this.typeResolver;
} }
public QualifiedExpressionResolver getQualifiedExpressionResolver() {
return this.qualifiedExpressionResolver;
}
} }
@@ -227,6 +227,7 @@ private fun generatorForTests() =
publicField<ExpressionTypingServices>() publicField<ExpressionTypingServices>()
publicField<ExpressionTypingUtils>() publicField<ExpressionTypingUtils>()
publicField<TypeResolver>() publicField<TypeResolver>()
publicField<QualifiedExpressionResolver>()
field<GlobalContext>(init = GivenExpression("org.jetbrains.kotlin.context.ContextPackage.GlobalContext()"), field<GlobalContext>(init = GivenExpression("org.jetbrains.kotlin.context.ContextPackage.GlobalContext()"),
useAsContext = true) useAsContext = true)
@@ -30,6 +30,8 @@ import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiDocumentManager
import org.jetbrains.kotlin.di.InjectorForTests
import org.jetbrains.kotlin.test.JetTestUtils
public abstract class AbstractAddImportTest : AbstractImportsTest() { public abstract class AbstractAddImportTest : AbstractImportsTest() {
override fun doTest(file: JetFile) { override fun doTest(file: JetFile) {
@@ -45,7 +47,7 @@ public abstract class AbstractAddImportTest : AbstractImportsTest() {
val importDirective = JetPsiFactory(getProject()).createImportDirective(descriptorName) val importDirective = JetPsiFactory(getProject()).createImportDirective(descriptorName)
val moduleDescriptor = file.getResolutionFacade().findModuleDescriptor(file) val moduleDescriptor = file.getResolutionFacade().findModuleDescriptor(file)
val scope = JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor) val scope = JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor)
val descriptors = QualifiedExpressionResolver() val descriptors = InjectorForTests(getProject(), moduleDescriptor).getQualifiedExpressionResolver()
.processImportReference(importDirective, scope, scope, BindingTraceContext(), LookupMode.EVERYTHING) .processImportReference(importDirective, scope, scope, BindingTraceContext(), LookupMode.EVERYTHING)
.getAllDescriptors() .getAllDescriptors()
.filter(filter) .filter(filter)
@@ -23,6 +23,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.PsiTreeUtil
import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture
import org.jetbrains.kotlin.checkers.AbstractJetPsiCheckerTest import org.jetbrains.kotlin.checkers.AbstractJetPsiCheckerTest
import org.jetbrains.kotlin.di.InjectorForTests
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.completion.test.AbstractJvmBasicCompletionTest import org.jetbrains.kotlin.idea.completion.test.AbstractJvmBasicCompletionTest
@@ -57,7 +58,7 @@ public abstract class AbstractCodeFragmentHighlightingTest : AbstractJetPsiCheck
val importDirective = JetPsiFactory(getProject()).createImportDirective(it) val importDirective = JetPsiFactory(getProject()).createImportDirective(it)
val moduleDescriptor = file.getResolutionFacade().findModuleDescriptor(file) val moduleDescriptor = file.getResolutionFacade().findModuleDescriptor(file)
val scope = JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor) val scope = JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor)
val descriptor = QualifiedExpressionResolver() val descriptor = InjectorForTests(getProject(), moduleDescriptor).getQualifiedExpressionResolver()
.processImportReference(importDirective, scope, scope, BindingTraceContext(), LookupMode.EVERYTHING) .processImportReference(importDirective, scope, scope, BindingTraceContext(), LookupMode.EVERYTHING)
.getAllDescriptors() .getAllDescriptors()
.singleOrNull() ?: error("Could not resolve descriptor to import: $it") .singleOrNull() ?: error("Could not resolve descriptor to import: $it")