Skip to content

Commit 23a42ff

Browse files
brad4dcopybara-github
authored andcommitted
NamedType: resolve to NoResolvedType for typeof UnknownTypeName
Previously such types were resolved to `?`, which doesn't provide enough information for clutz to correctly generate `typeof` references for its .d.ts output file. PiperOrigin-RevId: 326076424
1 parent b4815e7 commit 23a42ff

File tree

5 files changed

+8
-43
lines changed

5 files changed

+8
-43
lines changed

src/com/google/javascript/rhino/jstype/NamedType.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -334,18 +334,8 @@ private boolean resolveTypeof(ErrorReporter reporter) {
334334
String scopeName = reference.substring("typeof ".length());
335335
JSType type = resolutionScope.lookupQualifiedName(QualifiedName.of(scopeName));
336336
if (type == null || type.isUnknownType()) {
337-
if (registry.isForwardDeclaredType(scopeName)) {
338-
// Preserve the "typeof" as a `NoResolvedType`.
339-
// This is depended on by Clutz so it can generate `typeof ImportedType` instead of `any`
340-
// when `ImportedType` is not defined in the files it can see.
341-
setReferencedType(new NoResolvedType(registry, getReferenceName(), getTemplateTypes()));
342-
if (validator != null) {
343-
validator.apply(getReferencedType());
344-
}
345-
} else {
346-
warning(reporter, "Missing type for `typeof` value. The value must be declared and const.");
347-
setReferencedAndResolvedType(registry.getNativeType(JSTypeNative.UNKNOWN_TYPE), reporter);
348-
}
337+
warning(reporter, "Missing type for `typeof` value. The value must be declared and const.");
338+
setReferencedAndResolvedType(registry.getNativeType(JSTypeNative.UNKNOWN_TYPE), reporter);
349339
} else {
350340
if (type.isLiteralObject()) {
351341
// Create an extra layer of wrapping so that the "typeof" name is preserved for namespaces.

src/com/google/javascript/rhino/testing/BaseJSTypeTestCase.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,12 @@
6060

6161
/** A base class for tests on {@code JSType}s. */
6262
public abstract class BaseJSTypeTestCase {
63+
protected static final String FORWARD_DECLARED_TYPE_NAME = "forwardDeclared";
6364

6465
protected static final Joiner LINE_JOINER = Joiner.on('\n');
6566

6667
protected final TestErrorReporter errorReporter = new TestErrorReporter();
67-
protected JSTypeRegistry registry;
68+
protected final JSTypeRegistry registry;
6869

6970
protected JSType ALL_TYPE;
7071
protected ObjectType NO_OBJECT_TYPE;
@@ -120,16 +121,11 @@ public BaseJSTypeTestCase() {
120121
public BaseJSTypeTestCase(JSTypeRegistry registry) {
121122
this.registry =
122123
(registry == null)
123-
? new JSTypeRegistry(errorReporter, ImmutableSet.of())
124+
? new JSTypeRegistry(errorReporter, ImmutableSet.of(FORWARD_DECLARED_TYPE_NAME))
124125
: registry;
125126
initTypes();
126127
}
127128

128-
protected void resetRegistryWithForwardDeclaredName(String name) {
129-
this.registry = new JSTypeRegistry(errorReporter, ImmutableSet.of(name));
130-
initTypes();
131-
}
132-
133129
@After
134130
public void validateWarningsAndErrors() {
135131
errorReporter.verifyHasEncounteredAllWarningsAndErrors();

src/com/google/javascript/rhino/testing/TypeSubject.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,6 @@ public void isNotUnknown() {
130130
check("isUnknownType()").that(actualNonNull().isUnknownType()).isFalse();
131131
}
132132

133-
public void isNoResolvedType(String referenceName) {
134-
check("isNoResolvedType()").that(actual.isNoResolvedType()).isTrue();
135-
getReferenceNameIsEqualTo(referenceName);
136-
}
137-
138133
public void isNotEmpty() {
139134
check("isEmptyType()").that(actualNonNull().isEmptyType()).isFalse();
140135
}

test/com/google/javascript/rhino/jstype/JSTypeTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ public class JSTypeTest extends BaseJSTypeTestCase {
103103
@Before
104104
@SuppressWarnings({"MustBeClosedChecker"})
105105
public void setUp() throws Exception {
106-
resetRegistryWithForwardDeclaredName("forwardDeclared");
107106
try (JSTypeResolver.Closer closer = this.registry.getResolver().openForDefinition()) {
108107
final ObjectType googObject = registry.createAnonymousObjectType(null);
109108
MapBasedScope scope = new MapBasedScope(ImmutableMap.of("goog", googObject));

test/com/google/javascript/rhino/jstype/NamedTypeTest.java

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import org.junit.runner.RunWith;
5656
import org.junit.runners.JUnit4;
5757

58+
/** @author [email protected] (Nick Santos) */
5859
@RunWith(JUnit4.class)
5960
public class NamedTypeTest extends BaseJSTypeTestCase {
6061

@@ -115,11 +116,9 @@ public void testResolutionPropagatesNamedTypePropertiesToResolvedType() {
115116

116117
@Test
117118
public void testStateOfForwardDeclaredType_Unresolved() {
118-
resetRegistryWithForwardDeclaredName("forwardDeclared");
119-
120119
try (JSTypeResolver.Closer closer = this.registry.getResolver().openForDefinition()) {
121120
// Given
122-
NamedType type = namedTypeBuilder("forwardDeclared").build();
121+
NamedType type = namedTypeBuilder(FORWARD_DECLARED_TYPE_NAME).build();
123122

124123
// Then
125124
assertThat(type.isResolved()).isFalse();
@@ -131,10 +130,8 @@ public void testStateOfForwardDeclaredType_Unresolved() {
131130

132131
@Test
133132
public void testStateOfForwardDeclaredType_UnsuccesfullyResolved() {
134-
resetRegistryWithForwardDeclaredName("forwardDeclared");
135-
136133
// Given
137-
NamedType type = namedTypeBuilder("forwardDeclared").build();
134+
NamedType type = namedTypeBuilder(FORWARD_DECLARED_TYPE_NAME).build();
138135

139136
// Then
140137
assertThat(type.isUnsuccessfullyResolved()).isTrue();
@@ -361,18 +358,6 @@ public void testBuilderForTypeof_emitsUnrecognizedTypeError() {
361358
"Missing type for `typeof` value. The value must be declared and const.");
362359
}
363360

364-
@Test
365-
public void testBuilderForTypeof_yieldsNoResolvedTypeWithForwardDeclaredName() {
366-
resetRegistryWithForwardDeclaredName("Foo");
367-
368-
NamedType.Builder typeofFooBuilder = NamedType
369-
.builder(registry, "typeof Foo")
370-
.setScope(emptyScope())
371-
.setResolutionKind(ResolutionKind.TYPEOF);
372-
373-
assertType(typeofFooBuilder.build()).isNoResolvedType("typeof Foo");
374-
}
375-
376361
@Test
377362
public void testBuilderForTypeof_requiresReferenceToStartWithTypeof() {
378363
NamedType.Builder typeofFooBuilder = NamedType.builder(registry, "Foo")

0 commit comments

Comments
 (0)