code: public void visitVariableExpression(VariableExpression expression) {
          String variableName = expression.getName();
  
          //-----------------------------------------------------------------------
          // SPECIAL CASES
  
          // "this" for static methods is the Class instance
          ClassNode classNode = controller.getClassNode();
          //if (controller.isInClosure()) classNode = controller.getOutermostClass();
  
          if (variableName.equals("this")) {
              if (controller.isStaticMethod() || (!controller.getCompileStack().isImplicitThis() && controller.isStaticContext())) {
                  if (controller.isInClosure()) classNode = controller.getOutermostClass();
                  visitClassExpression(new ClassExpression(classNode));
              } else {
                  loadThis(expression);
              }
              return;
          }
  
          // "super" also requires special handling
          if (variableName.equals("super")) {
              if (controller.isStaticMethod()) {
                  visitClassExpression(new ClassExpression(classNode.getSuperClass()));
              } else {
                  loadThis(expression);
              }
              return;
          }
  
          BytecodeVariable variable = controller.getCompileStack().getVariable(variableName, false);
          if (variable == null) {
              processClassVariable(variableName);
          } else {
              controller.getOperandStack().loadOrStoreVariable(variable, expression.isUseReferenceDirectly());
          }
          if (!controller.getCompileStack().isLHS()) controller.getAssertionWriter().record(expression);
      }
docs: Visits a bare (unqualified) variable expression.