Skip to content

Commit

Permalink
Make ModuleMapCreator a compiler pass to create and store a ModuleMap…
Browse files Browse the repository at this point in the history
… on the compiler.

This required working through a circular reference which was solved by moving ModuleMetadataMap into the modules package. Ideally other things should move there in the future too, probably.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=230007643
  • Loading branch information
johnplaisted authored and lauraharker committed Jan 22, 2019
1 parent f0631a7 commit 278b96b
Show file tree
Hide file tree
Showing 20 changed files with 65 additions and 32 deletions.
6 changes: 6 additions & 0 deletions src/com/google/javascript/jscomp/AbstractCompiler.java
Expand Up @@ -23,6 +23,8 @@
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.javascript.jscomp.deps.ModuleLoader;
import com.google.javascript.jscomp.modules.ModuleMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.parsing.Config;
import com.google.javascript.jscomp.parsing.parser.FeatureSet;
import com.google.javascript.jscomp.parsing.parser.trees.Comment;
Expand Down Expand Up @@ -687,4 +689,8 @@ public AstFactory createAstFactory() {
public abstract ModuleMetadataMap getModuleMetadataMap();

public abstract void setModuleMetadataMap(ModuleMetadataMap moduleMetadataMap);

public abstract ModuleMap getModuleMap();

public abstract void setModuleMap(ModuleMap moduleMap);
}
5 changes: 3 additions & 2 deletions src/com/google/javascript/jscomp/CheckClosureImports.java
Expand Up @@ -29,10 +29,11 @@
import static com.google.javascript.jscomp.ClosureRewriteModule.INVALID_GET_ALIAS;

import com.google.common.collect.ImmutableSet;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleType;
import com.google.javascript.jscomp.NodeTraversal.AbstractModuleCallback;
import com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleType;
import com.google.javascript.rhino.IR;
import com.google.javascript.rhino.Node;
import java.util.HashSet;
Expand Down
3 changes: 2 additions & 1 deletion src/com/google/javascript/jscomp/ClosureCheckModule.java
Expand Up @@ -24,8 +24,9 @@
import static com.google.javascript.jscomp.ClosurePrimitiveErrors.MODULE_USES_GOOG_MODULE_GET;

import com.google.common.collect.Iterables;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.NodeTraversal.AbstractModuleCallback;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.rhino.JSDocInfo;
import com.google.javascript.rhino.Node;
import com.google.javascript.rhino.Token;
Expand Down
14 changes: 14 additions & 0 deletions src/com/google/javascript/jscomp/Compiler.java
Expand Up @@ -44,6 +44,8 @@
import com.google.javascript.jscomp.deps.NodeModuleResolver;
import com.google.javascript.jscomp.deps.SortedDependencies.MissingProvideException;
import com.google.javascript.jscomp.deps.WebpackModuleResolver;
import com.google.javascript.jscomp.modules.ModuleMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.parsing.Config;
import com.google.javascript.jscomp.parsing.ParserRunner;
import com.google.javascript.jscomp.parsing.parser.FeatureSet;
Expand Down Expand Up @@ -3613,6 +3615,18 @@ public void setModuleMetadataMap(ModuleMetadataMap moduleMetadataMap) {
this.moduleMetadataMap = moduleMetadataMap;
}

private ModuleMap moduleMap;

@Override
public ModuleMap getModuleMap() {
return moduleMap;
}

@Override
public void setModuleMap(ModuleMap moduleMap) {
this.moduleMap = moduleMap;
}

/**
* Simplistic implementation of the java.nio.file.Path resolveSibling method that works with GWT.
*
Expand Down
3 changes: 2 additions & 1 deletion src/com/google/javascript/jscomp/Es6RewriteModules.java
Expand Up @@ -36,9 +36,10 @@
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Table;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.NodeTraversal.AbstractPostOrderCallback;
import com.google.javascript.jscomp.deps.ModuleLoader;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.parsing.parser.FeatureSet.Feature;
import com.google.javascript.rhino.IR;
import com.google.javascript.rhino.JSDocInfo;
Expand Down
5 changes: 3 additions & 2 deletions src/com/google/javascript/jscomp/GatherModuleMetadata.java
Expand Up @@ -22,11 +22,12 @@
import static com.google.javascript.jscomp.ClosurePrimitiveErrors.INVALID_REQUIRE_NAMESPACE;

import com.google.common.collect.LinkedHashMultiset;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleType;
import com.google.javascript.jscomp.NodeTraversal.Callback;
import com.google.javascript.jscomp.deps.ModuleLoader.ModulePath;
import com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleType;
import com.google.javascript.rhino.IR;
import com.google.javascript.rhino.Node;
import java.util.HashMap;
Expand Down
2 changes: 1 addition & 1 deletion src/com/google/javascript/jscomp/ModuleRenaming.java
Expand Up @@ -18,9 +18,9 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;

import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.modules.Binding;
import com.google.javascript.jscomp.modules.Export;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import javax.annotation.Nullable;

/** Centralized location for determining how to rename modules. */
Expand Down
3 changes: 2 additions & 1 deletion src/com/google/javascript/jscomp/NodeTraversal.java
Expand Up @@ -21,7 +21,8 @@
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Strings.nullToEmpty;

import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.rhino.InputId;
import com.google.javascript.rhino.Node;
import com.google.javascript.rhino.Token;
Expand Down
5 changes: 3 additions & 2 deletions src/com/google/javascript/jscomp/RewriteClosureImports.java
Expand Up @@ -23,9 +23,10 @@
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Table;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleType;
import com.google.javascript.jscomp.NodeTraversal.AbstractModuleCallback;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleType;
import com.google.javascript.rhino.IR;
import com.google.javascript.rhino.JSDocInfo;
import com.google.javascript.rhino.Node;
Expand Down
Expand Up @@ -31,12 +31,12 @@
import com.google.javascript.jscomp.CompilerOptions;
import com.google.javascript.jscomp.GatherModuleMetadata;
import com.google.javascript.jscomp.JSError;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.SourceFile;
import com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode;
import com.google.javascript.jscomp.gwt.client.Util.JsArray;
import com.google.javascript.jscomp.gwt.client.Util.JsObject;
import com.google.javascript.jscomp.gwt.client.Util.JsRegExp;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.parsing.Config;
import com.google.javascript.jscomp.parsing.ParserRunner;
import com.google.javascript.jscomp.parsing.parser.trees.Comment;
Expand Down
2 changes: 1 addition & 1 deletion src/com/google/javascript/jscomp/modules/Binding.java
Expand Up @@ -20,7 +20,7 @@
import static com.google.common.base.Preconditions.checkState;

import com.google.auto.value.AutoValue;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.rhino.Node;
import javax.annotation.Nullable;

Expand Down
Expand Up @@ -27,7 +27,6 @@
import com.google.javascript.jscomp.DiagnosticType;
import com.google.javascript.jscomp.Es6ToEs3Util;
import com.google.javascript.jscomp.JSError;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.NodeTraversal;
import com.google.javascript.jscomp.NodeTraversal.AbstractPostOrderCallback;
import com.google.javascript.jscomp.NodeTraversal.Callback;
Expand All @@ -41,6 +40,7 @@
import com.google.javascript.jscomp.modules.ModuleMapCreator.ModuleRequestResolver;
import com.google.javascript.jscomp.modules.ModuleMapCreator.ResolveExportResult;
import com.google.javascript.jscomp.modules.ModuleMapCreator.UnresolvedModule;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.rhino.Node;
import com.google.javascript.rhino.Token;
import java.util.ArrayList;
Expand Down
2 changes: 1 addition & 1 deletion src/com/google/javascript/jscomp/modules/Export.java
Expand Up @@ -20,9 +20,9 @@
import static com.google.common.base.Preconditions.checkState;

import com.google.auto.value.AutoValue;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.deps.ModuleLoader;
import com.google.javascript.jscomp.deps.ModuleLoader.ModulePath;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.rhino.Node;
import javax.annotation.Nullable;

Expand Down
2 changes: 1 addition & 1 deletion src/com/google/javascript/jscomp/modules/Module.java
Expand Up @@ -18,8 +18,8 @@

import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableMap;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.deps.ModuleLoader;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import javax.annotation.Nullable;

/**
Expand Down
13 changes: 9 additions & 4 deletions src/com/google/javascript/jscomp/modules/ModuleMapCreator.java
Expand Up @@ -22,12 +22,12 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.javascript.jscomp.AbstractCompiler;
import com.google.javascript.jscomp.CompilerPass;
import com.google.javascript.jscomp.DiagnosticType;
import com.google.javascript.jscomp.JSError;
import com.google.javascript.jscomp.ModuleMetadataMap;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.deps.ModuleLoader;
import com.google.javascript.jscomp.deps.ModuleLoader.ModulePath;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.rhino.Node;
import java.util.HashMap;
import java.util.HashSet;
Expand All @@ -36,7 +36,7 @@
import javax.annotation.Nullable;

/** Creates a {@link ModuleMap}. */
public class ModuleMapCreator {
public class ModuleMapCreator implements CompilerPass {
static final DiagnosticType MISSING_NAMESPACE_IMPORT =
DiagnosticType.error(
"JSC_MISSING_NAMESPACE_IMPORT", "Imported Closure namespace \"{0}\" never defined.");
Expand Down Expand Up @@ -310,7 +310,7 @@ public ModuleMapCreator(AbstractCompiler compiler, ModuleMetadataMap moduleMetad
unresolvedModulesByClosureNamespace = new HashMap<>();
}

public ModuleMap create() {
private ModuleMap create() {
ModuleRequestResolver requestResolver = new ModuleRequestResolver();
Map<String, Module> resolvedModules = new HashMap<>();
Map<String, Module> resolvedClosureModules = new HashMap<>();
Expand Down Expand Up @@ -359,4 +359,9 @@ public ModuleMap create() {
return new ModuleMap(
ImmutableMap.copyOf(resolvedModules), ImmutableMap.copyOf(resolvedClosureModules));
}

@Override
public void process(Node externs, Node root) {
compiler.setModuleMap(create());
}
}
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.google.javascript.jscomp;
package com.google.javascript.jscomp.modules;

import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
Expand Down Expand Up @@ -168,7 +168,7 @@ public boolean isScript() {
/** Raw text of all ES6 import specifiers (includes "export from" as well). */
public abstract ImmutableMultiset<String> es6ImportSpecifiers();

abstract ImmutableList<ModuleMetadata> nestedModules();
public abstract ImmutableList<ModuleMetadata> nestedModules();

@Nullable
public abstract ModulePath path();
Expand All @@ -184,12 +184,12 @@ public abstract static class Builder {

public abstract ImmutableMultiset.Builder<String> googNamespacesBuilder();

Builder addGoogNamespace(String namespace) {
public Builder addGoogNamespace(String namespace) {
googNamespacesBuilder().add(namespace);
return this;
}

abstract ImmutableMultiset.Builder<String> requiredGoogNamespacesBuilder();
public abstract ImmutableMultiset.Builder<String> requiredGoogNamespacesBuilder();

public abstract ImmutableMultiset.Builder<String> requiredTypesBuilder();

Expand All @@ -214,8 +214,8 @@ Builder addGoogNamespace(String namespace) {
/**
* @return map from module path to module. These modules represent files and thus {@link
* ModuleMetadata#googNamespaces()} contains all Closure namespaces in the file. These are not
* the same modules from {@link ModuleMetadataMap#getModulesByGoogNamespace()}. It is not
* valid to call {@link ModuleRenaming#getGlobalName(ModuleMetadata, String)} on {@link
* the same modules from ModuleMetadataMap#getModulesByGoogNamespace(). It is not valid to
* call ModuleRenaming#getGlobalName(ModuleMetadata, String) on {@link
* ModuleType#GOOG_PROVIDE} modules from this map that have more than one Closure namespace as
* it is ambiguous.
*/
Expand All @@ -226,8 +226,8 @@ public ImmutableMap<String, ModuleMetadata> getModulesByPath() {
/**
* @return map from Closure namespace to module. These modules represent the Closure namespace and
* thus {@link ModuleMetadata#googNamespaces()} will have size 1. As a result, it is valid to
* call {@link ModuleRenaming#getGlobalName(ModuleMetadata, String)} on these modules. These
* are not the same modules from {@link ModuleMetadataMap#getModulesByPath()}.
* call ModuleRenaming#getGlobalName(ModuleMetadata, String) on these modules. These are not
* the same modules from {@link ModuleMetadataMap#getModulesByPath()}.
*/
public ImmutableMap<String, ModuleMetadata> getModulesByGoogNamespace() {
return modulesByGoogNamespace;
Expand Down
Expand Up @@ -17,13 +17,13 @@

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.deps.ModuleLoader.ModulePath;
import com.google.javascript.jscomp.modules.ModuleMapCreator.ExportTrace;
import com.google.javascript.jscomp.modules.ModuleMapCreator.ModuleProcessor;
import com.google.javascript.jscomp.modules.ModuleMapCreator.ModuleRequestResolver;
import com.google.javascript.jscomp.modules.ModuleMapCreator.ResolveExportResult;
import com.google.javascript.jscomp.modules.ModuleMapCreator.UnresolvedModule;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.rhino.Node;
import java.util.Set;
import javax.annotation.Nullable;
Expand Down
Expand Up @@ -33,8 +33,9 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.javascript.jscomp.CompilerOptions.LanguageMode;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleType;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleType;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand Down
Expand Up @@ -19,8 +19,9 @@
import static com.google.common.truth.Truth.assertThat;

import com.google.common.collect.ImmutableList;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleMetadata;
import com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode;
import com.google.javascript.jscomp.modules.ModuleMetadataMap;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
Expand Down
Expand Up @@ -18,7 +18,7 @@

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.javascript.jscomp.ModuleMetadataMap.ModuleType;
import com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleType;
import java.io.IOException;
import java.util.Arrays;
import org.junit.Before;
Expand Down

0 comments on commit 278b96b

Please sign in to comment.