From 4123b83cc07cfaf7d12505b138ccddb066a2363b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 14 Jul 2016 14:50:44 +0100 Subject: Throw exception in default case --- .../zwobble/couscous/ast/visitors/DynamicNodeVisitor.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeVisitor.java b/src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeVisitor.java index 30abe87..b233d39 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeVisitor.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeVisitor.java @@ -7,8 +7,7 @@ import net.bytebuddy.description.modifier.Visibility; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.scaffold.InstrumentedType; import net.bytebuddy.implementation.Implementation; -import net.bytebuddy.implementation.bytecode.ByteCodeAppender; -import net.bytebuddy.implementation.bytecode.StackManipulation; +import net.bytebuddy.implementation.bytecode.*; import net.bytebuddy.implementation.bytecode.assign.TypeCasting; import net.bytebuddy.implementation.bytecode.member.FieldAccess; import net.bytebuddy.implementation.bytecode.member.MethodInvocation; @@ -145,8 +144,15 @@ public class DynamicNodeVisitor { MethodVariableAccess.REFERENCE.loadOffset(1), MethodInvocation.invoke(typeMethod), new StackManipulationSwitch( - // TODO: raise exception in default case - MethodReturn.VOID, + new StackManipulation.Compound( + TypeCreation.of(new TypeDescription.ForLoadedType(UnsupportedOperationException.class)), + Duplication.SINGLE, + MethodInvocation.invoke(new TypeDescription.ForLoadedType(UnsupportedOperationException.class) + .getDeclaredMethods() + .filter(ElementMatchers.isDefaultConstructor()) + .getOnly()), + Throw.INSTANCE + ), eagerMap(visitMethods, method -> { Class nodeClass = method.getParameterTypes()[0]; return StackManipulationSwitch.switchCase( -- cgit v1.2.3