Class LexicalPreservingPrinter

java.lang.Object
com.github.javaparser.printer.lexicalpreservation.LexicalPreservingPrinter

public class LexicalPreservingPrinter extends Object
The LexicalPreservingPrinter is responsible for maintaining the original formatting and layout of Java source code when the Abstract Syntax Tree (AST) is modified. This printer works by: 1. Storing the original textual representation alongside the AST nodes 2. Tracking changes made to the AST through a sophisticated change tracking system 3. Applying only the necessary modifications while preserving unchanged portions 4. Maintaining original spacing, comments, and formatting wherever possible The lexical preservation is essential for code refactoring tools that need to modify code while maintaining its original style and readability. Usage Pattern: 1. Setup lexical preservation on a CompilationUnit before making changes 2. Modify the AST as needed 3. Use this printer to generate the modified source code with preserved formatting
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final DataKey<com.github.javaparser.printer.lexicalpreservation.NodeText>
    The nodetext for a node is stored in the node's data field.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
     
    static String
    print(Node node)
    Prints the given node to a string while preserving the original formatting where possible and applying changes where the AST has been modified.
    static <N extends Node>
    N
    setup(N node)
    Initializes lexical preservation for the given CompilationUnit.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • NODE_TEXT_DATA

      public static final DataKey<com.github.javaparser.printer.lexicalpreservation.NodeText> NODE_TEXT_DATA
      The nodetext for a node is stored in the node's data field. This is the key to set and retrieve it.
  • Constructor Details

    • LexicalPreservingPrinter

      public LexicalPreservingPrinter()
  • Method Details

    • setup

      public static <N extends Node> N setup(N node)
      Initializes lexical preservation for the given CompilationUnit. This method must be called before making any modifications to the AST if you want to preserve the original formatting. The setup process involves: 1. Parsing the original source code into tokens 2. Creating NodeText representations for each AST node 3. Establishing relationships between tokens and nodes 4. Setting up change observers to track future modifications
      Parameters:
      cu - The CompilationUnit to setup for lexical preservation
      Returns:
      The same CompilationUnit with lexical preservation enabled
    • isAvailableOn

      public static boolean isAvailableOn(Node node)
    • print

      public static String print(Node node)
      Prints the given node to a string while preserving the original formatting where possible and applying changes where the AST has been modified. This method analyzes the changes made to the AST since lexical preservation was setup and generates output that: - Preserves original formatting for unchanged portions - Applies appropriate formatting for new or modified content - Maintains consistency with the original code style
      Parameters:
      node - The node to print (typically a CompilationUnit)
      Returns:
      A string representation of the node with preserved formatting