### Question:
ArgType { public boolean containsGenericType() { if (isGenericType()) { return true; } ArgType wildcardType = getWildcardType(); if (wildcardType != null) { return wildcardType.containsGenericType(); } if (isGeneric()) { ArgType[] genericTypes = getGenericTypes(); if (genericTypes != null) { for (ArgType genericType : genericTypes) { if (genericType.containsGenericType()) { return true; } } } return false; } return false; }  static ArgType object(String obj); static ArgType genericType(String type); static ArgType wildcard(); static ArgType wildcard(ArgType obj, WildcardBound bound); static ArgType parseGenericSignature(String sign); static ArgType generic(String obj, ArgType... generics); static ArgType outerGeneric(ArgType genericOuterType, ArgType innerType); static ArgType array(ArgType vtype); static ArgType unknown(PrimitiveType... types); boolean isTypeKnown(); PrimitiveType getPrimitiveType(); boolean isPrimitive(); String getObject(); boolean isObject(); boolean isGeneric(); boolean isGenericType(); ArgType[] getGenericTypes(); List<ArgType> getExtendTypes(); void setExtendTypes(List<ArgType> extendTypes); ArgType getWildcardType(); WildcardBound getWildcardBound(); ArgType getOuterType(); ArgType getInnerType(); boolean isArray(); int getArrayDimension(); ArgType getArrayElement(); ArgType getArrayRootElement(); abstract boolean contains(PrimitiveType type); abstract ArgType selectFirst(); abstract PrimitiveType[] getPossibleTypes(); static boolean isCastNeeded(DexNode dex, ArgType from, ArgType to); static boolean isInstanceOf(RootNode root, ArgType type, ArgType of); static boolean isClsKnown(RootNode root, ArgType cls); boolean canBeObject(); boolean canBeArray(); boolean canBePrimitive(PrimitiveType primitiveType); static ArgType convertFromPrimitiveType(PrimitiveType primitiveType); static ArgType parse(String type); static ArgType parse(char f); int getRegCount(); boolean containsGenericType(); static ArgType tryToResolveClassAlias(DexNode dex, ArgType type); @Override String toString(); @Override int hashCode(); @Override boolean equals(Object obj); static final ArgType INT; static final ArgType BOOLEAN; static final ArgType BYTE; static final ArgType SHORT; static final ArgType CHAR; static final ArgType FLOAT; static final ArgType DOUBLE; static final ArgType LONG; static final ArgType VOID; static final ArgType OBJECT; static final ArgType CLASS; static final ArgType STRING; static final ArgType ENUM; static final ArgType THROWABLE; static final ArgType OBJECT_ARRAY; static final ArgType UNKNOWN; static final ArgType UNKNOWN_OBJECT; static final ArgType UNKNOWN_OBJECT_NO_ARRAY; static final ArgType UNKNOWN_ARRAY; static final ArgType NARROW; static final ArgType NARROW_NUMBERS; static final ArgType NARROW_INTEGRAL; static final ArgType NARROW_NUMBERS_NO_BOOL; static final ArgType NARROW_NUMBERS_NO_FLOAT; static final ArgType WIDE; static final ArgType INT_FLOAT; }### Answer:
@Test void testContainsGenericType() { ArgType wildcard = ArgType.wildcard(ArgType.genericType("T"), ArgType.WildcardBound.SUPER); assertTrue(wildcard.containsGenericType()); ArgType type = ArgType.generic("java.lang.List", wildcard); assertTrue(type.containsGenericType()); }