diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java index 4522ace1698..5a1d844c35a 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -106,7 +106,7 @@ public class InjectorForJavaDescriptorResolver { this.javaPropertyResolver = new JavaPropertyResolver(); this.javaSupertypeResolver = new JavaSupertypeResolver(); - javaClassFinder.setPsiClassFinder(psiClassFinder); + this.javaClassFinder.setPsiClassFinder(psiClassFinder); traceBasedExternalSignatureResolver.setAnnotationResolver(javaAnnotationResolver); traceBasedExternalSignatureResolver.setTrace(bindingTrace); @@ -121,7 +121,7 @@ public class InjectorForJavaDescriptorResolver { this.javaDescriptorResolver.setClassResolver(javaClassResolver); this.javaDescriptorResolver.setNamespaceResolver(javaNamespaceResolver); - this.psiClassFinder.setProject(project); + psiClassFinder.setProject(project); virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder); @@ -202,12 +202,12 @@ public class InjectorForJavaDescriptorResolver { public void destroy() { } + public JavaClassFinderImpl getJavaClassFinder() { + return this.javaClassFinder; + } + public JavaDescriptorResolver getJavaDescriptorResolver() { return this.javaDescriptorResolver; } - public PsiClassFinderImpl getPsiClassFinder() { - return this.psiClassFinder; - } - } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AnalyzerFacadeForJVM.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AnalyzerFacadeForJVM.java index f612fc217c0..4c2b38c57f6 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AnalyzerFacadeForJVM.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AnalyzerFacadeForJVM.java @@ -81,32 +81,41 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade { public ResolveSession getLazyResolveSession(@NotNull Project fileProject, @NotNull Collection files) { BindingTraceContext javaResolverTrace = new BindingTraceContext(); InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(fileProject, javaResolverTrace); + return createLazyResolveSession(fileProject, files, javaResolverTrace, injector, true); + } - final PsiClassFinder psiClassFinder = injector.getPsiClassFinder(); + @NotNull + public static ResolveSession createLazyResolveSession( + @NotNull Project project, + @NotNull Collection files, + @NotNull BindingTrace trace, + @NotNull InjectorForJavaDescriptorResolver injector, + final boolean addBuiltIns + ) { + final JavaClassFinderImpl classFinder = injector.getJavaClassFinder(); // TODO: Replace with stub declaration provider LockBasedLazyResolveStorageManager storageManager = new LockBasedLazyResolveStorageManager(); FileBasedDeclarationProviderFactory declarationProviderFactory = new FileBasedDeclarationProviderFactory(storageManager, files, new Predicate() { @Override public boolean apply(FqName fqName) { - return psiClassFinder.findPsiPackage(fqName) != null || new FqName("jet").equals(fqName); + return classFinder.findPackage(fqName) != null || KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName); } }); final JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver(); ModuleConfiguration moduleConfiguration = new ModuleConfiguration() { - @Override public void extendNamespaceScope( @NotNull NamespaceDescriptor namespaceDescriptor, @NotNull WritableScope namespaceMemberScope ) { FqName fqName = DescriptorUtils.getFQName(namespaceDescriptor).toSafe(); - if (new FqName("jet").equals(fqName)) { + if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName) && addBuiltIns) { namespaceMemberScope.importScope(KotlinBuiltIns.getInstance().getBuiltInsScope()); } - if (psiClassFinder.findPsiPackage(fqName) != null) { + if (classFinder.findPackage(fqName) != null) { JetScope javaPackageScope = javaDescriptorResolver.getJavaPackageScope(namespaceDescriptor); assert javaPackageScope != null; namespaceMemberScope.importScope(javaPackageScope); @@ -117,7 +126,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade { ModuleDescriptorImpl lazyModule = createJavaModule(""); lazyModule.setModuleConfiguration(moduleConfiguration); - return new ResolveSession(fileProject, storageManager, lazyModule, declarationProviderFactory, javaResolverTrace); + return new ResolveSession(project, storageManager, lazyModule, declarationProviderFactory, trace); } public static AnalyzeExhaust analyzeOneFileWithJavaIntegrationAndCheckForErrors( diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java index 3f828f5ee42..e1b18b4cfb4 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java @@ -16,7 +16,6 @@ package org.jetbrains.jet.lang.resolve.lazy; -import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Sets; import com.intellij.openapi.project.Project; @@ -28,28 +27,17 @@ import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver; import org.jetbrains.jet.di.InjectorForTopDownAnalyzer; import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm; -import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; -import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetNamespaceHeader; import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; import org.jetbrains.jet.lang.resolve.AnalyzerScriptParameter; import org.jetbrains.jet.lang.resolve.BindingTrace; -import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; -import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; -import org.jetbrains.jet.lang.resolve.java.PsiClassFinder; -import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; -import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedLazyResolveStorageManager; -import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.WritableScope; -import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.Collections; import java.util.List; @@ -87,44 +75,14 @@ public class LazyResolveTestUtil { return module; } - public static KotlinCodeAnalyzer resolveLazilyWithSession(List files, JetCoreEnvironment environment, final boolean addBuiltIns) { + public static KotlinCodeAnalyzer resolveLazilyWithSession(List files, JetCoreEnvironment environment, boolean addBuiltIns) { JetTestUtils.newTrace(environment); Project project = environment.getProject(); - BindingTrace sharedTrace = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject()).getTrace(); + BindingTrace sharedTrace = CliLightClassGenerationSupport.getInstanceForCli(project).getTrace(); InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, sharedTrace); - final PsiClassFinder psiClassFinder = injector.getPsiClassFinder(); - final JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver(); - LockBasedLazyResolveStorageManager storageManager = new LockBasedLazyResolveStorageManager(); - FileBasedDeclarationProviderFactory declarationProviderFactory = new FileBasedDeclarationProviderFactory(storageManager, files, new Predicate() { - @Override - public boolean apply(FqName fqName) { - return psiClassFinder.findPsiPackage(fqName) != null || new FqName("jet").equals(fqName); - } - }); - - ModuleConfiguration moduleConfiguration = new ModuleConfiguration() { - @Override - public void extendNamespaceScope( - @NotNull NamespaceDescriptor namespaceDescriptor, - @NotNull WritableScope namespaceMemberScope - ) { - FqName fqName = DescriptorUtils.getFQName(namespaceDescriptor).toSafe(); - if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName) && addBuiltIns) { - namespaceMemberScope.importScope(KotlinBuiltIns.getInstance().getBuiltInsScope()); - } - if (psiClassFinder.findPsiPackage(fqName) != null) { - JetScope javaPackageScope = javaDescriptorResolver.getJavaPackageScope(namespaceDescriptor); - assert javaPackageScope != null; - namespaceMemberScope.importScope(javaPackageScope); - } - } - }; - - ModuleDescriptorImpl lazyModule = AnalyzerFacadeForJVM.createJavaModule(""); - lazyModule.setModuleConfiguration(moduleConfiguration); - return new ResolveSession(project, storageManager, lazyModule, declarationProviderFactory, sharedTrace); + return AnalyzerFacadeForJVM.createLazyResolveSession(project, files, sharedTrace, injector, addBuiltIns); } public static ModuleDescriptor resolveLazily(List files, JetCoreEnvironment environment) { diff --git a/compiler/tests/org/jetbrains/jet/resolve/JetExpectedResolveDataUtil.java b/compiler/tests/org/jetbrains/jet/resolve/JetExpectedResolveDataUtil.java index e98dffd9d2b..caa1ae8918c 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/JetExpectedResolveDataUtil.java +++ b/compiler/tests/org/jetbrains/jet/resolve/JetExpectedResolveDataUtil.java @@ -29,6 +29,8 @@ import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.context.ExpressionPosition; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.results.OverloadResolutionResults; +import org.jetbrains.jet.lang.resolve.java.structure.JavaClass; +import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaClassImpl; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; @@ -43,6 +45,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import static com.intellij.testFramework.UsefulTestCase.assertInstanceOf; import static org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils.resolveFakeCall; public class JetExpectedResolveDataUtil { @@ -114,9 +117,10 @@ public class JetExpectedResolveDataUtil { @NotNull private static PsiClass findClass(String qualifiedName, Project project) { InjectorForJavaDescriptorResolver injector = new InjectorForJavaDescriptorResolver(project, new BindingTraceContext()); - PsiClass psiClass = injector.getPsiClassFinder().findPsiClass(new FqName(qualifiedName)); - Assert.assertNotNull("Class wasn't found: " + qualifiedName, psiClass); - return psiClass; + JavaClass javaClass = injector.getJavaClassFinder().findClass(new FqName(qualifiedName)); + Assert.assertNotNull("Class wasn't found: " + qualifiedName, javaClass); + assertInstanceOf(javaClass, JavaClassImpl.class); + return ((JavaClassImpl) javaClass).getPsi(); } @NotNull diff --git a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java index 96e45c62cc2..faecb684687 100644 --- a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java +++ b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java @@ -32,8 +32,8 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.psi.JetImportsFactory; import org.jetbrains.jet.lang.resolve.*; -import org.jetbrains.jet.lang.resolve.calls.CompositeExtension; import org.jetbrains.jet.lang.resolve.calls.CallResolver; +import org.jetbrains.jet.lang.resolve.calls.CompositeExtension; import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration; import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; @@ -149,14 +149,14 @@ public class GenerateInjectors { generator.addParameter(BindingTrace.class); // Fields - generator.addField(JavaClassFinderImpl.class); + generator.addPublicField(JavaClassFinderImpl.class); generator.addField(TraceBasedExternalSignatureResolver.class); generator.addField(TraceBasedJavaResolverCache.class); generator.addField(TraceBasedErrorReporter.class); generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedExternalAnnotationResolver.class); generator.addPublicField(JavaDescriptorResolver.class); - generator.addPublicField(PsiClassFinderImpl.class); + generator.addField(PsiClassFinderImpl.class); generator.addField(VirtualFileKotlinClassFinder.class); generator.addField(false, VirtualFileFinder.class, "virtualFileFinder", new GivenExpression("com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class)"));