/** * Returns <code>true</code> if method has a return type. */ default boolean hasReturnValue() { return getReturnType().getOpcode() != AsmUtil.TYPE_VOID; }
/** * Returns <code>true</code> if method's return type is <code>void</code>. */ default boolean hasNoReturnValue() { return getReturnType().getOpcode() == AsmUtil.TYPE_VOID; }
/** * Visits replacement code for {@link ProxyTarget#returnType()}. */ public static void returnType(final MethodVisitor mv, final MethodInfo methodInfo) { ProxettaAsmUtil.loadClass(mv, methodInfo.getReturnType().getOpcode(), methodInfo.getReturnType().getName()); }
public static void castToReturnType(final MethodVisitor mv, final MethodInfo methodInfo) { final String returnType; char returnOpcodeType = methodInfo.getReturnType().getOpcode(); break; case '[': returnType = methodInfo.getReturnType().getRawName(); break; default: String rtname = methodInfo.getReturnType().getRawName(); returnType = rtname.length() == 0 ? AsmUtil.typeToSignature(methodInfo.getReturnType().getType()) : AsmUtil.typedesc2ClassName(rtname); break;
/** * Returns {@link WrapperProxetta} used for building loggable prepared statements. * Initializes proxetta when called for the first time. */ protected BaseLoggableFactory(final Class<T> targetClass) { this.targetClass = targetClass; this.proxetta = Proxetta.wrapperProxetta().withAspect(ProxyAspect.of(LoggableAdvice.class, methodInfo -> { int argumentsCount = methodInfo.getArgumentsCount(); char argumentType = 0; if (argumentsCount >= 1) { argumentType = methodInfo.getArgument(1).getOpcode(); } return methodInfo.getReturnType().getOpcode() == 'V' && // void-returning method argumentType == 'I' && // first argument type methodInfo.isPublicMethod() && methodInfo.getMethodName().startsWith("set") && // set* (argumentsCount == 2 || argumentsCount == 3); // number of arguments })); }
@Test void testMethodSignature1() throws IOException { MethodInfo mi = getMethodSignatureForSingleMethod(M1.class); assertEquals(0, mi.getArgumentsCount()); assertEquals(CLASS_SIGNATURE + "$M1", mi.getClassname()); assertEquals("macka#()V", mi.getCleanSignature()); assertEquals("()void", mi.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M1", mi.getDeclaredClassName()); assertEquals("()V", mi.getDescription()); assertNull(mi.getExceptions()); assertEquals("macka", mi.getMethodName()); assertEquals('V', mi.getReturnType().getOpcode()); assertEquals("void", mi.getReturnType().getType()); assertEquals("V", mi.getReturnType().getName()); assertEquals("V", mi.getReturnType().getRawName()); }
switch (methodInfo.getReturnType().getOpcode()) { case 'V': mv.visitInsn(ACONST_NULL);
@Test void testMethodSignature11() throws IOException { MethodInfo msv = getMethodSignatureForSingleMethod(M11.class); assertEquals(1, msv.getArgumentsCount()); assertEquals("java.util.Set<java.util.List<java.util.Map<java.lang.String, java.lang.Object>>>", msv.getArgument(1).getType()); assertEquals("Ljava/util/Set;", msv.getArgument(1).getName()); assertEquals("Ljava/util/Set;", msv.getArgument(1).getRawName()); assertEquals('L', msv.getArgument(1).getOpcode()); assertEquals(CLASS_SIGNATURE + "$M11", msv.getClassname()); assertEquals("macka#(Ljava/util/Set;)Ljava/util/List;", msv.getCleanSignature()); assertEquals("(java.util.Set<java.util.List<java.util.Map<java.lang.String, java.lang.Object>>>)java.util.List<java.util.Map<java.lang.String, java.lang.Object>>", msv.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M11", msv.getDeclaredClassName()); assertEquals("(Ljava/util/Set;)Ljava/util/List;", msv.getDescription()); assertNull(msv.getExceptions()); assertEquals("macka", msv.getMethodName()); assertEquals('L', msv.getReturnType().getOpcode()); assertEquals("java.util.List<java.util.Map<java.lang.String, java.lang.Object>>", msv.getReturnType().getType()); assertEquals("Ljava/util/List;", msv.getReturnType().getName()); assertEquals("Ljava/util/List;", msv.getReturnType().getRawName()); }
@Test void testMethodSignature12() throws IOException { MethodInfo msv = getMethodSignatureForSingleMethod(M12.class); assertEquals(1, msv.getArgumentsCount()); assertEquals(CLASS_NAME + "$Tupel<java.util.List<java.lang.Integer>, java.lang.Integer>", msv.getArgument(1).getType()); assertEquals(L_CLASS_SIGNATURE + "$Tupel;", msv.getArgument(1).getName()); assertEquals(L_CLASS_SIGNATURE + "$Tupel;", msv.getArgument(1).getRawName()); assertEquals('L', msv.getArgument(1).getOpcode()); assertEquals(CLASS_SIGNATURE + "$M12", msv.getClassname()); assertEquals("macka#(" + L_CLASS_SIGNATURE + "$Tupel;)Ljava/util/Map;", msv.getCleanSignature()); assertEquals("(" + CLASS_NAME + "$Tupel<java.util.List<java.lang.Integer>, java.lang.Integer>)java.util.Map<java.util.Map<java.util.Set<java.lang.Integer>, java.lang.Long>, java.lang.Byte>", msv.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M12", msv.getDeclaredClassName()); assertEquals("(" + L_CLASS_SIGNATURE + "$Tupel;)Ljava/util/Map;", msv.getDescription()); assertNull(msv.getExceptions()); assertEquals("macka", msv.getMethodName()); assertEquals('L', msv.getReturnType().getOpcode()); assertEquals("java.util.Map<java.util.Map<java.util.Set<java.lang.Integer>, java.lang.Long>, java.lang.Byte>", msv.getReturnType().getType()); assertEquals("Ljava/util/Map;", msv.getReturnType().getName()); assertEquals("Ljava/util/Map;", msv.getReturnType().getRawName()); }
assertEquals("(java.lang.String)java.lang.String", mi.getDeclaration()); assertEquals("(Ljava/lang/String;)Ljava/lang/String;", mi.getDescription()); assertEquals("java.lang.String", mi.getReturnType().getType()); assertEquals("Ljava/lang/String;", mi.getReturnType().getName());
@Test void testMethodSignature4() throws IOException { MethodInfo msv = getMethodSignatureForSingleMethod(M4.class); assertEquals(2, msv.getArgumentsCount()); assertEquals("java.lang.Long[]", msv.getArgument(1).getType()); assertEquals("[L" + SIGNATURE_JAVA_LANG_LONG + ";", msv.getArgument(1).getName()); assertEquals("[L" + SIGNATURE_JAVA_LANG_LONG + ";", msv.getArgument(1).getRawName()); assertEquals('[', msv.getArgument(1).getOpcode()); assertEquals("double[]", msv.getArgument(2).getType()); assertEquals("[D", msv.getArgument(2).getName()); assertEquals("[D", msv.getArgument(2).getRawName()); assertEquals('[', msv.getArgument(2).getOpcode()); assertEquals(CLASS_SIGNATURE + "$M4", msv.getClassname()); assertEquals("macka#([L" + SIGNATURE_JAVA_LANG_LONG + ";[D)[" + L_CLASS_SIGNATURE + "$M4;", msv.getCleanSignature()); assertEquals("(java.lang.Long[], double[])jodd.proxetta.MethodSignatureVisitorTest$M4[]", msv.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M4", msv.getDeclaredClassName()); assertEquals("([Ljava/lang/Long;[D)[Ljodd/proxetta/MethodSignatureVisitorTest$M4;", msv.getDescription()); assertNull(msv.getExceptions()); assertEquals("macka", msv.getMethodName()); assertEquals('[', msv.getReturnType().getOpcode()); assertEquals("jodd.proxetta.MethodSignatureVisitorTest$M4[]", msv.getReturnType().getType()); assertEquals("[Ljodd/proxetta/MethodSignatureVisitorTest$M4;", msv.getReturnType().getName()); assertEquals("[Ljodd/proxetta/MethodSignatureVisitorTest$M4;", msv.getReturnType().getRawName()); }
@Test void testMethodSignature5() throws IOException { MethodInfo msv = getMethodSignatureForSingleMethod(M5.class); assertEquals(2, msv.getArgumentsCount()); assertEquals("java.util.Set<Gen>", msv.getArgument(1).getType()); assertEquals("Ljava/util/Set;", msv.getArgument(1).getName()); assertEquals("Ljava/util/Set;", msv.getArgument(1).getRawName()); assertEquals('L', msv.getArgument(1).getOpcode()); assertEquals("T[]", msv.getArgument(2).getType()); assertEquals("[T", msv.getArgument(2).getName()); assertEquals("[Ljava/lang/Object;", msv.getArgument(2).getRawName()); assertEquals('[', msv.getArgument(2).getOpcode()); assertEquals(CLASS_SIGNATURE + "$M5", msv.getClassname()); assertEquals("macka#(Ljava/util/Set;[Ljava/lang/Object;)Ljava/util/List;", msv.getCleanSignature()); assertEquals("(java.util.Set<Gen>, T[])java.util.List<Gen>", msv.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M5", msv.getDeclaredClassName()); assertEquals("(Ljava/util/Set;[Ljava/lang/Object;)Ljava/util/List;", msv.getDescription()); assertNull(msv.getExceptions()); assertEquals("macka", msv.getMethodName()); assertEquals('L', msv.getReturnType().getOpcode()); assertEquals("java.util.List<Gen>", msv.getReturnType().getType()); assertEquals("Ljava/util/List;", msv.getReturnType().getName()); assertEquals("Ljava/util/List;", msv.getReturnType().getRawName()); }
@Test void testMethodSignature2() throws IOException { MethodInfo mi = getMethodSignatureForSingleMethod(M2.class); assertEquals(2, mi.getArgumentsCount()); assertEquals("long", mi.getArgument(1).getType()); assertEquals("J", mi.getArgument(1).getName()); assertEquals("J", mi.getArgument(1).getRawName()); assertEquals('J', mi.getArgument(1).getOpcode()); assertEquals("double", mi.getArgument(2).getType()); assertEquals("D", mi.getArgument(2).getName()); assertEquals("D", mi.getArgument(2).getRawName()); assertEquals('D', mi.getArgument(2).getOpcode()); assertEquals(CLASS_SIGNATURE + "$M2", mi.getClassname()); assertEquals("macka#(JD)I", mi.getCleanSignature()); assertEquals("(long, double)int", mi.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M2", mi.getDeclaredClassName()); assertEquals("(JD)I", mi.getDescription()); assertNull(mi.getExceptions()); assertEquals("macka", mi.getMethodName()); assertEquals('I', mi.getReturnType().getOpcode()); assertEquals("int", mi.getReturnType().getType()); assertEquals("I", mi.getReturnType().getName()); assertEquals("I", mi.getReturnType().getRawName()); }
@Test void testMethodSignature3() throws IOException { MethodInfo msv = getMethodSignatureForSingleMethod(M3.class); assertEquals(2, msv.getArgumentsCount()); assertEquals("java.lang.Long", msv.getArgument(1).getType()); assertEquals("L" + SIGNATURE_JAVA_LANG_LONG + ";", msv.getArgument(1).getName()); assertEquals("L" + SIGNATURE_JAVA_LANG_LONG + ";", msv.getArgument(1).getRawName()); assertEquals('L', msv.getArgument(1).getOpcode()); assertEquals("java.lang.Double", msv.getArgument(2).getType()); assertEquals("L" + SIGNATURE_JAVA_LANG_DOUBLE + ";", msv.getArgument(2).getName()); assertEquals("L" + SIGNATURE_JAVA_LANG_DOUBLE + ";", msv.getArgument(2).getRawName()); assertEquals('L', msv.getArgument(2).getOpcode()); assertEquals(CLASS_SIGNATURE + "$M3", msv.getClassname()); assertEquals("macka#(L" + SIGNATURE_JAVA_LANG_LONG + ";L" + SIGNATURE_JAVA_LANG_DOUBLE + ";)L" + SIGNATURE_JAVA_LANG_INTEGER + ";", msv.getCleanSignature()); assertEquals("(java.lang.Long, java.lang.Double)java.lang.Integer", msv.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M3", msv.getDeclaredClassName()); assertEquals("(Ljava/lang/Long;Ljava/lang/Double;)Ljava/lang/Integer;", msv.getDescription()); assertNull(msv.getExceptions()); assertEquals("macka", msv.getMethodName()); assertEquals('L', msv.getReturnType().getOpcode()); assertEquals("java.lang.Integer", msv.getReturnType().getType()); assertEquals("Ljava/lang/Integer;", msv.getReturnType().getName()); assertEquals("Ljava/lang/Integer;", msv.getReturnType().getRawName()); }
@Test void testMethodSignature6() throws IOException { MethodInfo msv = getMethodSignatureForSingleMethod(M6.class); assertEquals(2, msv.getArgumentsCount()); assertEquals("java.util.Set<Gen>", msv.getArgument(1).getType()); assertEquals("Ljava/util/Set;", msv.getArgument(1).getName()); assertEquals("Ljava/util/Set;", msv.getArgument(1).getRawName()); assertEquals('L', msv.getArgument(1).getOpcode()); assertEquals("Tuta[]", msv.getArgument(2).getType()); assertEquals("[Tuta", msv.getArgument(2).getName()); assertEquals("[Ljava/lang/Object;", msv.getArgument(2).getRawName()); assertEquals('[', msv.getArgument(2).getOpcode()); assertEquals(CLASS_SIGNATURE + "$M6", msv.getClassname()); assertEquals("macka#(Ljava/util/Set;[Ljava/lang/Object;)[Ljava/lang/Object;", msv.getCleanSignature()); assertEquals("(java.util.Set<Gen>, Tuta[])Gen[]", msv.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M6", msv.getDeclaredClassName()); assertEquals("(Ljava/util/Set;[Ljava/lang/Object;)[Ljava/lang/Object;", msv.getDescription()); assertNull(msv.getExceptions()); assertEquals("macka", msv.getMethodName()); assertEquals('[', msv.getReturnType().getOpcode()); assertEquals("Gen[]", msv.getReturnType().getType()); assertEquals("[Gen", msv.getReturnType().getName()); assertEquals("[Ljava/lang/Object;", msv.getReturnType().getRawName()); }
@Test void testMethodSignature7() throws IOException { MethodInfo msv = getMethodSignatureForSingleMethod(M7.class); assertEquals(2, msv.getArgumentsCount()); assertEquals("java.util.Set<Gen>", msv.getArgument(1).getType()); assertEquals("Ljava/util/Set;", msv.getArgument(1).getName()); assertEquals("Ljava/util/Set;", msv.getArgument(1).getRawName()); assertEquals('L', msv.getArgument(1).getOpcode()); assertEquals("T[]", msv.getArgument(2).getType()); assertEquals("[T", msv.getArgument(2).getName()); assertEquals("[Ljava/lang/Object;", msv.getArgument(2).getRawName()); assertEquals('[', msv.getArgument(2).getOpcode()); assertEquals(CLASS_SIGNATURE + "$M7", msv.getClassname()); assertEquals("macka#(Ljava/util/Set;[Ljava/lang/Object;)[Ljava/lang/Object;", msv.getCleanSignature()); assertEquals("<T>(java.util.Set<Gen>, T[])T[]", msv.getDeclaration()); assertEquals(CLASS_SIGNATURE + "$M7", msv.getDeclaredClassName()); assertEquals("(Ljava/util/Set;[Ljava/lang/Object;)[Ljava/lang/Object;", msv.getDescription()); assertNull(msv.getExceptions()); assertEquals("macka", msv.getMethodName()); assertEquals('[', msv.getReturnType().getOpcode()); assertEquals("T[]", msv.getReturnType().getType()); assertEquals("[T", msv.getReturnType().getName()); assertEquals("[Ljava/lang/Object;", msv.getReturnType().getRawName()); }
switch (methodInfo.getReturnType().getOpcode()) { case 'V': if (isLast) {
/** * Returns <code>true</code> if method has a return type. */ default boolean hasReturnValue() { return getReturnType().getOpcode() != AsmUtil.TYPE_VOID; }
@Override public boolean apply(MethodInfo methodInfo) { if (methodInfo.getReturnType().equals(String.class.getName())) { return false; } return super.apply(methodInfo); } });
/** * Returns <code>true</code> if method's return type is <code>void</code>. */ default boolean hasNoReturnValue() { return getReturnType().getOpcode() == AsmUtil.TYPE_VOID; }