Skip to content

Commit 5a80c25

Browse files
Closure Teamcopybara-github
authored andcommitted
No public description
PiperOrigin-RevId: 568880032
1 parent 929ba03 commit 5a80c25

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

src/com/google/javascript/jscomp/GatherModuleMetadata.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ public final class GatherModuleMetadata implements CompilerPass {
7575
DiagnosticType.error(
7676
"JSC_INVALID_REQUIRE_DYNAMIC", "Argument to goog.requireDynamic must be a string.");
7777

78+
static final DiagnosticType INVALID_MAYBE_REQUIRE =
79+
DiagnosticType.error(
80+
"JSC_INVALID_MAYBE_REQUIRE",
81+
"Argument to goog.maybeRequireFrameworkInternalOnlyDoNotCallOrElse must be a string.");
82+
7883
static final DiagnosticType INVALID_SET_TEST_ONLY =
7984
DiagnosticType.error(
8085
"JSC_INVALID_SET_TEST_ONLY",
@@ -90,6 +95,8 @@ public final class GatherModuleMetadata implements CompilerPass {
9095
private static final Node GOOG_MODULE = IR.getprop(IR.name("goog"), "module");
9196
private static final Node GOOG_REQUIRE = IR.getprop(IR.name("goog"), "require");
9297
private static final Node GOOG_REQUIRE_TYPE = IR.getprop(IR.name("goog"), "requireType");
98+
private static final Node GOOG_MAYBE_REQUIRE =
99+
IR.getprop(IR.name("goog"), "maybeRequireFrameworkInternalOnlyDoNotCallOrElse");
93100
private static final Node GOOG_REQUIRE_DYNAMIC = IR.getprop(IR.name("goog"), "requireDynamic");
94101
private static final Node GOOG_SET_TEST_ONLY = IR.getprop(IR.name("goog"), "setTestOnly");
95102
private static final Node GOOG_MODULE_DECLARELEGACYNAMESPACE =
@@ -481,6 +488,15 @@ private void visitGoogCall(NodeTraversal t, Node n) {
481488
} else {
482489
t.report(n, INVALID_REQUIRE_TYPE);
483490
}
491+
} else if (getprop.matchesQualifiedName(GOOG_MAYBE_REQUIRE)) {
492+
if (n.hasTwoChildren() && n.getLastChild().isStringLit()) {
493+
currentModule
494+
.metadataBuilder
495+
.maybeRequiredGoogNamespacesBuilder()
496+
.add(n.getLastChild().getString());
497+
} else {
498+
t.report(n, INVALID_MAYBE_REQUIRE);
499+
}
484500
} else if (getprop.matchesQualifiedName(GOOG_SET_TEST_ONLY)) {
485501
if (n.hasOneChild() || (n.hasTwoChildren() && n.getLastChild().isStringLit())) {
486502
currentModule.metadataBuilder.isTestOnly(true);

src/com/google/javascript/jscomp/deps/JsFileFullParser.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public enum ModuleType {
8787
public final Multiset<String> provides = TreeMultiset.create();
8888
public final Multiset<String> requires = TreeMultiset.create();
8989
public final Multiset<String> typeRequires = TreeMultiset.create();
90+
public final Multiset<String> maybeRequires = TreeMultiset.create();
9091
public final Multiset<String> requiresCss = TreeMultiset.create();
9192
public final Multiset<String> visibility = TreeMultiset.create();
9293

@@ -251,6 +252,7 @@ private static void recordModuleMetadata(FileInfo info, ModuleMetadata module) {
251252
if (module.usesClosure()) {
252253
info.provides.addAll(module.googNamespaces());
253254
info.requires.addAll(module.stronglyRequiredGoogNamespaces());
255+
info.maybeRequires.addAll(module.maybeRequiredGoogNamespaces());
254256
info.dynamicRequires.addAll(module.dynamicallyRequiredGoogNamespaces().elementSet());
255257
info.readToggles.addAll(module.readToggles().elementSet());
256258
info.typeRequires.addAll(module.weaklyRequiredGoogNamespaces());

src/com/google/javascript/jscomp/modules/ModuleMetadataMap.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,15 @@ public boolean isModule() {
184184
*/
185185
public abstract ImmutableMultiset<String> dynamicallyRequiredGoogNamespaces();
186186

187+
/**
188+
* Closure namespaces this file "maybe" require, i.e., arguments to
189+
* goog.maybeRequireFrameworkInternalOnlyDoNotCallOrElse() calls.
190+
*
191+
* <p>This is a multiset as it does not warn on duplicate namespaces, but will still encapsulate
192+
* that information with this multiset.
193+
*/
194+
public abstract ImmutableMultiset<String> maybeRequiredGoogNamespaces();
195+
187196
/**
188197
* Closure namespaces this file weakly requires, i.e., arguments to goog.requireType calls.
189198
*
@@ -241,6 +250,8 @@ public Builder addGoogNamespace(String namespace) {
241250

242251
public abstract ImmutableMultiset.Builder<String> dynamicallyRequiredGoogNamespacesBuilder();
243252

253+
public abstract ImmutableMultiset.Builder<String> maybeRequiredGoogNamespacesBuilder();
254+
244255
public abstract ImmutableMultiset.Builder<String> weaklyRequiredGoogNamespacesBuilder();
245256

246257
public abstract ImmutableMultiset.Builder<String> es6ImportSpecifiersBuilder();

test/com/google/javascript/jscomp/GatherModuleMetadataTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,23 @@ public void testRequireDynamicWithIllegalArg() {
591591
GatherModuleMetadata.INVALID_REQUIRE_DYNAMIC);
592592
}
593593

594+
@Test
595+
public void testMaybeRequire() {
596+
testSame("goog.maybeRequireFrameworkInternalOnlyDoNotCallOrElse('my.Type')");
597+
ModuleMetadata m = metadataMap().getModulesByPath().get("testcode");
598+
assertThat(m.maybeRequiredGoogNamespaces()).containsExactly("my.Type");
599+
}
600+
601+
@Test
602+
public void testMaybeRequireWithIllegalArg() {
603+
testError(
604+
"goog.maybeRequireFrameworkInternalOnlyDoNotCallOrElse('my.Type','extra.Type');",
605+
GatherModuleMetadata.INVALID_MAYBE_REQUIRE);
606+
testError(
607+
"goog.maybeRequireFrameworkInternalOnlyDoNotCallOrElse(42);",
608+
GatherModuleMetadata.INVALID_MAYBE_REQUIRE);
609+
}
610+
594611
@Test
595612
public void testRequiredClosureNamespaces() {
596613
testSame("goog.require('my.Type');");

0 commit comments

Comments
 (0)