use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testDirectGets.
@Test
public void testDirectGets() {
// None of the symbol uses here should be considered aliasing gets.
GlobalNamespace namespace = parse(lines(//
"const ns = {};", "ns.n1 = 1;", "ns.n2 = 2;", "ns.n1 === ns.n2;", "ns.n1 == ns.n2;", "ns.n1 !== ns.n2;", "ns.n1 != ns.n2;", "ns.n1 < ns.n2;", "ns.n1 <= ns.n2;", "ns.n1 > ns.n2;", "ns.n1 >= ns.n2;", "ns.n1 + ns.n2;", "ns.n1 - ns.n2;", "ns.n1 * ns.n2;", "ns.n1 / ns.n2;", "ns.n1 % ns.n2;", "ns.n1 ** ns.n2;", "ns.n1 & ns.n2;", "ns.n1 | ns.n2;", "ns.n1 ^ ns.n2;", "ns.n1 << ns.n2;", "ns.n1 >> ns.n2;", "ns.n1 >>> ns.n2;", "ns.n1 && ns.n2;", "ns.n1 || ns.n2;", ""));
Name bar = namespace.getSlot("ns");
assertThat(bar.getGlobalSets()).isEqualTo(1);
assertThat(bar.getAliasingGets()).isEqualTo(0);
// getting `ns.n1` doesn't count as a get on `ns`
assertThat(bar.getTotalGets()).isEqualTo(0);
Name n1 = namespace.getSlot("ns.n1");
assertThat(n1.getGlobalSets()).isEqualTo(1);
assertThat(n1.getAliasingGets()).isEqualTo(0);
assertThat(n1.getTotalGets()).isEqualTo(22);
Name n2 = namespace.getSlot("ns.n2");
assertThat(n2.getGlobalSets()).isEqualTo(1);
assertThat(n2.getAliasingGets()).isEqualTo(0);
assertThat(n2.getTotalGets()).isEqualTo(22);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method nullishCoalesce.
@Test
public void nullishCoalesce() {
GlobalNamespace namespace = parse("var a = a ?? {};");
Name a = namespace.getSlot("a");
assertThat(a).isNotNull();
assertThat(a.getRefs()).hasSize(2);
assertThat(a.getLocalSets()).isEqualTo(0);
assertThat(a.getGlobalSets()).isEqualTo(1);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testlogicalAssignmentGets2.
@Test
public void testlogicalAssignmentGets2() {
GlobalNamespace namespace = parse(lines(//
"const ns = {};", "ns.n1 = 1;", "ns.n2 = 2;", "ns.n1 ?? (ns.n1 = ns.n2);", "ns.n1 && (ns.n1 = ns.n2);"));
Name bar = namespace.getSlot("ns");
assertThat(bar.getGlobalSets()).isEqualTo(1);
assertThat(bar.getAliasingGets()).isEqualTo(0);
assertThat(bar.getTotalGets()).isEqualTo(0);
Name n1 = namespace.getSlot("ns.n1");
assertThat(n1.getGlobalSets()).isEqualTo(3);
assertThat(n1.getAliasingGets()).isEqualTo(2);
assertThat(n1.getTotalGets()).isEqualTo(4);
Name n2 = namespace.getSlot("ns.n2");
assertThat(n2.getGlobalSets()).isEqualTo(1);
assertThat(n2.getAliasingGets()).isEqualTo(2);
assertThat(n2.getTotalGets()).isEqualTo(2);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testCollapsing_forEscapedConstructor_ignoringStaticInheritance.
@Test
public void testCollapsing_forEscapedConstructor_ignoringStaticInheritance() {
GlobalNamespace namespace = parse(lines("/** @constructor */", "function Bar() {}", "use(Bar);"));
Name bar = namespace.getSlot("Bar");
// trivially true, already collapsed
assertThat(bar.canCollapse()).isTrue();
// we collapse properties of Bar even though it's escaped, intentionally unsafe.
// this is mostly to support minification for goog.provide namespaces containing @constructors
assertThat(bar.canCollapseUnannotatedChildNames()).isTrue();
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testScanFromNodeAddsReferenceToParentGetprop.
@Test
public void testScanFromNodeAddsReferenceToParentGetprop() {
GlobalNamespace namespace = parse("const x = {bar: 0}; const y = x; const baz = y.bar;");
Name xbar = namespace.getOwnSlot("x.bar");
assertThat(xbar.getAliasingGets()).isEqualTo(0);
Name baz = namespace.getOwnSlot("baz");
assertThat(baz.getGlobalSets()).isEqualTo(1);
// Replace "const baz = y.bar" with "const baz = x.bar"
Node root = lastCompiler.getJsRoot();
Node yRef = root.getFirstChild().getLastChild().getFirstFirstChild().getFirstChild();
checkState(yRef.getString().equals("y"), yRef);
Node xName = IR.name("x");
yRef.replaceWith(xName);
// Rescan the new nodes
namespace.scanNewNodes(ImmutableSet.of(createGlobalAstChangeForNode(root, xName)));
assertThat(xbar.getAliasingGets()).isEqualTo(1);
assertThat(baz.getGlobalSets()).isEqualTo(1);
}
Aggregations