@Override public Set<String> caseTemplatizedType(TemplatizedType type) { // Visit the type arguments. // SomeType.<T1, T2> for (JSType templateType : type.getTemplateTypes()) { visitOnce(templateType); } return externProperties; }
/** * Checks whether current type is Object type with non-stringifable key. */ private boolean isObjectTypeWithNonStringifiableKey(JSType type) { if (!type.isTemplatizedType()) { return false; } TemplatizedType templatizedType = type.toMaybeTemplatizedType(); if (templatizedType.getReferencedType().isNativeObjectType() && templatizedType.getTemplateTypes().size() > 1) { return !isReasonableObjectPropertyKey(templatizedType.getTemplateTypes().get(0)); } else { return false; } }
/** * Checks whether current type is Object type with non-stringifable key. */ private boolean isObjectTypeWithNonStringifiableKey(JSType type) { if (!type.isTemplatizedType()) { return false; } TemplatizedType templatizedType = type.toMaybeTemplatizedType(); if (templatizedType.getReferencedType().isNativeObjectType() && templatizedType.getTemplateTypes().size() > 1) { return !isStringifiable(templatizedType.getTemplateTypes().get(0)); } else { return false; } }
@Override public JSType caseTemplatizedType(TemplatizedType type) { boolean changed = false; ObjectType beforeBaseType = type.getReferencedType(); ObjectType afterBaseType = ObjectType.cast(beforeBaseType.visit(this)); if (beforeBaseType != afterBaseType) { changed = true; } ImmutableList.Builder<JSType> builder = ImmutableList.builder(); for (JSType beforeTemplateType : type.getTemplateTypes()) { JSType afterTemplateType = beforeTemplateType.visit(this); if (beforeTemplateType != afterTemplateType) { changed = true; } builder.add(afterTemplateType); } if (changed) { type = registry.createTemplatizedType(afterBaseType, builder.build()); } return type; }
private JSType evalTemplateTypeOf(Node ttlAst, NameResolver nameResolver) { ImmutableList<Node> params = getCallParams(ttlAst); JSType type = evalInternal(params.get(0), nameResolver); if (!type.isTemplatizedType()) { reportWarning(ttlAst, TEMPTYPE_INVALID, "templateTypeOf", type.toString()); return getUnknownType(); } int index = (int) params.get(1).getDouble(); ImmutableList<JSType> templateTypes = ((TemplatizedType) type).getTemplateTypes(); if (index > templateTypes.size()) { reportWarning(ttlAst, INDEX_OUTOFBOUNDS, Integer.toString(index), Integer.toString(templateTypes.size())); return getUnknownType(); } return templateTypes.get(index); }
@Override public JSType caseTemplatizedType(TemplatizedType type) { boolean changed = false; ObjectType beforeBaseType = type.getReferencedType(); ObjectType afterBaseType = ObjectType.cast(beforeBaseType.visit(this)); if (beforeBaseType != afterBaseType) { changed = true; } ImmutableList.Builder<JSType> builder = ImmutableList.builder(); for (JSType beforeTemplateType : type.getTemplateTypes()) { JSType afterTemplateType = beforeTemplateType.visit(this); if (beforeTemplateType != afterTemplateType) { changed = true; } builder.add(afterTemplateType); } if (changed) { type = registry.createTemplatizedType(afterBaseType, builder.build()); } return type; }
String templateTypeName = getAbsoluteName(type); if (typeRegistry.getNativeType(ARRAY_TYPE).equals(referencedType) && type.getTemplateTypes().size() == 1) { emit("Array<"); visitTypeAsPrimary(type.getTemplateTypes().get(0)); emit(inImplementsExtendsPosition ? ">" : "[]"); return null; templateTypeName = maybeGlobalName == null ? templateTypeName : maybeGlobalName; if (type.getTemplateTypes().isEmpty()) { return null; Iterator<JSType> it = type.getTemplateTypes().iterator(); if (typeRegistry.getNativeType(OBJECT_TYPE).equals(referencedType)) { emit("{");
ttypes = ((TemplatizedType) returnType).getTemplateTypes(); } else if (returnType.isNoResolvedType()) { ttypes = ((NoResolvedType) returnType).getTemplateTypes(); return false; JSType arrayMembers = ttypes.get(0).toMaybeTemplatizedType().getTemplateTypes().get(0); if (!arrayMembers.isUnionType() || arrayMembers.toMaybeUnionType().getAlternatesWithoutStructuralTyping().size() != 2) {
/** * Returns whether the replacement type is a templatized type which contains the current type. * e.g. current type T is being replaced with Foo<T> */ private boolean isRecursive(TemplateType currentType, JSType replacementType) { TemplatizedType replacementTemplatizedType = replacementType.restrictByNotNullOrUndefined().toMaybeTemplatizedType(); if (replacementTemplatizedType == null) { return false; } Iterable<JSType> replacementTemplateTypes = replacementTemplatizedType.getTemplateTypes(); for (JSType replacementTemplateType : replacementTemplateTypes) { if (replacementTemplateType.isTemplateType() && isSameType(currentType, replacementTemplateType.toMaybeTemplateType())) { return true; } } return false; }
/** * Returns whether the replacement type is a templatized type which contains the current type. * e.g. current type T is being replaced with Foo<T> */ private boolean isRecursive(TemplateType currentType, JSType replacementType) { TemplatizedType replacementTemplatizedType = replacementType.restrictByNotNullOrUndefined().toMaybeTemplatizedType(); if (replacementTemplatizedType == null) { return false; } Iterable<JSType> replacementTemplateTypes = replacementTemplatizedType.getTemplateTypes(); for (JSType replacementTemplateType : replacementTemplateTypes) { if (replacementTemplateType.isTemplateType() && isSameType(currentType, replacementTemplateType.toMaybeTemplateType())) { return true; } } return false; }
for (JSType templateType : type.toMaybeTemplatizedType().getTemplateTypes()) { JSType result = findObjectWithNonStringifiableKey(templateType, alreadyCheckedTypes); if (result != null) {
for (JSType templateType : type.toMaybeTemplatizedType().getTemplateTypes()) { JSType result = findObjectWithNonStringifiableKey(templateType); if (result != null) {
int keyCount = templatizedParamType.getTemplateTypes().size();
TemplatizedType templatizedType = type.toMaybeTemplatizedType(); if (templatizedType.getReferencedType().isArrayType()) { return isStringifiable(templatizedType.getTemplateTypes().get(0));
TemplatizedType templatizedType = type.toMaybeTemplatizedType(); if (templatizedType.getReferencedType().isArrayType()) { return isReasonableObjectPropertyKey(templatizedType.getTemplateTypes().get(0));