}
return templateTypes.get(index);
}
private JSType evalRecord(Node record, NameResolver nameResolver) {
RecordTypeBuilder builder = new RecordTypeBuilder(typeRegistry);
for (Node propNode : record.children()) {
// If it is a computed property then find the property name using the resolver
if (propNode.isComputedProp()) {
String compPropName = getComputedPropName(propNode);
// If the name does not exist then report a warning
if (!nameResolver.nameVars.containsKey(compPropName)) {
reportWarning(record, UNKNOWN_NAMEVAR, compPropName);
return getUnknownType();
}
// Otherwise add the property
Node propValue = getComputedPropValue(propNode);
String resolvedName = nameResolver.nameVars.get(compPropName);
JSType resultingType = evalInternal(propValue, nameResolver);
builder.addProperty(resolvedName, resultingType, null);
} else {
String propName = propNode.getString();
JSType resultingType = evalInternal(propNode.getFirstChild(),
nameResolver);
builder.addProperty(propName, resultingType, null);
}
}
return builder.build();
}