Пример #1
0
  @Override
  protected ClassSourceFileComposerFactory createComposerFactory() {
    String parameters = "";
    if (source instanceof JGenericType) {
      JGenericType gtype = (JGenericType) source;
      StringBuilder builder = new StringBuilder();
      builder.append("<");
      boolean first = true;
      for (JTypeParameter arg : gtype.getTypeParameters()) {
        if (!first) builder.append(",");
        builder.append(arg.getName());
        builder.append(" extends ");
        builder.append(arg.getFirstBound().getParameterizedQualifiedSourceName());
        first = false;
      }
      builder.append(">");
      parameters = builder.toString();
    }

    ClassSourceFileComposerFactory composerFactory =
        new ClassSourceFileComposerFactory(packageName, shortName + parameters);
    composerFactory.addImplementedInterface(source.getParameterizedQualifiedSourceName());
    composerFactory.addImplementedInterface(RestServiceProxy.class.getName());
    return composerFactory;
  }
Пример #2
0
  /**
   * Returns <code>true</code> if the type arguments of the rhs parameterized type are assignable to
   * the type arguments of the lhs parameterized type.
   */
  private static boolean areTypeArgumentsAssignable(
      JParameterizedType lhsType, JParameterizedType rhsType) {
    // areClassTypesAssignable should prevent us from getting here if the types
    // are referentially equal.
    assert (lhsType != rhsType);
    assert (lhsType.getBaseType() == rhsType.getBaseType());

    JClassType[] lhsTypeArgs = lhsType.getTypeArgs();
    JClassType[] rhsTypeArgs = rhsType.getTypeArgs();
    JGenericType lhsBaseType = lhsType.getBaseType();

    // Compare at least as many formal type parameters as are declared on the
    // generic base type. gwt.typeArgs could cause more types to be included.

    JTypeParameter[] lhsTypeParams = lhsBaseType.getTypeParameters();
    for (int i = 0; i < lhsTypeParams.length; ++i) {
      if (!doesTypeArgumentContain(lhsTypeArgs[i], rhsTypeArgs[i])) {
        return false;
      }
    }

    return true;
  }