use of com.google.template.soy.types.SoyType.Kind in project closure-templates by google.
the class RenderVisitor method checkStrictParamType.
/**
* Check that the given {@code paramValue} matches the static type of {@code param}.
*/
private void checkStrictParamType(final TemplateNode node, final TemplateParam param, @Nullable SoyValueProvider paramValue) {
Kind kind = param.type().getKind();
if (kind == Kind.ANY || kind == Kind.UNKNOWN) {
// Nothing to check. ANY and UKNOWN match all types.
return;
}
if (paramValue == null) {
paramValue = NullData.INSTANCE;
} else if (paramValue instanceof SoyAbstractCachingValueProvider) {
SoyAbstractCachingValueProvider typedValue = (SoyAbstractCachingValueProvider) paramValue;
if (!typedValue.isComputed()) {
// in order to preserve laziness we tell the value provider to assert the type when
// computation is triggered
typedValue.addValueAssertion(new ValueAssertion() {
@Override
public void check(SoyValue value) {
checkValueType(param, value, node);
}
});
return;
}
}
checkValueType(param, paramValue.resolve(), node);
}
use of com.google.template.soy.types.SoyType.Kind in project closure-templates by google.
the class TranslateExprNodeVisitor method genMapKeyCode.
/**
* Soy strings can be represented by SanitizedContent objects at runtime, so care needs to be
* taken when indexing into a map with a Soy "string". For pre-ES6 object maps, this isn't a
* problem, since bracket access implicitly calls toString() on the key, and SanitizedContent
* overrides toString appropriately. But ES6 Maps and jspb.Maps don't do this automatically, so we
* need to set it up.
*/
private CodeChunk.WithValue genMapKeyCode(ExprNode keyNode) {
CodeChunk.WithValue key = visit(keyNode);
// We need to coerce if the value could possibly a sanitizedcontent object
boolean needsRuntimeCoercionLogic = false;
SoyType type = keyNode.getType();
for (SoyType member : (type instanceof UnionType ? ((UnionType) type).getMembers() : ImmutableList.of(type))) {
Kind kind = member.getKind();
needsRuntimeCoercionLogic |= kind.isKnownStringOrSanitizedContent() || kind == Kind.UNKNOWN || kind == Kind.UNION || kind == Kind.ANY;
}
return needsRuntimeCoercionLogic ? SOY_MAP_MAYBE_COERCE_KEY_TO_STRING.call(key) : key;
}
Aggregations