Skip to content

karjanme/enum-visitor-gradle-plugin

Repository files navigation

license-image gradle-plugin-portal-image ci-pipeline-image

Enum Visitor Gradle Plugin

A Gradle plugin that automatically generates enums with an interface that implements the visitor pattern.

Getting Started

Add the following to your build.gradle file:

plugins {
    id 'me.karjan.enumvisitor' version '0.2.0'
}

Define your enums under src/main/enumvis/...

Example

Example Input

File: src/main/enumvis/pkgA/pkg1/Planet.v

Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune

Example Output

File: build/generated-src/enumvis/pkgA/pkg1/Planet.java

package pkgA.pkg1;

public enum Planet {
  Mercury {
    public <E> E accept(PlanetVisitor<E> visitor) {
      return visitor.visitMercury();
    }
  },

  Venus {
    public <E> E accept(PlanetVisitor<E> visitor) {
      return visitor.visitVenus();
    }
  },

  Earth {
    public <E> E accept(PlanetVisitor<E> visitor) {
      return visitor.visitEarth();
    }
  },

  Mars {
    public <E> E accept(PlanetVisitor<E> visitor) {
      return visitor.visitMars();
    }
  },

  Jupiter {
    public <E> E accept(PlanetVisitor<E> visitor) {
      return visitor.visitJupiter();
    }
  },

  Saturn {
    public <E> E accept(PlanetVisitor<E> visitor) {
      return visitor.visitSaturn();
    }
  },

  Uranus {
    public <E> E accept(PlanetVisitor<E> visitor) {
      return visitor.visitUranus();
    }
  },

  Neptune {
    public <E> E accept(PlanetVisitor<E> visitor) {
      return visitor.visitNeptune();
    }
  };

  public abstract <E> E accept(PlanetVisitor<E> visitor);

  public interface PlanetVisitor<E> {
    E visitMercury();
    E visitVenus();
    E visitEarth();
    E visitMars();
    E visitJupiter();
    E visitSaturn();
    E visitUranus();
    E visitNeptune();
  }
}

About

Enum Visitor Gradle Plugin

Topics

Resources

License

Stars

Watchers

Forks

Languages