From d5da6e8c235d9579b4d869ace05733bf6d0152e0 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Tue, 6 Mar 2012 16:02:24 +0400 Subject: [PATCH] Interface of 'addDefaultImports' in StandardConfiguration simplified --- .../resolve/java/JavaBridgeConfiguration.java | 18 +++++------ .../org/jetbrains/jet/lang/Configuration.java | 8 +++-- .../jet/lang/StandardConfiguration.java | 10 +++--- .../jetbrains/jet/lang/resolve/Importer.java | 32 ++++++------------- .../jet/lang/resolve/ImportsResolver.java | 21 ++++++++---- .../expressions/ExpressionTypingUtils.java | 8 +---- .../k2js/analyze/AnalyzerFacadeForJS.java | 9 +++--- 7 files changed, 50 insertions(+), 56 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaBridgeConfiguration.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaBridgeConfiguration.java index 4be615ddda5..195f47a7bf9 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaBridgeConfiguration.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaBridgeConfiguration.java @@ -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 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) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/Configuration.java b/compiler/frontend/src/org/jetbrains/jet/lang/Configuration.java index e2922844feb..e4a6af7b985 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/Configuration.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/Configuration.java @@ -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 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 directives); /** * diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/StandardConfiguration.java b/compiler/frontend/src/org/jetbrains/jet/lang/StandardConfiguration.java index cc5b0ab145d..71e365a26f7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/StandardConfiguration.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/StandardConfiguration.java @@ -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 directives) { for (String defaultJetImport : DEFAULT_JET_IMPORTS) { - importResolver.processImportReference(JetPsiFactory.createImportDirective(project, defaultJetImport), rootScope, importer); + directives.add(JetPsiFactory.createImportDirective(project, defaultJetImport)); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java index 3e2eb83c7b1..4737c57b149 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java @@ -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 scopesToImport = Lists.newArrayList(); private final List> 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 anImport : imports) { DeclarationDescriptor descriptor = anImport.getFirst(); String aliasName = anImport.getSecond(); @@ -151,5 +140,4 @@ public interface Importer { } } } - } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java index 3916d795dd1..3ec7aa7d2ce 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java @@ -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 resolvedDirectives = Maps.newHashMap(); + Collection defaultImportDirectives = Lists.newArrayList(); + context.getConfiguration().addDefaultImports(namespaceScope, defaultImportDirectives); + for (JetImportDirective defaultImportDirective : defaultImportDirectives) { + defaultImportResolver.processImportReference(defaultImportDirective, namespaceScope, delayedImporter); + } List importDirectives = file.getImportDirectives(); for (JetImportDirective importDirective : importDirectives) { @@ -133,13 +137,18 @@ public class ImportsResolver { } } - public static class ImportResolver { + public static Collection 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; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java index 8d854b63269..0ac6a584225 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java @@ -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 declarationDescriptors = importResolver.processImportReference( - importDirective, scope, - new Importer.StandardImporter(writableScopeWithImports, false)); + Collection declarationDescriptors = ImportsResolver.analyseImportReference(importDirective, scope, new BindingTraceContext()); List callableExtensionDescriptors = new ArrayList(); ReceiverDescriptor receiverDescriptor = new ExpressionReceiver(receiverExpression, receiverType); diff --git a/js/js.translator/src/org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java b/js/js.translator/src/org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java index 076a3e531b2..a798d0bc595 100644 --- a/js/js.translator/src/org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java +++ b/js/js.translator/src/org/jetbrains/k2js/analyze/AnalyzerFacadeForJS.java @@ -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 directives) { + directives.add(JetPsiFactory.createImportDirective(project, "js.*")); } @Override