GROOVY-6373: 'log' field introduced via @Slf4j not accessible in inner class of @CompileStatic class
diff --git a/src/main/org/codehaus/groovy/transform/LogASTTransformation.java b/src/main/org/codehaus/groovy/transform/LogASTTransformation.java
index bc4b51d..a73434e 100644
--- a/src/main/org/codehaus/groovy/transform/LogASTTransformation.java
+++ b/src/main/org/codehaus/groovy/transform/LogASTTransformation.java
@@ -156,14 +156,8 @@
         };
         transformer.visitClass(classNode);
 
-        // TODO can we replace GROOOVY-6373 fix with something simpler? breaks tests ATM
-        // new VariableScopeVisitor(sourceUnit, true).visitClass(classNode);
-        // GROOVY-6373: added log field is already a field node in inner classes by now
-        VariableScopeVisitor scopeVisitor = new VariableScopeVisitor(sourceUnit, true);
-        Iterator<InnerClassNode> innerClasses = classNode.getInnerClasses();
-        while (innerClasses.hasNext()) {
-            scopeVisitor.visitClass(innerClasses.next());
-        }
+        // GROOVY-6373: references to 'log' field are normally already FieldNodes by now, so revisit scoping
+        new VariableScopeVisitor(sourceUnit, true).visitClass(classNode);
     }
 
     private String lookupLogFieldName(AnnotationNode logAnnotation) {
diff --git a/src/test/groovy/util/logging/CommonsTest.groovy b/src/test/groovy/util/logging/CommonsTest.groovy
index abbbb09..a211b89 100644
--- a/src/test/groovy/util/logging/CommonsTest.groovy
+++ b/src/test/groovy/util/logging/CommonsTest.groovy
@@ -152,13 +152,20 @@
             @groovy.util.logging.Commons
             class MyClass {
                 boolean traceCalled = false
-                MyClass() {
-                    log = new LogDecorator().wrap(log) as org.apache.commons.logging.Log
-                }
 
                 def loggingMethod() {
+                    overrideLog()
                     log.trace (traceCalled = true)
                 }
+
+                def overrideLog() {
+                    def field = MyClass.getDeclaredField('log')
+                    field.accessible = true
+                    def modifiersField = java.lang.reflect.Field.getDeclaredField("modifiers")
+                    modifiersField.accessible = true
+                    modifiersField.setInt(field, field.modifiers & ~java.lang.reflect.Modifier.FINAL)
+                    field.set(null, new LogDecorator().wrap(log) as org.apache.commons.logging.Log)
+                }
             }
             def o = new MyClass()
             o.loggingMethod()