Skip to content

Commit c8ca356

Browse files
jDramaixcopybara-github
authored andcommitted
First step in refactoring TypeReference model.
- Turn TypeReference to an abstract class: This is required by the visitor framework. - Remove PredefinedTypeReference in favor of PredefinedType + TypeReference. This will also allow a easier modeling of nullability in a next cl. PiperOrigin-RevId: 688672738
1 parent 9fa3607 commit c8ca356

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

java/elemental2/core/BuiltInClosureTypeCleaner.java

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717

1818
import static com.google.common.base.Preconditions.checkState;
1919
import static java.util.stream.Collectors.toCollection;
20-
import static jsinterop.generator.model.PredefinedTypeReference.ARRAY_STAMPER;
21-
import static jsinterop.generator.model.PredefinedTypeReference.JS;
20+
import static jsinterop.generator.model.PredefinedTypes.ARRAY_STAMPER;
21+
import static jsinterop.generator.model.PredefinedTypes.JS;
22+
import static jsinterop.generator.model.PredefinedTypes.OBJECT;
2223

2324
import com.google.common.collect.ImmutableList;
2425
import com.google.common.collect.ImmutableSet;
@@ -44,7 +45,6 @@
4445
import jsinterop.generator.model.ModelVisitor;
4546
import jsinterop.generator.model.Parameter;
4647
import jsinterop.generator.model.ParametrizedTypeReference;
47-
import jsinterop.generator.model.PredefinedTypeReference;
4848
import jsinterop.generator.model.Program;
4949
import jsinterop.generator.model.ReturnStatement;
5050
import jsinterop.generator.model.Type;
@@ -65,8 +65,6 @@
6565
* </ul>
6666
*/
6767
public class BuiltInClosureTypeCleaner implements ModelVisitor {
68-
private static final String OBJECT = "Object";
69-
7068
@Override
7169
public void applyTo(Program program) {
7270
program.accept(
@@ -84,10 +82,10 @@ public void exitType(Type type) {
8482
type.getFields().stream()
8583
.filter(f -> "length".equals(f.getName()))
8684
.collect(MoreCollectors.onlyElement()));
87-
} else if ("Array".equals(nativeFqn)) {
85+
} else if (Objects.equals(nativeFqn, "Array")) {
8886
cleanArrayType(type);
8987
addJavaArrayHelperMethods(type);
90-
} else if (OBJECT.equals(nativeFqn)) {
88+
} else if (Objects.equals(nativeFqn, "Object")) {
9189
// JsCompiler uses a hardcoded definition for the Object type, one with two type
9290
// parameters (from IObject). That makes the resulting java type to be generated as
9391
// the following parametrized type:
@@ -138,10 +136,9 @@ private static void addJavaArrayHelperMethods(Type jsArrayType) {
138136
asArray.setBody(
139137
new ReturnStatement(
140138
MethodInvocation.builder()
141-
.setInvocationTarget(new TypeQualifier(ARRAY_STAMPER))
139+
.setInvocationTarget(new TypeQualifier(ARRAY_STAMPER.getReference()))
142140
.setMethodName("stampJavaTypeInfo")
143-
.setArgumentTypes(
144-
PredefinedTypeReference.OBJECT, new ArrayTypeReference(arrayTypeParameter))
141+
.setArgumentTypes(OBJECT.getReference(), new ArrayTypeReference(arrayTypeParameter))
145142
.setArguments(new LiteralExpression("this"), new LiteralExpression("reference"))
146143
.build()));
147144
jsArrayType.addMethod(asArray);
@@ -165,9 +162,9 @@ PredefinedTypeReference.OBJECT, new ArrayTypeReference(arrayTypeParameter))
165162
from.setBody(
166163
new ReturnStatement(
167164
MethodInvocation.builder()
168-
.setInvocationTarget(new TypeQualifier(JS))
165+
.setInvocationTarget(new TypeQualifier(JS.getReference()))
169166
.setMethodName("uncheckedCast")
170-
.setArgumentTypes(PredefinedTypeReference.OBJECT)
167+
.setArgumentTypes(OBJECT.getReference())
171168
.setArguments(new LiteralExpression("array"))
172169
.build()));
173170
jsArrayType.addMethod(from);
@@ -308,8 +305,7 @@ private static void cleanArrayConcatMethod(Type arrayType) {
308305
(ParametrizedTypeReference) concatMethod.getReturnType();
309306
checkState(
310307
concatReturnType.getActualTypeArguments().size() == 1
311-
&& PredefinedTypeReference.OBJECT.equals(
312-
concatReturnType.getActualTypeArguments().get(0)));
308+
&& concatReturnType.getActualTypeArguments().get(0).isReferenceTo(OBJECT));
313309
concatMethod.setReturnType(
314310
new ParametrizedTypeReference(
315311
concatReturnType.getMainType(), ImmutableList.of(arrayValueTypeParameter)));
@@ -322,7 +318,7 @@ private static void cleanArrayConcatMethod(Type arrayType) {
322318
private static void improveArrayMethodTyping(Method m, TypeReference arrayTypeParameter) {
323319
checkState(m.getParameters().size() == 1);
324320
Parameter firstParameter = m.getParameters().get(0);
325-
checkState(PredefinedTypeReference.OBJECT.equals(firstParameter.getType()));
321+
checkState(firstParameter.getType().isReferenceTo(OBJECT));
326322
m.getParameters()
327323
.set(0, firstParameter.toBuilder().setName("items").setType(arrayTypeParameter).build());
328324
}

0 commit comments

Comments
 (0)