Search in sources :

Example 21 with Name

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);
}
Also used : Name(com.google.javascript.jscomp.GlobalNamespace.Name) Test(org.junit.Test)

Example 22 with Name

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);
}
Also used : Name(com.google.javascript.jscomp.GlobalNamespace.Name) Test(org.junit.Test)

Example 23 with Name

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);
}
Also used : Name(com.google.javascript.jscomp.GlobalNamespace.Name) Test(org.junit.Test)

Example 24 with Name

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();
}
Also used : Name(com.google.javascript.jscomp.GlobalNamespace.Name) Test(org.junit.Test)

Example 25 with Name

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);
}
Also used : Node(com.google.javascript.rhino.Node) NodeSubject.assertNode(com.google.javascript.rhino.testing.NodeSubject.assertNode) Name(com.google.javascript.jscomp.GlobalNamespace.Name) Test(org.junit.Test)

Aggregations

Name (com.google.javascript.jscomp.GlobalNamespace.Name)95 Test (org.junit.Test)72 Ref (com.google.javascript.jscomp.GlobalNamespace.Ref)25 Node (com.google.javascript.rhino.Node)22 ModuleMetadata (com.google.javascript.jscomp.modules.ModuleMetadataMap.ModuleMetadata)12 NodeSubject.assertNode (com.google.javascript.rhino.testing.NodeSubject.assertNode)12 JSDocInfo (com.google.javascript.rhino.JSDocInfo)5 AstChange (com.google.javascript.jscomp.GlobalNamespace.AstChange)2 Inlinability (com.google.javascript.jscomp.GlobalNamespace.Inlinability)2 JSTypeExpression (com.google.javascript.rhino.JSTypeExpression)2 JSType (com.google.javascript.rhino.jstype.JSType)2 LinkedHashSet (java.util.LinkedHashSet)2 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 PropagateConstantAnnotationsOverVars (com.google.javascript.jscomp.Normalize.PropagateConstantAnnotationsOverVars)1 Module (com.google.javascript.jscomp.modules.Module)1 FeatureSet (com.google.javascript.jscomp.parsing.parser.FeatureSet)1 QualifiedName (com.google.javascript.rhino.QualifiedName)1 ArrayList (java.util.ArrayList)1