package net.bytebuddy.asm; import net.bytebuddy.ByteBuddy; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.util.Arrays; import java.util.Collection; import static net.bytebuddy.matcher.ElementMatchers.named; @RunWith(Parameterized.class) public class AdviceIllegalTypeTest { private static final String FOO = "foo"; private static final byte VALUE = 42; private static final boolean BOOLEAN = true; @Parameterized.Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {BooleanAdvice.class}, {ByteAdvice.class}, {ShortAdvice.class}, {CharacterAdvice.class}, {IntegerAdvice.class}, {LongAdvice.class}, {FloatAdvice.class}, {DoubleAdvice.class}, {ReferenceAdvice.class} }); } private final Class<?> type; public AdviceIllegalTypeTest(Class<?> type) { this.type = type; } @Test(expected = IllegalStateException.class) public void testIllegalAssignment() throws Exception { new ByteBuddy() .redefine(type) .visit(Advice.to(type).on(named(FOO))) .make(); } public static class BooleanAdvice { void foo(boolean value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) boolean value) { value = BOOLEAN; } } public static class ByteAdvice { void foo(byte value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) byte value) { value = VALUE; } } public static class ShortAdvice { void foo(short value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) short value) { value = VALUE; } } public static class CharacterAdvice { void foo(char value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) char value) { value = VALUE; } } public static class IntegerAdvice { void foo(int value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) int value) { value = VALUE; } } public static class LongAdvice { void foo(long value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) long value) { value = VALUE; } } public static class FloatAdvice { void foo(float value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) float value) { value = VALUE; } } public static class DoubleAdvice { void foo(double value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) double value) { value = VALUE; } } public static class ReferenceAdvice { void foo(Object value) { /* empty */ } @Advice.OnMethodEnter public static void enter(@Advice.Argument(0) Object value) { value = FOO; } } }