Example #1
0
  private Object resolveParameter(java.lang.annotation.Annotation[] parmAnnos, Class<?> paramType) {
    Object val = null;
    boolean hitResolver = false;
    Default defAnno = null;
    for (Annotation anno : parmAnnos) {
      Class<?> annotype = anno.annotationType();

      if (defAnno == null && annotype.equals(Default.class)) {
        defAnno = (Default) anno;
        continue;
      }
      ParamResolver<Annotation> resolver = _paramResolvers.get(annotype);
      if (resolver == null) continue;
      hitResolver = true;
      val = resolver.resolveParameter(anno, paramType);
      if (val != null) {
        break;
      }
      // don't break until get a value
    }
    if (val == null && defAnno != null) {
      val = Classes.coerce(paramType, defAnno.value());
    }

    // to compatible to rc2, do we have to?
    if (_mappingType && val == null && !hitResolver && _types != null) {
      for (Type type : _types) {
        if (type != null && paramType.isAssignableFrom(type.clz)) {
          val = type.value;
          break;
        }
      }
    }
    return val;
  }