コード例 #1
0
  public ParameterizedTypeBinding getParameterizedType(
      ReferenceBinding genericType,
      TypeBinding[] typeArguments,
      ReferenceBinding enclosingType,
      AnnotationBinding[] annotations) {

    if (genericType.hasTypeAnnotations()) // @NonNull (List<String>) and not (@NonNull List)<String>
    throw new IllegalStateException();

    ParameterizedTypeBinding parameterizedType =
        this.parameterizedTypes.get(genericType, typeArguments, enclosingType, annotations);
    if (parameterizedType != null) return parameterizedType;

    ParameterizedTypeBinding nakedType =
        super.getParameterizedType(genericType, typeArguments, enclosingType);

    if (!haveTypeAnnotations(genericType, enclosingType, typeArguments, annotations))
      return nakedType;

    parameterizedType =
        new ParameterizedTypeBinding(genericType, typeArguments, enclosingType, this.environment);
    parameterizedType.id = nakedType.id;
    parameterizedType.setTypeAnnotations(annotations, this.isAnnotationBasedNullAnalysisEnabled);
    this.parameterizedTypes.put(genericType, typeArguments, enclosingType, parameterizedType);
    return (ParameterizedTypeBinding) cacheDerivedType(genericType, nakedType, parameterizedType);
  }