aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-14 14:50:44 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-14 14:50:44 +0100
commit4123b83cc07cfaf7d12505b138ccddb066a2363b (patch)
treec8a3acde294914e25852ac4a39101aeadf336be7 /src
parent1a2489be369ccd16e9e290ac486f779af8b4bbc5 (diff)
Throw exception in default case
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/DynamicNodeVisitor.java14
1 files changed, 10 insertions, 4 deletions
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<T> {
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(