Centralize and cache creating import directives

This commit is contained in:
Nikolay Krasko
2013-01-30 21:03:08 +04:00
parent 8b60b07cc5
commit 83bc8d4f21
20 changed files with 172 additions and 108 deletions
@@ -93,7 +93,6 @@ public class InjectorForJavaDescriptorResolver {
this.javaPropertyResolver = new JavaPropertyResolver();
javaBridgeConfiguration.setJavaSemanticServices(javaSemanticServices);
javaBridgeConfiguration.setProject(project);
this.javaSemanticServices.setDescriptorResolver(javaDescriptorResolver);
this.javaSemanticServices.setPsiClassFinder(psiClassFinder);
@@ -104,7 +104,6 @@ public class InjectorForJavaSemanticServices {
this.javaDescriptorResolver.setPropertiesResolver(javaPropertyResolver);
javaBridgeConfiguration.setJavaSemanticServices(javaSemanticServices);
javaBridgeConfiguration.setProject(project);
this.psiClassFinder.setProject(project);
@@ -40,6 +40,7 @@ import org.jetbrains.jet.lang.resolve.TypeResolver;
import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
import org.jetbrains.jet.lang.resolve.ImportsResolver;
import org.jetbrains.jet.lang.psi.JetPsiBuilder;
import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
import org.jetbrains.jet.lang.resolve.OverloadResolver;
import org.jetbrains.jet.lang.resolve.OverrideResolver;
@@ -89,6 +90,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private QualifiedExpressionResolver qualifiedExpressionResolver;
private CandidateResolver candidateResolver;
private ImportsResolver importsResolver;
private JetPsiBuilder jetPsiBuilder;
private ScriptHeaderResolver scriptHeaderResolver;
private OverloadResolver overloadResolver;
private OverrideResolver overrideResolver;
@@ -139,6 +141,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
this.candidateResolver = new CandidateResolver();
this.importsResolver = new ImportsResolver();
this.jetPsiBuilder = new JetPsiBuilder();
this.scriptHeaderResolver = new ScriptHeaderResolver();
this.overloadResolver = new OverloadResolver();
this.overrideResolver = new OverrideResolver();
@@ -193,7 +196,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.descriptorResolver.setTypeResolver(typeResolver);
this.moduleConfiguration.setJavaSemanticServices(javaSemanticServices);
this.moduleConfiguration.setProject(project);
javaDescriptorResolver.setClassResolver(javaClassResolver);
javaDescriptorResolver.setConstructorResolver(javaConstructorResolver);
@@ -240,9 +242,12 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
importsResolver.setConfiguration(moduleConfiguration);
importsResolver.setContext(topDownAnalysisContext);
importsResolver.setPsiBuilder(jetPsiBuilder);
importsResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
importsResolver.setTrace(bindingTrace);
jetPsiBuilder.setProject(project);
scriptHeaderResolver.setContext(topDownAnalysisContext);
scriptHeaderResolver.setDependencyClassByQualifiedNameResolver(javaDescriptorResolver);
scriptHeaderResolver.setNamespaceFactory(namespaceFactory);
@@ -19,6 +19,7 @@ package org.jetbrains.jet.lang.resolve.java;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
@@ -33,8 +34,6 @@ import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetImportDirective;
import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.lazy.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.lazy.LockBasedStorageManager;
@@ -45,9 +44,9 @@ 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.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
@@ -103,13 +102,10 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
ModuleConfiguration moduleConfiguration = new ModuleConfiguration() {
@Override
public void addDefaultImports(@NotNull Collection<JetImportDirective> directives) {
final Collection<ImportPath> defaultImports = Lists.newArrayList(JavaBridgeConfiguration.DEFAULT_JAVA_IMPORTS);
defaultImports.addAll(Arrays.asList(DefaultModuleConfiguration.DEFAULT_JET_IMPORTS));
for (ImportPath defaultJetImport : defaultImports) {
directives.add(JetPsiFactory.createImportDirective(fileProject, defaultJetImport));
}
public List<ImportPath> getDefaultImports() {
LinkedHashSet<ImportPath> imports = Sets.newLinkedHashSet(JavaBridgeConfiguration.DEFAULT_JAVA_IMPORTS);
imports.addAll(DefaultModuleConfiguration.DEFAULT_JET_IMPORTS);
return Lists.newArrayList(imports);
}
@Override
@@ -16,14 +16,14 @@
package org.jetbrains.jet.lang.resolve.java;
import com.intellij.openapi.project.Project;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.DefaultModuleConfiguration;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.psi.JetImportDirective;
import org.jetbrains.jet.lang.psi.JetPsiFactory;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.ImportPath;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
@@ -31,22 +31,16 @@ import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import java.util.Collection;
import java.util.List;
import java.util.Set;
public class JavaBridgeConfiguration implements ModuleConfiguration {
public static final ImportPath[] DEFAULT_JAVA_IMPORTS = new ImportPath[] { new ImportPath("java.lang.*") };
public static final List<ImportPath> DEFAULT_JAVA_IMPORTS = ImmutableList.of(new ImportPath("java.lang.*"));
private Project project;
private JavaSemanticServices javaSemanticServices;
private ModuleConfiguration delegateConfiguration;
@Inject
public void setProject(@NotNull Project project) {
this.project = project;
}
@Inject
public void setJavaSemanticServices(@NotNull JavaSemanticServices javaSemanticServices) {
this.javaSemanticServices = javaSemanticServices;
@@ -54,17 +48,15 @@ public class JavaBridgeConfiguration implements ModuleConfiguration {
@PostConstruct
public void init() {
this.delegateConfiguration = DefaultModuleConfiguration.createStandardConfiguration(project);
this.delegateConfiguration = DefaultModuleConfiguration.createStandardConfiguration();
}
@Override
public void addDefaultImports(@NotNull Collection<JetImportDirective> directives) {
for (ImportPath importPath : DEFAULT_JAVA_IMPORTS) {
directives.add(JetPsiFactory.createImportDirective(project, importPath));
}
delegateConfiguration.addDefaultImports(directives);
public List<ImportPath> getDefaultImports() {
Set<ImportPath> imports = Sets.newLinkedHashSet(DEFAULT_JAVA_IMPORTS);
imports.addAll(delegateConfiguration.getDefaultImports());
return Lists.newArrayList(imports);
}
@Override