/** * Returns a new TemplateTypeMap, where all unfilled values have been filled * with UNKNOWN_TYPE. */ private TemplateTypeMap addUnknownValues() { int numUnfilledTemplateKeys = numUnfilledTemplateKeys(); if (numUnfilledTemplateKeys == 0) { return this; } ImmutableList.Builder<JSType> builder = ImmutableList.builder(); for (int i = 0; i < numUnfilledTemplateKeys; i++) { builder.add(registry.getNativeType(JSTypeNative.UNKNOWN_TYPE)); } return addValues(builder.build()); }
TemplatizedType( JSTypeRegistry registry, ObjectType objectType, ImmutableList<JSType> templateTypes) { super(registry, objectType, objectType.getTemplateTypeMap().addValues( templateTypes)); // Cache which template keys were filled, and what JSTypes they were filled // with. ImmutableList<TemplateType> filledTemplateKeys = objectType.getTemplateTypeMap().getUnfilledTemplateKeys(); ImmutableList.Builder<JSType> builder = ImmutableList.builder(); for (TemplateType filledTemplateKey : filledTemplateKeys) { builder.add(getTemplateTypeMap().getResolvedTemplateType(filledTemplateKey)); } this.templateTypes = builder.build(); replacer = new TemplateTypeMapReplacer(registry, getTemplateTypeMap()); }