docs: public TypeParameter resolve() {
          // Try resolving the type variable against the containing method
          if (containingMethodSignature != null && containingMethodSignature.typeParameters != null
                  && !containingMethodSignature.typeParameters.isEmpty()) {
              for (final TypeParameter typeParameter : containingMethodSignature.typeParameters) {
                  if (typeParameter.name.equals(this.name)) {
                      return typeParameter;
                  }
              }
          }
          // If that failed, try resolving the type variable against the containing class
          final ClassInfo containingClassInfo = getClassInfo();
          if (containingClassInfo == null) {
              throw new IllegalArgumentException("Could not find ClassInfo object for " + definingClassName);
          }
          final ClassTypeSignature containingClassSignature = containingClassInfo.getTypeSignature();
          if (containingClassSignature != null && containingClassSignature.typeParameters != null
                  && !containingClassSignature.typeParameters.isEmpty()) {
              for (final TypeParameter typeParameter : containingClassSignature.typeParameters) {
                  if (typeParameter.name.equals(this.name)) {
                      return typeParameter;
                  }
              }
          }
          throw new IllegalArgumentException(
                  "Could not resolve " + name + " against parameters of the defining method or enclosing class");
      }