From 8a95665b640f6ea702b41a788fbae8222bf230fa Mon Sep 17 00:00:00 2001 From: paulk Date: Sat, 18 Feb 2017 16:17:49 +1000 Subject: [PATCH] GROOVY-7402: Compiler NPE Related To AST Transformations And Traits (closes #499) --- .../groovy/transform/ImmutableASTTransformation.java | 11 ++++++++--- .../transform/trait/TraitASTTransformation.java | 8 +++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/org/codehaus/groovy/transform/ImmutableASTTransformation.java b/src/main/org/codehaus/groovy/transform/ImmutableASTTransformation.java index 4378f0b33e5..65bfa40d45f 100644 --- a/src/main/org/codehaus/groovy/transform/ImmutableASTTransformation.java +++ b/src/main/org/codehaus/groovy/transform/ImmutableASTTransformation.java @@ -271,9 +271,14 @@ private List getKnownImmutables(AnnotationNode node) { return immutables; } - private static void makeClassFinal(ClassNode cNode) { - if ((cNode.getModifiers() & ACC_FINAL) == 0) { - cNode.setModifiers(cNode.getModifiers() | ACC_FINAL); + private void makeClassFinal(ClassNode cNode) { + int modifiers = cNode.getModifiers(); + if ((modifiers & ACC_FINAL) == 0) { + if ((modifiers & (ACC_ABSTRACT | ACC_SYNTHETIC)) == (ACC_ABSTRACT | ACC_SYNTHETIC)) { + addError("Error during " + MY_TYPE_NAME + " processing: annotation found on inappropriate class " + cNode.getName(), cNode); + return; + } + cNode.setModifiers(modifiers | ACC_FINAL); } } diff --git a/src/main/org/codehaus/groovy/transform/trait/TraitASTTransformation.java b/src/main/org/codehaus/groovy/transform/trait/TraitASTTransformation.java index f287284801e..5ff3bb78904 100644 --- a/src/main/org/codehaus/groovy/transform/trait/TraitASTTransformation.java +++ b/src/main/org/codehaus/groovy/transform/trait/TraitASTTransformation.java @@ -576,9 +576,11 @@ protected SourceUnit getSourceUnit() { @Override public Expression transform(final Expression exp) { - Expression replacement = exp.getNodeMetaData(TraitASTTransformation.POST_TYPECHECKING_REPLACEMENT); - if (replacement!=null) { - return replacement; + if (exp != null) { + Expression replacement = exp.getNodeMetaData(TraitASTTransformation.POST_TYPECHECKING_REPLACEMENT); + if (replacement!=null) { + return replacement; + } } return super.transform(exp); }