private static InvokableReferenceTypeUsage typeFor(CtMethod method, SymbolResolver resolver) { try { if (method.getGenericSignature() != null) { SignatureAttribute.MethodSignature methodSignature = SignatureAttribute.toMethodSignature(method.getGenericSignature()); SignatureAttribute.Type[] parameterTypes = methodSignature.getParameterTypes(); List<TypeUsage> paramTypes = Arrays.stream(parameterTypes).map((pt) -> toTypeUsage(pt, resolver, Collections.emptyMap())).collect(Collectors.toList()); InvokableReferenceTypeUsage invokableReferenceTypeUsage = new InvokableReferenceTypeUsage( toInternalMethodDefinition(method, resolver)); return invokableReferenceTypeUsage; } else { CtClass[] parameterTypes = method.getParameterTypes(); List<TypeUsage> paramTypes = Arrays.stream(parameterTypes).map((pt) -> toTypeUsage(pt, resolver)).collect(Collectors.toList()); InvokableReferenceTypeUsage invokableReferenceTypeUsage = new InvokableReferenceTypeUsage( toInternalMethodDefinition(method, resolver)); return invokableReferenceTypeUsage; } } catch (BadBytecode badBytecode) { throw new RuntimeException(badBytecode); } catch (NotFoundException e) { throw new RuntimeException(e); } }
@Override public ResolvedParameterDeclaration getParam(int i) { try { boolean variadic = false; if ((ctConstructor.getModifiers() & javassist.Modifier.VARARGS) > 0) { variadic = i == (ctConstructor.getParameterTypes().length - 1); } Optional<String> paramName = JavassistUtils.extractParameterName(ctConstructor, i); if (ctConstructor.getGenericSignature() != null) { SignatureAttribute.MethodSignature methodSignature = SignatureAttribute.toMethodSignature(ctConstructor.getGenericSignature()); SignatureAttribute.Type signatureType = methodSignature.getParameterTypes()[i]; return new JavassistParameterDeclaration(JavassistUtils.signatureTypeToType(signatureType, typeSolver, this), typeSolver, variadic, paramName.orElse(null)); } else { return new JavassistParameterDeclaration(ctConstructor.getParameterTypes()[i], typeSolver, variadic, paramName.orElse(null)); } } catch (NotFoundException e) { throw new RuntimeException(e); } catch (BadBytecode badBytecode) { throw new RuntimeException(badBytecode); } }
@Override public ResolvedParameterDeclaration getParam(int i) { try { boolean variadic = false; if ((ctMethod.getModifiers() & javassist.Modifier.VARARGS) > 0) { variadic = i == (ctMethod.getParameterTypes().length - 1); } Optional<String> paramName = JavassistUtils.extractParameterName(ctMethod, i); if (ctMethod.getGenericSignature() != null) { SignatureAttribute.MethodSignature methodSignature = SignatureAttribute.toMethodSignature(ctMethod.getGenericSignature()); SignatureAttribute.Type signatureType = methodSignature.getParameterTypes()[i]; return new JavassistParameterDeclaration(JavassistUtils.signatureTypeToType(signatureType, typeSolver, this), typeSolver, variadic, paramName.orElse(null)); } else { return new JavassistParameterDeclaration(ctMethod.getParameterTypes()[i], typeSolver, variadic, paramName.orElse(null)); } } catch (NotFoundException | BadBytecode e) { throw new RuntimeException(e); } }
if (sig != null && sig.getParameterTypes().length == key.getParams().length) SignatureAttribute.Type[] types = sig.getParameterTypes(); TypeInfo[] parameterTypes = new TypeInfo[types.length]; for (int i = 0 ; i < types.length ; i++)
protected void generateParameters() { if (parameters != null) return; try { CtClass[] ctParameters = ctBehavior.getParameterTypes(); MethodSignature sig = getMethodSignature(); if (sig != null && sig.getParameterTypes().length == ctParameters.length) { parameterTypes = JavassistHelper.createParameterTypes(sig, typeInfo); } else { CtClass[] types = ctParameters; parameterTypes = new TypeInfo[types.length]; for (int i = 0; i < types.length; ++i) parameterTypes[i] = typeInfo.getFactory().getTypeInfo(types[i]); } ParameterInfo[] parameters = new ParameterInfo[parameterTypes.length]; for (int i = 0; i < parameterTypes.length; ++i) parameters[i] = new JavassistParameterInfo(annotationHelper, this, i, parameterTypes[i]); this.parameters = parameters; } catch (NotFoundException e) { throw JavassistTypeInfoFactoryImpl.raiseClassNotFound("for parameters of constructor", e); } }
@Override public ResolvedParameterDeclaration getParam(int i) { try { boolean variadic = false; if ((ctConstructor.getModifiers() & javassist.Modifier.VARARGS) > 0) { variadic = i == (ctConstructor.getParameterTypes().length - 1); } if (ctConstructor.getGenericSignature() != null) { SignatureAttribute.MethodSignature methodSignature = SignatureAttribute.toMethodSignature(ctConstructor.getGenericSignature()); SignatureAttribute.Type signatureType = methodSignature.getParameterTypes()[i]; return new JavassistParameterDeclaration(JavassistUtils.signatureTypeToType(signatureType, typeSolver, this), typeSolver, variadic); } else { return new JavassistParameterDeclaration(ctConstructor.getParameterTypes()[i], typeSolver, variadic); } } catch (NotFoundException e) { throw new RuntimeException(e); } catch (BadBytecode badBytecode) { throw new RuntimeException(badBytecode); } }
@Override public ResolvedParameterDeclaration getParam(int i) { try { boolean variadic = false; if ((ctMethod.getModifiers() & javassist.Modifier.VARARGS) > 0) { variadic = i == (ctMethod.getParameterTypes().length - 1); } if (ctMethod.getGenericSignature() != null) { SignatureAttribute.MethodSignature methodSignature = SignatureAttribute.toMethodSignature(ctMethod.getGenericSignature()); SignatureAttribute.Type signatureType = methodSignature.getParameterTypes()[i]; return new JavassistParameterDeclaration(JavassistUtils.signatureTypeToType(signatureType, typeSolver, this), typeSolver, variadic); } else { return new JavassistParameterDeclaration(ctMethod.getParameterTypes()[i], typeSolver, variadic); } } catch (NotFoundException e) { throw new RuntimeException(e); } catch (BadBytecode badBytecode) { throw new RuntimeException(badBytecode); } }
@Override public ResolvedParameterDeclaration getParam(int i) { try { boolean variadic = false; if ((ctConstructor.getModifiers() & javassist.Modifier.VARARGS) > 0) { variadic = i == (ctConstructor.getParameterTypes().length - 1); } if (ctConstructor.getGenericSignature() != null) { SignatureAttribute.MethodSignature methodSignature = SignatureAttribute.toMethodSignature(ctConstructor.getGenericSignature()); SignatureAttribute.Type signatureType = methodSignature.getParameterTypes()[i]; return new JavassistParameterDeclaration(JavassistUtils.signatureTypeToType(signatureType, typeSolver, this), typeSolver, variadic); } else { return new JavassistParameterDeclaration(ctConstructor.getParameterTypes()[i], typeSolver, variadic); } } catch (NotFoundException e) { throw new RuntimeException(e); } catch (BadBytecode badBytecode) { throw new RuntimeException(badBytecode); } }
@Override public ResolvedParameterDeclaration getParam(int i) { try { boolean variadic = false; if ((ctMethod.getModifiers() & javassist.Modifier.VARARGS) > 0) { variadic = i == (ctMethod.getParameterTypes().length - 1); } if (ctMethod.getGenericSignature() != null) { SignatureAttribute.MethodSignature methodSignature = SignatureAttribute.toMethodSignature(ctMethod.getGenericSignature()); SignatureAttribute.Type signatureType = methodSignature.getParameterTypes()[i]; return new JavassistParameterDeclaration(JavassistUtils.signatureTypeToType(signatureType, typeSolver, this), typeSolver, variadic); } else { return new JavassistParameterDeclaration(ctMethod.getParameterTypes()[i], typeSolver, variadic); } } catch (NotFoundException e) { throw new RuntimeException(e); } catch (BadBytecode badBytecode) { throw new RuntimeException(badBytecode); } }
/** * Creates the generic parameter types for a constructor or method * * @param sig the method/constructor signature * @param typeInfo the javassist type info * @return the parameter types */ public static TypeInfo[] createParameterTypes(final MethodSignature sig, final JavassistClassInfo typeInfo) { SignatureAttribute.Type[] types = sig.getParameterTypes(); TypeInfo[] parameterTypes = new TypeInfo[types.length]; for (int i = 0 ; i < types.length ; i++) parameterTypes[i] = typeInfo.getFactory().getTypeInfo(typeInfo.getClassLoaderInternal(), types[i], JavassistTypeVariableSpy.createForBehavior(typeInfo.getClassSignature(), sig)); return parameterTypes; }
/** * Creates the generic parameter types for a constructor or method * * @param sig the method/constructor signature * @param typeInfo the javassist type info * @return the parameter types */ public static TypeInfo[] createParameterTypes(final MethodSignature sig, final BytecodeClassInfo typeInfo) { SignatureAttribute.Type[] types = sig.getParameterTypes(); TypeInfo[] parameterTypes = new TypeInfo[types.length]; for (int i = 0 ; i < types.length ; i++) parameterTypes[i] = typeInfo.getFactory().getTypeInfo(typeInfo.getClassLoaderInternal(), types[i], BytecodeTypeVariableSpy.createForBehavior(typeInfo.getClassSignature(), sig)); return parameterTypes; }
private String transformMethodSignature(SignatureAttribute signatureAttribute) throws BadBytecode { String originalSig = signatureAttribute.getSignature(); SignatureAttribute.MethodSignature methodSignature = SignatureAttribute.toMethodSignature(originalSig); SignatureAttribute.ClassType returnType = new SignatureAttribute.ClassType("javax.ws.rs.core.Response"); SignatureAttribute.MethodSignature replacementSignature = new SignatureAttribute.MethodSignature( methodSignature.getTypeParameters(), methodSignature.getParameterTypes(), returnType, methodSignature.getExceptionTypes()); return replacementSignature.encode(); } }