public String toString(boolean showRedirect) { if (isArray()) { return componentType.toString(showRedirect)+"[]"; } StringBuilder ret = new StringBuilder(getName()); if (placeholder) ret = new StringBuilder(getUnresolvedName()); if (!placeholder && genericsTypes != null) { ret.append(" <"); for (int i = 0; i < genericsTypes.length; i++) { if (i != 0) ret.append(", "); GenericsType genericsType = genericsTypes[i]; ret.append(genericTypeAsString(genericsType)); } ret.append(">"); } if (redirect != null && showRedirect) { ret.append(" -> ").append(redirect().toString()); } return ret.toString(); }
public GenericsType(ClassNode type, ClassNode[] upperBounds, ClassNode lowerBound) { this.type = type; this.name = type.isGenericsPlaceHolder() ? type.getUnresolvedName() : type.getName(); this.upperBounds = upperBounds; this.lowerBound = lowerBound; placeholder = type.isGenericsPlaceHolder(); resolved = false; }
private static Parameter[] makeRawTypes(Parameter[] params, Map<GenericsType, GenericsType> genericsPlaceholderAndTypeMap) { Parameter[] newParam = new Parameter[params.length]; for (int i = 0; i < params.length; i++) { Parameter oldP = params[i]; ClassNode actualType = GenericsUtils.findActualTypeByGenericsPlaceholderName(oldP.getType().getUnresolvedName(), genericsPlaceholderAndTypeMap); Parameter newP = new Parameter(makeRawType(null == actualType ? oldP.getType() : actualType), oldP.getName()); newParam[i] = newP; } return newParam; }
if (lowerBound!=null) return genericsTypes[0].getName().equals(lowerBound.getUnresolvedName()); if (upperBounds!=null) { for (ClassNode upperBound : upperBounds) {
return correctToGenericsSpecRecurse(genericsSpec, type.getComponentType(), exclusions).makeArray(); if (type.isGenericsPlaceHolder() && !exclusions.contains(type.getUnresolvedName())) { String name = type.getGenericsTypes()[0].getName(); type = genericsSpec.get(name); if (type != null && type.isGenericsPlaceHolder() && type.getGenericsTypes() == null) { ClassNode placeholder = ClassHelper.makeWithoutCaching(type.getUnresolvedName()); placeholder.setGenericsPlaceHolder(true); type = makeClassSafeWithGenerics(type, new GenericsType(placeholder));
static ClassNode applyGenericsContext( Map<GenericsTypeName, GenericsType> spec, ClassNode bound ) { if (bound == null) return null; if (bound.isArray()) { return applyGenericsContext(spec, bound.getComponentType()).makeArray(); } if (!bound.isUsingGenerics()) return bound; ClassNode newBound = bound.getPlainNodeReference(); newBound.setGenericsTypes(applyGenericsContext(spec, bound.getGenericsTypes())); if (bound.isGenericsPlaceHolder()) { GenericsType[] gt = newBound.getGenericsTypes(); boolean hasBounds = hasNonTrivialBounds(gt[0]); if (hasBounds || !gt[0].isPlaceholder()) return getCombinedBoundType(gt[0]); String placeHolderName = newBound.getGenericsTypes()[0].getName(); if (!placeHolderName.equals(newBound.getUnresolvedName())) { // we should produce a clean placeholder ClassNode here ClassNode clean = make(placeHolderName); clean.setGenericsTypes(newBound.getGenericsTypes()); clean.setRedirect(newBound); newBound = clean; } newBound.setGenericsPlaceHolder(true); } return newBound; }
fieldNode.getOriginType().getUnresolvedName(), makeDeclaringAndActualGenericsTypeMap(fieldNode.getDeclaringClass(), typeCheckingContext.getEnclosingClassNode()) );
public GenericsType(ClassNode type, ClassNode[] upperBounds, ClassNode lowerBound) { this.type = type; this.name = type.isGenericsPlaceHolder() ? type.getUnresolvedName() : type.getName(); this.upperBounds = upperBounds; this.lowerBound = lowerBound; placeholder = type.isGenericsPlaceHolder(); resolved = false; }
private MethodSignature(MethodNode mn, boolean inTrait) { name = mn.getName(); Parameter[] mps = mn.getParameters(); int offset = inTrait?1:0; params = new String[mps.length-offset]; for(int i=offset; i<mps.length;i++) { Parameter p = mps[i]; params[i-offset] = simpleName(p.getOriginType().getUnresolvedName()); } }
private MethodSignature(MethodNode mn, boolean inTrait) { name = mn.getName(); Parameter[] mps = mn.getParameters(); int offset = inTrait?1:0; params = new String[mps.length-offset]; for(int i=offset; i<mps.length;i++) { Parameter p = mps[i]; params[i-offset] = simpleName(p.getOriginType().getUnresolvedName()); } }
ClassNode pType = p.getType(); if(inTrait && i==0 ) { if(classNode.getUnresolvedName().startsWith(pType.getUnresolvedName()+"$Trait")) { String pLabel = simpleName(pType.isArray() ? pType.getComponentType().getUnresolvedName()+"[]" : pType.getUnresolvedName()); methodCallLabelBuilder.append(delimiter).append(pLabel); GenericsType[] gts = p.getType().getGenericsTypes(); String gDelim = ""; for(GenericsType gt: gts) { methodCallLabelBuilder.append(gDelim).append(simpleName(gt.getType().getUnresolvedName())); gDelim=", ";
ClassNode pType = p.getType(); if(inTrait && i==0 ) { if(classNode.getUnresolvedName().startsWith(pType.getUnresolvedName()+"$Trait")) { String pLabel = simpleName(pType.isArray() ? pType.getComponentType().getUnresolvedName()+"[]" : pType.getUnresolvedName()); methodCallLabelBuilder.append(delimiter).append(pLabel); GenericsType[] gts = p.getType().getGenericsTypes(); String gDelim = ""; for(GenericsType gt: gts) { methodCallLabelBuilder.append(gDelim).append(simpleName(gt.getType().getUnresolvedName())); gDelim=", ";