adt4j

Artifact to use as universal maven parent

Лицензия

Лицензия

Категории

Категории

ADT4J Библиотеки уровня приложения Code Generators
Группа

Группа

com.github.sviperll
Идентификатор

Идентификатор

adt4j
Последняя версия

Последняя версия

3.2
Дата

Дата

Тип

Тип

jar
Описание

Описание

adt4j
Artifact to use as universal maven parent

Скачать adt4j

Имя Файла Размер
adt4j-3.2.pom
adt4j-3.2.jar 78 KB
adt4j-3.2-sources.jar 55 KB
adt4j-3.2-javadoc.jar 121 KB
Обзор

Как подключить последнюю версию

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

Зависимости

compile (2)

Идентификатор библиотеки Тип Версия
com.helger : jcodemodel jar 2.8.6
com.google.code.findbugs : annotations jar 2.0.3

test (1)

Идентификатор библиотеки Тип Версия
junit : junit jar 4.11

Модули Проекта

Данный проект не имеет модулей.

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 git@github.com: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.

Версии библиотеки

Версия
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