CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-github-javaparser--javaparser-core

A comprehensive Java parsing library providing complete support for parsing Java source code from Java 1.0 through Java 21 with advanced analysis functionalities.

Pending
Overview
Eval results
Files

serialization.mddocs/

AST Serialization

JavaParser provides comprehensive serialization capabilities for converting AST nodes to and from JSON format. This enables storing, transmitting, and reconstructing Abstract Syntax Trees for various applications including code analysis, transformation tools, and persistent storage.

Capabilities

JSON Serialization

Convert AST nodes to JSON representation for storage or transmission.

/**
 * Serializer for converting AST nodes to JSON format
 */
public class JavaParserJsonSerializer {
    
    /**
     * Create serializer with default configuration
     */
    public JavaParserJsonSerializer();
    
    /**
     * Serialize AST node to JSON string
     * @param node AST node to serialize
     * @return JSON string representation
     */
    public String serialize(Node node);
    
    /**
     * Serialize AST node to JSON and write to output stream
     * @param node AST node to serialize
     * @param out Output stream to write JSON
     * @throws IOException if writing fails
     */
    public void serialize(Node node, OutputStream out) throws IOException;
    
    /**
     * Serialize AST node to JSON and write to writer
     * @param node AST node to serialize
     * @param writer Writer to output JSON
     * @throws IOException if writing fails
     */
    public void serialize(Node node, Writer writer) throws IOException;
}

Usage Examples:

import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.serialization.JavaParserJsonSerializer;

// Parse Java code
CompilationUnit cu = StaticJavaParser.parse("""
    public class Example {
        public void hello() {
            System.out.println("Hello World");
        }
    }
    """);

// Serialize to JSON
JavaParserJsonSerializer serializer = new JavaParserJsonSerializer();
String json = serializer.serialize(cu);
System.out.println(json);

// Serialize to file
try (FileOutputStream fos = new FileOutputStream("ast.json")) {
    serializer.serialize(cu, fos);
}

JSON Deserialization

Reconstruct AST nodes from JSON representation.

/**
 * Deserializer for converting JSON back to AST nodes
 */
public class JavaParserJsonDeserializer {
    
    /**
     * Create deserializer with default configuration
     */
    public JavaParserJsonDeserializer();
    
    /**
     * Deserialize JSON string to AST node
     * @param json JSON string to deserialize
     * @return Reconstructed AST node
     * @throws JsonProcessingException if JSON parsing fails
     */
    public Node deserialize(String json) throws JsonProcessingException;
    
    /**
     * Deserialize JSON from input stream to AST node
     * @param in Input stream containing JSON
     * @return Reconstructed AST node
     * @throws IOException if reading fails
     * @throws JsonProcessingException if JSON parsing fails
     */
    public Node deserialize(InputStream in) throws IOException, JsonProcessingException;
    
    /**
     * Deserialize JSON from reader to AST node
     * @param reader Reader containing JSON
     * @return Reconstructed AST node
     * @throws IOException if reading fails
     * @throws JsonProcessingException if JSON parsing fails
     */
    public Node deserialize(Reader reader) throws IOException, JsonProcessingException;
    
    /**
     * Deserialize JSON to specific AST node type
     * @param json JSON string to deserialize
     * @param nodeType Expected AST node type
     * @return Reconstructed AST node of specified type
     * @throws JsonProcessingException if JSON parsing fails
     * @throws ClassCastException if JSON doesn't represent expected type
     */
    public <T extends Node> T deserialize(String json, Class<T> nodeType) 
            throws JsonProcessingException;
}

Usage Examples:

import com.github.javaparser.serialization.JavaParserJsonDeserializer;

JavaParserJsonDeserializer deserializer = new JavaParserJsonDeserializer();

// Deserialize from JSON string
String json = "..."; // JSON representation of AST
Node reconstructedNode = deserializer.deserialize(json);

// Deserialize to specific type
CompilationUnit cu = deserializer.deserialize(json, CompilationUnit.class);

// Deserialize from file
try (FileInputStream fis = new FileInputStream("ast.json")) {
    Node node = deserializer.deserialize(fis);
}

// Round-trip example: serialize and deserialize
CompilationUnit original = StaticJavaParser.parse("public class Test {}");
JavaParserJsonSerializer serializer = new JavaParserJsonSerializer();
String json = serializer.serialize(original);

CompilationUnit restored = deserializer.deserialize(json, CompilationUnit.class);
// restored is functionally equivalent to original

Serialization Configuration

Control serialization behavior and format options.

/**
 * Configuration options for JSON serialization
 */
public class JsonSerializationConfiguration {
    
    /**
     * Create default configuration
     */
    public JsonSerializationConfiguration();
    
    /**
     * Enable/disable pretty printing of JSON output
     * @param prettyPrint true to format JSON with indentation
     * @return This configuration for chaining
     */
    public JsonSerializationConfiguration setPrettyPrint(boolean prettyPrint);
    
    /**
     * Include/exclude position information in serialized JSON
     * @param includePositions true to include range/position data
     * @return This configuration for chaining
     */
    public JsonSerializationConfiguration setIncludePositions(boolean includePositions);
    
    /**
     * Include/exclude comments in serialized JSON
     * @param includeComments true to include comment nodes
     * @return This configuration for chaining
     */
    public JsonSerializationConfiguration setIncludeComments(boolean includeComments);
}

Use Cases

JSON serialization enables several important use cases:

Persistent Storage:

// Store parsed AST for later processing
CompilationUnit cu = StaticJavaParser.parse(sourceFile);
String json = serializer.serialize(cu);
database.store(fileName, json);

// Later: retrieve and reconstruct AST
String storedJson = database.retrieve(fileName);
CompilationUnit restored = deserializer.deserialize(storedJson, CompilationUnit.class);

Distributed Processing:

// Send AST over network for remote analysis
String json = serializer.serialize(compilationUnit);
httpClient.post("/analyze", json);

// Receive modified AST back
String modifiedJson = httpClient.receive();
CompilationUnit modified = deserializer.deserialize(modifiedJson, CompilationUnit.class);

Code Analysis Pipelines:

// Serialize intermediate results in multi-stage analysis
CompilationUnit parsed = StaticJavaParser.parse(source);
String stage1 = serializer.serialize(parsed);

// Stage 2: symbol resolution (different process/machine)
CompilationUnit stage1AST = deserializer.deserialize(stage1, CompilationUnit.class);
// ... perform symbol resolution ...
String stage2 = serializer.serialize(stage1AST);

// Stage 3: code transformation
CompilationUnit stage2AST = deserializer.deserialize(stage2, CompilationUnit.class);
// ... perform transformations ...

JSON Format

The JSON format preserves the complete AST structure including:

  • All node types and their properties
  • Parent-child relationships
  • Source code positions (if enabled)
  • Comments and Javadoc (if enabled)
  • Type information and metadata

The serialized JSON is self-contained and can fully reconstruct the original AST structure, making it suitable for long-term storage and cross-platform exchange.

Install with Tessl CLI

npx tessl i tessl/maven-com-github-javaparser--javaparser-core

docs

ast-navigation.md

configuration.md

index.md

parsing.md

printing.md

serialization.md

symbol-resolution.md

visitors.md

tile.json