private static String inferGenericTypeName(CtClass ctClass, SignatureAttribute.Type genericSignature) { // infer targetEntity from generic type signature if ( isAssignable( ctClass, Collection.class.getName() ) ) { return ( (SignatureAttribute.ClassType) genericSignature ).getTypeArguments()[0].getType().jvmTypeName(); } if ( isAssignable( ctClass, Map.class.getName() ) ) { return ( (SignatureAttribute.ClassType) genericSignature ).getTypeArguments()[1].getType().jvmTypeName(); } return ctClass.getName(); }
private void ensureVersion(CtClass cc) throws NotFoundException, CannotCompileException, BadBytecode { CtMethod ccms[] = cc.getDeclaredMethods(); if (!javassist.Modifier.isAbstract(cc.getModifiers())) { String gsig = cc.getGenericSignature(); ClassSignature csig = SignatureAttribute.toClassSignature(gsig); // Warning: this is not doing proper parent (superclass/interfaces) traversal TypeArgument ta = getTypeArg(csig.getSuperClass().getTypeArguments(), "Lwater/api/rest/Version"); if (ta!=null && !hasExisting("getVersion", "()"+ta.getType().encode(), ccms) ) { String typeName = ta.toString(); String valueName = getValueFromType(typeName); //cc.addMethod(CtNewMethod.make("public "+typeName+" getVersion() {" + cc.addMethod(CtNewMethod.make("public water.api.rest.Version getVersion() {" + " return "+valueName+";" + "}",cc)); } } } private String getValueFromType(String typeName) {
sb.append(getClassNameForGenericType(ctype)); TypeArgument[] arguments = ctype.getTypeArguments();
sb.append(getClassNameForGenericType(ctype)); TypeArgument[] arguments = ctype.getTypeArguments();
boolean isParameterized = type.getTypeArguments() != null && type.getTypeArguments().length > 0; if (!isParameterized) if (!isParameterized) return delegate; info = new JavassistParameterizedClassInfo(this, delegate, loader, type.getTypeArguments(), spy);
boolean isParameterized = type.getTypeArguments() != null && type.getTypeArguments().length > 0; if (!isParameterized) if (!isParameterized) return delegate; info = new BytecodeParameterizedClassInfo(this, delegate, loader, type.getTypeArguments(), spy);
arguments = types[i].getTypeArguments(); break; arguments = classSig.getSuperClass().getTypeArguments();
static ResolvedType signatureTypeToType(SignatureAttribute.Type signatureType, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) { if (signatureType instanceof SignatureAttribute.ClassType) { SignatureAttribute.ClassType classType = (SignatureAttribute.ClassType) signatureType; List<ResolvedType> typeArguments = classType.getTypeArguments() == null ? Collections.emptyList() : Arrays.stream(classType.getTypeArguments()).map(ta -> typeArgumentToType(ta, typeSolver, typeParametrizable)).collect(Collectors.toList()); final String typeName = classType.getDeclaringClass() != null ?
static ResolvedType signatureTypeToType(SignatureAttribute.Type signatureType, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) { if (signatureType instanceof SignatureAttribute.ClassType) { SignatureAttribute.ClassType classType = (SignatureAttribute.ClassType) signatureType; List<ResolvedType> typeArguments = classType.getTypeArguments() == null ? Collections.emptyList() : Arrays.stream(classType.getTypeArguments()).map(ta -> typeArgumentToType(ta, typeSolver, typeParametrizable)).collect(Collectors.toList()); final String typeName = classType.getDeclaringClass() != null ?
arguments = types[i].getTypeArguments(); break; arguments = classSig.getSuperClass().getTypeArguments();
static ResolvedType signatureTypeToType(SignatureAttribute.Type signatureType, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) { if (signatureType instanceof SignatureAttribute.ClassType) { SignatureAttribute.ClassType classType = (SignatureAttribute.ClassType) signatureType; List<ResolvedType> typeArguments = classType.getTypeArguments() == null ? Collections.emptyList() : Arrays.stream(classType.getTypeArguments()).map(ta -> typeArgumentToType(ta, typeSolver, typeParametrizable)).collect(Collectors.toList()); final String typeName = classType.getDeclaringClass() != null ?
private ReferenceTypeUsage toReferenceTypeUsage(CtClass clazz, SignatureAttribute.ClassType genericClassType, SymbolResolver resolver) { try { SignatureAttribute.ClassSignature classSignature = SignatureAttribute.toClassSignature(clazz.getGenericSignature()); TypeDefinition typeDefinition = new JavassistTypeDefinition(clazz, this.resolver); ReferenceTypeUsage referenceTypeUsage = new ReferenceTypeUsage(typeDefinition); int i=0; for (SignatureAttribute.TypeArgument typeArgument : genericClassType.getTypeArguments()) { SignatureAttribute.Type t = typeArgument.getType(); referenceTypeUsage.getTypeParameterValues().add(classSignature.getParameters()[i].getName(), toTypeUsage(t, resolver, Collections.emptyMap())); i++; } return referenceTypeUsage; } catch (BadBytecode badBytecode) { throw new RuntimeException(badBytecode); } }
private static String inferGenericTypeName(CtClass ctClass, SignatureAttribute.Type genericSignature) { // infer targetEntity from generic type signature if ( isAssignable( ctClass, Collection.class.getName() ) ) { return ( (SignatureAttribute.ClassType) genericSignature ).getTypeArguments()[0].getType().jvmTypeName(); } if ( isAssignable( ctClass, Map.class.getName() ) ) { return ( (SignatureAttribute.ClassType) genericSignature ).getTypeArguments()[1].getType().jvmTypeName(); } return ctClass.getName(); }