use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testCannotCollapseAliasedObjectLitProperty.
@Test
public void testCannotCollapseAliasedObjectLitProperty() {
GlobalNamespace namespace = parse("var foo = {prop: 0}; use(foo);");
Name fooProp = namespace.getSlot("foo.prop");
// We should not convert foo.prop -> foo$prop because use(foo) might read foo.prop
assertThat(fooProp.canCollapse()).isFalse();
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testStaticInheritedReferencesDontReferToSuperclass.
@Test
public void testStaticInheritedReferencesDontReferToSuperclass() {
GlobalNamespace namespace = parse(lines("class Superclass {", " static staticMethod() {}", "}", "class Subclass extends Superclass {}", "Subclass.staticMethod();", "Subclass.staticMethod?.();", "Subclass?.staticMethod();"));
Name superclass = namespace.getOwnSlot("Superclass");
assertThat(superclass.getSubclassingGets()).isEqualTo(1);
Name superclassStaticMethod = namespace.getOwnSlot("Superclass.staticMethod");
assertThat(superclassStaticMethod.getRefs()).hasSize(1);
assertThat(superclassStaticMethod.getDeclaration()).isNotNull();
Name subclassStaticMethod = namespace.getOwnSlot("Subclass.staticMethod");
// 2 references:
// `Subclass.staticMethod()`
// `Subclass.staticMethod?.()`
// `SubClass?.staticMethod()` is a reference to `SubClass`, but not
// to `SubClass.staticmethod`.
assertThat(subclassStaticMethod.getRefs()).hasSize(2);
assertThat(subclassStaticMethod.getDeclaration()).isNull();
assertThat(subclassStaticMethod.getCallGets()).isEqualTo(2);
Name subclass = namespace.getOwnSlot("Subclass");
assertThat(subclass.getRefs()).hasSize(2);
// `class Subclass` is the declaration reference
assertThat(subclass.getDeclaration()).isNotNull();
// `SubClass?.staticMethod` is an aliasing get on `SubClass`
assertThat(subclass.getAliasingGets()).isEqualTo(1);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testObjectLitSpreadAliasInDeclaration.
@Test
public void testObjectLitSpreadAliasInDeclaration() {
GlobalNamespace namespace = parse("const ns = {a: 3}; const {a} = {...ns};");
Name ns = namespace.getSlot("ns");
assertThat(ns.getGlobalSets()).isEqualTo(1);
assertThat(ns.getAliasingGets()).isEqualTo(1);
Name nsA = namespace.getSlot("ns.a");
assertThat(nsA.getGlobalSets()).isEqualTo(1);
assertThat(nsA.getAliasingGets()).isEqualTo(0);
Name a = namespace.getSlot("a");
assertThat(a.getGlobalSets()).isEqualTo(1);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testGoogProvideNamespace_explicitAssignment.
@Test
public void testGoogProvideNamespace_explicitAssignment() {
GlobalNamespace namespace = parse("goog.provide('a.b'); /** @const */ a.b = {};");
Name a = namespace.getSlot("a");
assertThat(a).isNotNull();
assertThat(a.getGlobalSets()).isEqualTo(0);
Name ab = namespace.getSlot("a.b");
assertThat(ab).isNotNull();
assertThat(ab.getGlobalSets()).isEqualTo(1);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testObjectPatternAliasInForOf.
@Test
public void testObjectPatternAliasInForOf() {
GlobalNamespace namespace = parse("const ns = {a: 3}; for (const {a: b} of [ns]) {}");
Name bar = namespace.getSlot("ns");
assertThat(bar.getGlobalSets()).isEqualTo(1);
assertThat(bar.getAliasingGets()).isEqualTo(1);
// GlobalNamespace ignores for-of and array literals, not realizing that `b` reads `ns.a`
Name nsA = namespace.getSlot("ns.a");
assertThat(nsA.getGlobalSets()).isEqualTo(1);
assertThat(nsA.getAliasingGets()).isEqualTo(0);
}
Aggregations