private TypeArgument getTypeArg(TypeArgument[] args, String prefix) { for (TypeArgument ta : args) if (ta.getType().encode().startsWith(prefix)) return ta; return null; }
ObjectType type = argument.getType(); if (type == null) continue;
ObjectType type = argument.getType(); if (type == null) continue;
ObjectType type = arg.getType(); if (type == null)
ObjectType type = arg.getType(); if (type == 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 ResolvedType typeArgumentToType(SignatureAttribute.TypeArgument typeArgument, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) { if (typeArgument.isWildcard()) { if (typeArgument.getType() == null) { return ResolvedWildcard.UNBOUNDED; } else if (typeArgument.getKind() == '+') { return ResolvedWildcard.extendsBound(objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable)); } else if (typeArgument.getKind() == '-') { return ResolvedWildcard.superBound(objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable)); } else { throw new UnsupportedOperationException(); } } else { return objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable); } } }
private static ResolvedType typeArgumentToType(SignatureAttribute.TypeArgument typeArgument, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) { if (typeArgument.isWildcard()) { if (typeArgument.getType() == null) { return ResolvedWildcard.UNBOUNDED; } else if (typeArgument.getKind() == '+') { return ResolvedWildcard.extendsBound(objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable)); } else if (typeArgument.getKind() == '-') { return ResolvedWildcard.superBound(objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable)); } else { throw new UnsupportedOperationException(); } } else { return objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable); } } }
private static ResolvedType typeArgumentToType(SignatureAttribute.TypeArgument typeArgument, TypeSolver typeSolver, ResolvedTypeParametrizable typeParametrizable) { if (typeArgument.isWildcard()) { if (typeArgument.getType() == null) { return ResolvedWildcard.UNBOUNDED; } else if (typeArgument.getKind() == '+') { return ResolvedWildcard.extendsBound(objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable)); } else if (typeArgument.getKind() == '-') { return ResolvedWildcard.superBound(objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable)); } else { throw new UnsupportedOperationException(); } } else { return objectTypeArgumentToType(typeArgument.getType(), typeSolver, typeParametrizable); } }
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) {
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(); }