adt4j-maven-parent

Artifact to use as universal maven parent

License

License

Categories

Categories

Maven Build Tools ADT4J Application Layer Libs Code Generators
GroupId

GroupId

com.github.sviperll
ArtifactId

ArtifactId

adt4j-maven-parent
Last Version

Last Version

3.2
Release Date

Release Date

Type

Type

pom
Description

Description

adt4j-maven-parent
Artifact to use as universal maven parent
Project URL

Project URL

http://maven.apache.org
Source Code Management

Source Code Management

https://github.com/sviperll/adt4j

Download adt4j-maven-parent

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.sviperll/adt4j-maven-parent/ -->
<dependency>
    <groupId>com.github.sviperll</groupId>
    <artifactId>adt4j-maven-parent</artifactId>
    <version>3.2</version>
    <type>pom</type>
</dependency>
// https://jarcasting.com/artifacts/com.github.sviperll/adt4j-maven-parent/
implementation 'com.github.sviperll:adt4j-maven-parent:3.2'
// https://jarcasting.com/artifacts/com.github.sviperll/adt4j-maven-parent/
implementation ("com.github.sviperll:adt4j-maven-parent:3.2")
'com.github.sviperll:adt4j-maven-parent:pom:3.2'
<dependency org="com.github.sviperll" name="adt4j-maven-parent" rev="3.2">
  <artifact name="adt4j-maven-parent" type="pom" />
</dependency>
@Grapes(
@Grab(group='com.github.sviperll', module='adt4j-maven-parent', version='3.2')
)
libraryDependencies += "com.github.sviperll" % "adt4j-maven-parent" % "3.2"
[com.github.sviperll/adt4j-maven-parent "3.2"]

Dependencies

test (1)

Group / Artifact Type Version
junit : junit jar 4.11

Project Modules

  • adt4j
  • adt4j-examples
  • adt4j-shaded

adt4j - Algebraic Data Types for Java

This library implements Algebraic Data Types for Java.
ADT4J provides annotation processor for @GenerateValueClassForVisitor annotation.
ADT4J generates new class for each @GenerateValueClassForVisitor annotation.

It allows you to easily define custom data types. Like this:

// Define Expression data type
@WrapsGeneratedValueClass(visitor = ExpressionVisitor.class)
// ExpressionBase class will be automatically generated by annotation processor
// You can use any other name instead of ExpressionBase, like VeryLongNameThatYouShouldNeverActuallyUse
class Expression extends ExpressionBase {
  public static void main(String[] args) {
    // Static constructor methods are automatically generated for Expression class
    Expression e = mul(sum(lit(5), lit(1)), lit(2));

    // Reasonable default toString implementation is provided:
    System.out.println(e + " = " + e.eval());
  }

  // This is the required boilerplate for wrapper-class
  Expression(ExpressionBase base) {
    super(base);
  }

  // Example of "pattern-matching"
  int eval() {
    return accept(new ExpressionVisitor<Integer>() {
      Integer lit(int i) {
        return i;
      }
      Integer sum(Expression e1, Expression e2) {
        return e1.eval() + e2.eval();
      }
      Integer mul(Expression e1, Expression e2) {
        return e1.eval() * e2.eval();
      }
    });
  }

  // Actual data-type definition
  // Data type is recursive. No special treatment of recursive definition is required.
  @GenerateValueClassForVisitor(wrapperClass = Expression.class)
  @Visitor(resultVariableName="R")
  interface ExpressionVisitor<R> {
    @GeneratePredicate(name = "isLiteral");
    R lit(int i);

    R sum(@Getter(name = "leftOperand") Expression e1, @Getter(name = "rightOperand") Expression e2);
    R mul(@Getter(name = "leftOperand") Expression e1, @Getter(name = "rightOperand") Expression e2);
  }

}

Features

  • Support recursive data types
  • Generate hashCode, equals and toString implementations with value semantics
  • Generate predicates, getters and "updaters" with additional annotations
  • Fully customizable API: custom names and access levels for generated methods
  • Optionally generate Comparable implementation with precise compile-time type-check if it is possible
  • Optionally generate serializable classes with precise compile-time type-check if it is possible
  • Sensible error messages
  • Support generated class extention through standard Java's inheritance.
  • Reasonably fast

Known Issues

License

ADT4J is under BSD 3-clause license.

Flattr

Flattr this git repo

Installation

Use maven dependency to use ADT4J:

<dependency>
  <groupId>com.github.sviperll</groupId>
  <artifactId>adt4j</artifactId>
  <version>3.2</version>
</dependency>

You can use adt4j-shaded artifact to simplify deployment and to avoid dependencies' conflicts. adt4j-shaded has no dependencies and does not pollute classpath. All java-packages provided by adt4j-shaded are rooted at com.github.sviperll.adt4j package.

<dependency>
  <groupId>com.github.sviperll</groupId>
  <artifactId>adt4j-shaded</artifactId>
  <version>3.2</version>
</dependency>

Changelog

See NEWS file.

Usage

See Tutorial

Build

$ git clone [email protected]:sviperll/adt4j.git
$ cd adt4j
$ mvn test

Check for errors and warnings.

ADT4J is built to be compatible with Java 7. See universal-maven-parent project's documentation for instructions about building projects compatible with JDK7.

Versions

Version
3.2
3.2-beta2
3.2-beta1
3.2-alpha1
3.1
3.1-beta1
3.0.2
3.0.1
3.0-rc2
3.0-rc1
2.0.2
2.0.1
2.0.1-rc7
2.0.1-rc5
2.0.1-rc4
1.3
1.3-beta1
1.2
1.1
1.0
0.14
0.13
0.12
0.11
0.10