Interface of 'addDefaultImports' in StandardConfiguration simplified
This commit is contained in:
+9
-9
@@ -22,12 +22,13 @@ import org.jetbrains.jet.lang.Configuration;
|
||||
import org.jetbrains.jet.lang.JetSemanticServices;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
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.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.Importer;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
import org.jetbrains.jet.util.QualifiedNamesUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
@@ -35,30 +36,29 @@ import java.util.Collections;
|
||||
*/
|
||||
public class JavaBridgeConfiguration implements Configuration {
|
||||
|
||||
public static final String[] DEFAULT_JAVA_IMPORTS = new String[] { "java.lang" };
|
||||
public static final String[] DEFAULT_JAVA_IMPORTS = new String[] { "java.lang.*" };
|
||||
|
||||
public static Configuration createJavaBridgeConfiguration(@NotNull Project project, @NotNull BindingTrace trace, Configuration delegateConfiguration) {
|
||||
return new JavaBridgeConfiguration(project, trace, delegateConfiguration);
|
||||
}
|
||||
|
||||
private final Project project;
|
||||
private final JavaSemanticServices javaSemanticServices;
|
||||
private final Configuration delegateConfiguration;
|
||||
|
||||
private JavaBridgeConfiguration(Project project, BindingTrace trace, Configuration delegateConfiguration) {
|
||||
this.project = project;
|
||||
this.javaSemanticServices = new JavaSemanticServices(project, JetSemanticServices.createSemanticServices(project), trace);
|
||||
this.delegateConfiguration = delegateConfiguration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDefaultImports(@NotNull BindingTrace trace, @NotNull WritableScope rootScope, @NotNull Importer importer) {
|
||||
public void addDefaultImports(@NotNull WritableScope rootScope, @NotNull Collection<JetImportDirective> directives) {
|
||||
rootScope.importScope(new JavaPackageScope("", createNamespaceDescriptor(JavaDescriptorResolver.JAVA_ROOT, ""), javaSemanticServices));
|
||||
for (String importFQN : DEFAULT_JAVA_IMPORTS) {
|
||||
NamespaceDescriptor namespaceDescriptor = javaSemanticServices.getDescriptorResolver().resolveNamespace(importFQN);
|
||||
if (namespaceDescriptor != null) {
|
||||
importer.addScopeImport(namespaceDescriptor.getMemberScope());
|
||||
}
|
||||
directives.add(JetPsiFactory.createImportDirective(project, importFQN));
|
||||
}
|
||||
delegateConfiguration.addDefaultImports(trace, rootScope, importer);
|
||||
delegateConfiguration.addDefaultImports(rootScope, directives);
|
||||
}
|
||||
|
||||
public static JavaNamespaceDescriptor createNamespaceDescriptor(String name, String qualifiedName) {
|
||||
|
||||
@@ -18,17 +18,19 @@ package org.jetbrains.jet.lang;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.JetImportDirective;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.Importer;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
public interface Configuration {
|
||||
Configuration EMPTY = new Configuration() {
|
||||
@Override
|
||||
public void addDefaultImports(@NotNull BindingTrace trace, @NotNull WritableScope rootScope, @NotNull Importer importer) {
|
||||
public void addDefaultImports(@NotNull WritableScope rootScope, @NotNull Collection<JetImportDirective> directives) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -36,7 +38,7 @@ public interface Configuration {
|
||||
}
|
||||
};
|
||||
|
||||
void addDefaultImports(@NotNull BindingTrace trace, @NotNull WritableScope rootScope, @NotNull Importer importer);
|
||||
void addDefaultImports(@NotNull WritableScope rootScope, @NotNull Collection<JetImportDirective> directives);
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
@@ -19,12 +19,13 @@ package org.jetbrains.jet.lang;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
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.Importer;
|
||||
import org.jetbrains.jet.lang.resolve.ImportsResolver;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author svtk
|
||||
*/
|
||||
@@ -42,10 +43,9 @@ public class StandardConfiguration implements Configuration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDefaultImports(@NotNull BindingTrace trace, @NotNull WritableScope rootScope, @NotNull Importer importer) {
|
||||
ImportsResolver.ImportResolver importResolver = new ImportsResolver.ImportResolver(trace, true);
|
||||
public void addDefaultImports(@NotNull WritableScope rootScope, @NotNull Collection<JetImportDirective> directives) {
|
||||
for (String defaultJetImport : DEFAULT_JET_IMPORTS) {
|
||||
importResolver.processImportReference(JetPsiFactory.createImportDirective(project, defaultJetImport), rootScope, importer);
|
||||
directives.add(JetPsiFactory.createImportDirective(project, defaultJetImport));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.google.common.collect.Lists;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
|
||||
@@ -30,13 +29,21 @@ import java.util.List;
|
||||
/**
|
||||
* @author svtk
|
||||
*/
|
||||
public interface Importer {
|
||||
/*package*/ interface Importer {
|
||||
|
||||
void addAllUnderImport(@NotNull DeclarationDescriptor descriptor);
|
||||
|
||||
void addAliasImport(@NotNull DeclarationDescriptor descriptor, @NotNull String aliasName);
|
||||
|
||||
void addScopeImport(@NotNull JetScope scope);
|
||||
Importer DO_NOTHING = new Importer() {
|
||||
@Override
|
||||
public void addAllUnderImport(@NotNull DeclarationDescriptor descriptor) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAliasImport(@NotNull DeclarationDescriptor descriptor, @NotNull String aliasName) {
|
||||
}
|
||||
};
|
||||
|
||||
class StandardImporter implements Importer {
|
||||
private final WritableScope namespaceScope;
|
||||
@@ -57,15 +64,6 @@ public interface Importer {
|
||||
importDeclarationAlias(descriptor, aliasName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addScopeImport(@NotNull JetScope scope) {
|
||||
importScope(scope);
|
||||
}
|
||||
|
||||
protected void importScope(@NotNull JetScope scope) {
|
||||
namespaceScope.importScope(scope);
|
||||
}
|
||||
|
||||
protected void importAllUnderDeclaration(@NotNull DeclarationDescriptor descriptor) {
|
||||
if (descriptor instanceof NamespaceDescriptor) {
|
||||
namespaceScope.importScope(((NamespaceDescriptor) descriptor).getMemberScope());
|
||||
@@ -112,7 +110,6 @@ public interface Importer {
|
||||
}
|
||||
|
||||
class DelayedImporter extends StandardImporter {
|
||||
private final List<JetScope> scopesToImport = Lists.newArrayList();
|
||||
private final List<Pair<DeclarationDescriptor, String>> imports = Lists.newArrayList();
|
||||
|
||||
public DelayedImporter(@NotNull WritableScope namespaceScope, boolean firstPhase) {
|
||||
@@ -129,15 +126,7 @@ public interface Importer {
|
||||
imports.add(Pair.create(descriptor, aliasName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addScopeImport(@NotNull JetScope scope) {
|
||||
scopesToImport.add(scope);
|
||||
}
|
||||
|
||||
public void processImports() {
|
||||
for (JetScope scope : scopesToImport) {
|
||||
importScope(scope);
|
||||
}
|
||||
for (Pair<DeclarationDescriptor, String> anImport : imports) {
|
||||
DeclarationDescriptor descriptor = anImport.getFirst();
|
||||
String aliasName = anImport.getSecond();
|
||||
@@ -151,5 +140,4 @@ public interface Importer {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,8 +24,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.*;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -55,15 +54,20 @@ public class ImportsResolver {
|
||||
}
|
||||
|
||||
private void processImports(boolean firstPhase) {
|
||||
ImportResolver importResolver = new ImportResolver(context.getTrace(), firstPhase);
|
||||
SingleImportResolver importResolver = new SingleImportResolver(context.getTrace(), firstPhase);
|
||||
SingleImportResolver defaultImportResolver = new SingleImportResolver(TemporaryBindingTrace.create(context.getTrace()), firstPhase);//not to trace errors of default imports
|
||||
for (JetFile file : context.getNamespaceDescriptors().keySet()) {
|
||||
WritableScope namespaceScope = context.getNamespaceScopes().get(file);
|
||||
Importer.DelayedImporter delayedImporter = new Importer.DelayedImporter(namespaceScope, firstPhase);
|
||||
if (!firstPhase) {
|
||||
namespaceScope.clearImports();
|
||||
}
|
||||
context.getConfiguration().addDefaultImports(context.getTrace(), namespaceScope, delayedImporter);
|
||||
Map<JetImportDirective, DeclarationDescriptor> resolvedDirectives = Maps.newHashMap();
|
||||
Collection<JetImportDirective> defaultImportDirectives = Lists.newArrayList();
|
||||
context.getConfiguration().addDefaultImports(namespaceScope, defaultImportDirectives);
|
||||
for (JetImportDirective defaultImportDirective : defaultImportDirectives) {
|
||||
defaultImportResolver.processImportReference(defaultImportDirective, namespaceScope, delayedImporter);
|
||||
}
|
||||
|
||||
List<JetImportDirective> importDirectives = file.getImportDirectives();
|
||||
for (JetImportDirective importDirective : importDirectives) {
|
||||
@@ -133,13 +137,18 @@ public class ImportsResolver {
|
||||
}
|
||||
}
|
||||
|
||||
public static class ImportResolver {
|
||||
public static Collection<? extends DeclarationDescriptor> analyseImportReference(@NotNull JetImportDirective importDirective, @NotNull JetScope scope, @NotNull BindingTrace trace) {
|
||||
ImportsResolver.SingleImportResolver importResolver = new ImportsResolver.SingleImportResolver(trace, false);
|
||||
return importResolver.processImportReference(importDirective, scope, Importer.DO_NOTHING);
|
||||
}
|
||||
|
||||
private static class SingleImportResolver {
|
||||
private final BindingTrace trace;
|
||||
/* On first phase all classes and objects are imported,
|
||||
on second phase previous imports are thrown and everything (including functions and properties at namespace level) is imported */
|
||||
private final boolean firstPhase;
|
||||
|
||||
public ImportResolver(BindingTrace trace, boolean firstPhase) {
|
||||
public SingleImportResolver(BindingTrace trace, boolean firstPhase) {
|
||||
this.trace = trace;
|
||||
this.firstPhase = firstPhase;
|
||||
}
|
||||
|
||||
+1
-7
@@ -182,15 +182,9 @@ public class ExpressionTypingUtils {
|
||||
@NotNull JetType receiverType,
|
||||
@NotNull JetScope scope) {
|
||||
|
||||
WritableScopeWithImports writableScopeWithImports = new WritableScopeImpl(
|
||||
scope, scope.getContainingDeclaration(), RedeclarationHandler.DO_NOTHING);
|
||||
|
||||
JetImportDirective importDirective = JetPsiFactory.createImportDirective(project, callableFQN);
|
||||
|
||||
ImportsResolver.ImportResolver importResolver = new ImportsResolver.ImportResolver(new BindingTraceContext(), false);
|
||||
Collection<? extends DeclarationDescriptor> declarationDescriptors = importResolver.processImportReference(
|
||||
importDirective, scope,
|
||||
new Importer.StandardImporter(writableScopeWithImports, false));
|
||||
Collection<? extends DeclarationDescriptor> declarationDescriptors = ImportsResolver.analyseImportReference(importDirective, scope, new BindingTraceContext());
|
||||
|
||||
List<CallableDescriptor> callableExtensionDescriptors = new ArrayList<CallableDescriptor>();
|
||||
ReceiverDescriptor receiverDescriptor = new ExpressionReceiver(receiverExpression, receiverType);
|
||||
|
||||
@@ -27,12 +27,14 @@ import org.jetbrains.jet.lang.JetSemanticServices;
|
||||
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
||||
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.scopes.WritableScope;
|
||||
import org.jetbrains.k2js.config.Config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -118,10 +120,9 @@ public final class AnalyzerFacadeForJS {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDefaultImports(@NotNull BindingTrace trace, @NotNull WritableScope rootScope,
|
||||
@NotNull Importer importer) {
|
||||
ImportsResolver.ImportResolver importResolver = new ImportsResolver.ImportResolver(trace, true);
|
||||
importResolver.processImportReference(JetPsiFactory.createImportDirective(project, "js.*"), rootScope, importer);
|
||||
public void addDefaultImports(@NotNull WritableScope rootScope,
|
||||
@NotNull Collection<JetImportDirective> directives) {
|
||||
directives.add(JetPsiFactory.createImportDirective(project, "js.*"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user