A Gradle plugin that automatically generates enums with an interface that implements the visitor pattern.
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 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();
}
}