Java源码示例:com.google.javascript.rhino.jstype.TemplatizedType

示例1
@Override
public Void caseTemplatizedType(TemplatizedType type) {
  type.getReferencedType().visit(this);
  Iterator<JSType> types = type.getTemplateTypes().iterator();

  if (currentExpression().getNamedType() == null) {
    throw new IllegalStateException("unexpected templatized type structure");
  }
  com.github.jsdossier.proto.NamedType.Builder namedType =
      currentExpression().getNamedTypeBuilder();

  while (types.hasNext()) {
    JSType templateType = types.next();
    expressions.addLast(namedType.addTemplateTypeBuilder());
    templateType.visit(this);
    expressions.removeLast();
  }
  return null;
}
 
示例2
@Override
public Void caseTemplatizedType(TemplatizedType type) {
  type.getTemplateTypeMap().getTemplateKeys().stream()
      .map(k -> type.getTemplateTypeMap().getResolvedTemplateType(k))
      .filter(Objects::nonNull)
      .forEach(t -> t.visit(this));
  return null;
}
 
示例3
@Override
public T caseTemplatizedType(TemplatizedType type) {
  return null;
}
 
示例4
@Override
public TypeReference caseTemplatizedType(TemplatizedType type) {
  return createParametrizedTypeReference(type.getReferencedType(), type.getTemplateTypes());
}
 
示例5
private Void emitTemplatizedType(TemplatizedType type, boolean inImplementsExtendsPosition) {
  ObjectType referencedType = type.getReferencedType();
  String templateTypeName = getAbsoluteName(type);
  final ImmutableList<JSType> templateTypes = type.getTemplateTypes();
  if (typeRegistry.getNativeType(ARRAY_TYPE).equals(referencedType)
      && templateTypes.size() == 1) {
    // As per TS type grammar, array types require primary types.
    // https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#a-grammar
    if (inImplementsExtendsPosition) {
      emit("Array<");
    }
    visitTypeAsPrimary(templateTypes.get(0));
    emit(inImplementsExtendsPosition ? ">" : "[]");
    return null;
  }

  final String displayName = type.getDisplayName();
  if (PlatformSymbols.NOT_TEMPLATIZED_IN_TYPESCRIPT.contains(displayName)) {
    emit(PlatformSymbols.CLOSURE_TO_TYPESCRIPT.getOrDefault(displayName, displayName));
    return null;
  }

  String maybeGlobalName = maybeRenameGlobalType(displayName);
  templateTypeName = maybeGlobalName == null ? templateTypeName : maybeGlobalName;

  if (templateTypes.isEmpty()) {
    // In Closure, subtypes of `TemplatizedType`s that do not take type arguments are still
    // represented by templatized types.
    emit(templateTypeName);
    typesUsed.add(displayName);
    return null;
  }
  if (typeRegistry.getNativeType(OBJECT_TYPE).equals(referencedType)) {
    checkState(templateTypes.size() == 2, templateTypes);
    emit("{");
    emitIndexSignature(templateTypes.get(0), templateTypes.get(1), false);
    emit("}");
    return null;
  }
  emit(templateTypeName);
  typesUsed.add(displayName);
  emitGenericTypeArguments(templateTypes);
  return null;
}
 
示例6
@Override
public Void caseTemplatizedType(TemplatizedType type) {
  emitTemplatizedType(type, true);
  return null;
}
 
示例7
protected TemplatizedType createTemplatizedType(
    ObjectType baseType, ImmutableList<JSType> templatizedTypes) {
  return registry.createTemplatizedType(baseType, templatizedTypes);
}
 
示例8
protected TemplatizedType createTemplatizedType(
    ObjectType baseType, JSType... templatizedType) {
  return createTemplatizedType(
      baseType, ImmutableList.copyOf(templatizedType));
}
 
示例9
private static JSType stripTemplateTypeInformation(JSType type) {
  if (type.isTemplatizedType()) {
    return ((TemplatizedType) type).getReferencedType();
  }
  return type;
}
 
示例10
@Override
public Object caseTemplatizedType(TemplatizedType type) {
  return null;
}