From fbb972081872ca7cc82f772746dbfb558bfe6337 Mon Sep 17 00:00:00 2001 From: Mumfrey Date: Wed, 29 Apr 2015 11:59:16 +0100 Subject: [PATCH] Add exclusion for synthetic static fields in pre-processor, closes #43 --- .../asm/mixin/transformer/MixinPreProcessor.java | 4 +++- .../spongepowered/asm/mixin/transformer/MixinTransformer.java | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/spongepowered/asm/mixin/transformer/MixinPreProcessor.java b/src/main/java/org/spongepowered/asm/mixin/transformer/MixinPreProcessor.java index 9cf94146..ad95a540 100644 --- a/src/main/java/org/spongepowered/asm/mixin/transformer/MixinPreProcessor.java +++ b/src/main/java/org/spongepowered/asm/mixin/transformer/MixinPreProcessor.java @@ -248,7 +248,9 @@ class MixinPreProcessor { private boolean validateField(MixinTargetContext context, FieldNode field, AnnotationNode shadow) { // Public static fields will fall foul of early static binding in java, including them in a mixin is an error condition - if (MixinApplicator.hasFlag(field, Opcodes.ACC_STATIC) && !MixinApplicator.hasFlag(field, Opcodes.ACC_PRIVATE)) { + if (MixinApplicator.hasFlag(field, Opcodes.ACC_STATIC) + && !MixinApplicator.hasFlag(field, Opcodes.ACC_PRIVATE) + && !MixinApplicator.hasFlag(field, Opcodes.ACC_SYNTHETIC)) { throw new InvalidMixinException(context, String.format("Mixin classes cannot contain visible static methods or fields, found %s", field.name)); } diff --git a/src/main/java/org/spongepowered/asm/mixin/transformer/MixinTransformer.java b/src/main/java/org/spongepowered/asm/mixin/transformer/MixinTransformer.java index c45342f4..35000a67 100644 --- a/src/main/java/org/spongepowered/asm/mixin/transformer/MixinTransformer.java +++ b/src/main/java/org/spongepowered/asm/mixin/transformer/MixinTransformer.java @@ -568,6 +568,10 @@ public class MixinTransformer extends TreeTransformer { MixinConfig config = mixin.getParent(); ErrorAction action = config.isRequired() ? ErrorAction.ERROR : ErrorAction.WARN; + if (MixinEnvironment.getCurrentEnvironment().getOption(Option.DEBUG_VERBOSE)) { + th.printStackTrace(); + } + for (IMixinErrorHandler handler : this.getErrorHandlers(mixin.getPhase())) { ErrorAction newAction = handler.onError(targetClassName, th, mixin, action); if (newAction != null) {