From 186342bb08376721444776f442587e5d5a9e3fb7 Mon Sep 17 00:00:00 2001 From: nullishamy Date: Mon, 25 Mar 2024 23:06:51 +0000 Subject: [PATCH] feat: WIP: start work on v2. get maven building with multi module setup --- .envrc | 1 + .gitignore | 2 + flake.lock | 130 ++++++++++++ flake.nix | 27 +++ mvnw => sources/mvnw | 0 mvnw.cmd => sources/mvnw.cmd | 0 sources/palette/pom.xml | 97 +++++++++ .../src/main/java/com/catppuccin/App.java | 16 ++ .../src/test/java/com/catppuccin/AppTest.java | 20 ++ sources/pom.xml | 98 +++++++++ sources/processing/pom.xml | 80 ++++++++ .../java/com/catppuccin/GeneratedPalette.java | 11 + .../java/com/catppuccin/PaletteProcessor.java | 193 ++++++++++++++++++ .../src/test/java/com/catppuccin/AppTest.java | 20 ++ .../java/com/catppuccin/palette}/Color.java | 2 +- .../java/com/catppuccin/palette}/Flavour.java | 2 +- .../java/com/catppuccin/palette}/Pair.java | 2 +- .../java/com/catppuccin/palette}/Palette.java | 2 +- .../main/java/com/catppuccin/palette/pom.xml | 4 +- .../test/java/com/catppuccin/PaletteTest.java | 0 20 files changed, 701 insertions(+), 6 deletions(-) create mode 100644 .envrc create mode 100644 flake.lock create mode 100644 flake.nix rename mvnw => sources/mvnw (100%) rename mvnw.cmd => sources/mvnw.cmd (100%) create mode 100644 sources/palette/pom.xml create mode 100644 sources/palette/src/main/java/com/catppuccin/App.java create mode 100644 sources/palette/src/test/java/com/catppuccin/AppTest.java create mode 100644 sources/pom.xml create mode 100644 sources/processing/pom.xml create mode 100644 sources/processing/src/main/java/com/catppuccin/GeneratedPalette.java create mode 100644 sources/processing/src/main/java/com/catppuccin/PaletteProcessor.java create mode 100644 sources/processing/src/test/java/com/catppuccin/AppTest.java rename {src/main/java/com/catppuccin => src_old/main/java/com/catppuccin/palette}/Color.java (97%) rename {src/main/java/com/catppuccin => src_old/main/java/com/catppuccin/palette}/Flavour.java (99%) rename {src/main/java/com/catppuccin => src_old/main/java/com/catppuccin/palette}/Pair.java (96%) rename {src/main/java/com/catppuccin => src_old/main/java/com/catppuccin/palette}/Palette.java (99%) rename pom.xml => src_old/main/java/com/catppuccin/palette/pom.xml (99%) rename {src => src_old}/test/java/com/catppuccin/PaletteTest.java (100%) diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..44610e5 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake; diff --git a/.gitignore b/.gitignore index 65f20b1..0727fa3 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,5 @@ build/ ### Mac OS ### .DS_Store + +.direnv/ \ No newline at end of file diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..beb7aa9 --- /dev/null +++ b/flake.lock @@ -0,0 +1,130 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1694767346, + "narHash": "sha256-5uH27SiVFUwsTsqC5rs3kS7pBoNhtoy9QfTP9BmknGk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ace5093e36ab1e95cb9463863491bee90d5a4183", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1681358109, + "narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1694743934, + "narHash": "sha256-4pn0x+OiOFWefBpgyufFVaAeG+LwfVUI/HMCma8xdHU=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "6a26dd6da9b4f28d9b4c397bd22b5df4bec8f78a", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1414efd --- /dev/null +++ b/flake.nix @@ -0,0 +1,27 @@ +{ + description = "A devShell example"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + rust-overlay.url = "github:oxalica/rust-overlay"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, rust-overlay, flake-utils, ... }: + flake-utils.lib.eachDefaultSystem (system: + let + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { + inherit system overlays; + }; + in + with pkgs; + { + devShell = mkShell { + buildInputs = [ + openjdk17-bootstrap + ]; + }; + } + ); +} diff --git a/mvnw b/sources/mvnw similarity index 100% rename from mvnw rename to sources/mvnw diff --git a/mvnw.cmd b/sources/mvnw.cmd similarity index 100% rename from mvnw.cmd rename to sources/mvnw.cmd diff --git a/sources/palette/pom.xml b/sources/palette/pom.xml new file mode 100644 index 0000000..f15b413 --- /dev/null +++ b/sources/palette/pom.xml @@ -0,0 +1,97 @@ + + + 4.0.0 + + catppuccin-java + com.catppuccin + 1.0-SNAPSHOT + + + jar + + com.catppuccin + palette + 1.0-SNAPSHOT + + palette + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + com.catppuccin + processing + 1.0-SNAPSHOT + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + + com.catppuccin + processing + 1.0-SNAPSHOT + + + + com.catppuccin.PaletteProcessor + + + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + diff --git a/sources/palette/src/main/java/com/catppuccin/App.java b/sources/palette/src/main/java/com/catppuccin/App.java new file mode 100644 index 0000000..786a193 --- /dev/null +++ b/sources/palette/src/main/java/com/catppuccin/App.java @@ -0,0 +1,16 @@ +package com.catppuccin; + +import com.catppuccin.GeneratedPalette; + +/** + * Hello world! + * + */ +@GeneratedPalette +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/sources/palette/src/test/java/com/catppuccin/AppTest.java b/sources/palette/src/test/java/com/catppuccin/AppTest.java new file mode 100644 index 0000000..bb8a731 --- /dev/null +++ b/sources/palette/src/test/java/com/catppuccin/AppTest.java @@ -0,0 +1,20 @@ +package com.catppuccin; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/sources/pom.xml b/sources/pom.xml new file mode 100644 index 0000000..027cec0 --- /dev/null +++ b/sources/pom.xml @@ -0,0 +1,98 @@ + + + 4.0.0 + + com.catppuccin + catppuccin-java + 1.0-SNAPSHOT + pom + catppuccin-java + + http://www.example.com + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + + + + + com.catppuccin + processing + 1.0-SNAPSHOT + + + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + + + maven-resources-plugin + 3.0.2 + + + + maven-compiler-plugin + 3.8.0 + + + + maven-surefire-plugin + 2.22.1 + + + + maven-jar-plugin + 3.0.2 + + + + maven-install-plugin + 2.5.2 + + + + maven-deploy-plugin + 2.8.2 + + + + + maven-site-plugin + 3.7.1 + + + + maven-project-info-reports-plugin + 3.0.0 + + + + + + + + processing + palette + + diff --git a/sources/processing/pom.xml b/sources/processing/pom.xml new file mode 100644 index 0000000..57301af --- /dev/null +++ b/sources/processing/pom.xml @@ -0,0 +1,80 @@ + + + 4.0.0 + + catppuccin-java + com.catppuccin + 1.0-SNAPSHOT + + + jar + + com.catppuccin + processing + 1.0-SNAPSHOT + + processing + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + diff --git a/sources/processing/src/main/java/com/catppuccin/GeneratedPalette.java b/sources/processing/src/main/java/com/catppuccin/GeneratedPalette.java new file mode 100644 index 0000000..0726509 --- /dev/null +++ b/sources/processing/src/main/java/com/catppuccin/GeneratedPalette.java @@ -0,0 +1,11 @@ +package com.catppuccin; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.SOURCE) +public @interface GeneratedPalette { +} diff --git a/sources/processing/src/main/java/com/catppuccin/PaletteProcessor.java b/sources/processing/src/main/java/com/catppuccin/PaletteProcessor.java new file mode 100644 index 0000000..519fcf5 --- /dev/null +++ b/sources/processing/src/main/java/com/catppuccin/PaletteProcessor.java @@ -0,0 +1,193 @@ +package com.catppuccin; + +import java.util.Set; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.TypeElement; +import javax.tools.Diagnostic; + +@SupportedAnnotationTypes( + {"com.catppuccin.GeneratedPalette"}) +@SupportedSourceVersion(SourceVersion.RELEASE_8) +public class PaletteProcessor extends AbstractProcessor { + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + if (annotations.isEmpty()) { + return false; + } + + Set elements = roundEnv.getElementsAnnotatedWith(GeneratedPalette.class); + + for (Element element : elements) { + GeneratedPalette paletteAnnotation = element.getAnnotation(GeneratedPalette.class); + + if (element.getKind() != ElementKind.CLASS) { + error("The annotation @GeneratedPalette can only be applied on class: ", + element); + + } else { + // boolean error = false; + + // error = !checkIdValidity(paletteAnnotation.as(), element); + + // if (!error) { + // try { + // generateClass(paletteAnnotation, element); + // } catch (Exception e) { + // error(e.getMessage(), null); + // } + // } + } + } + return false; + } + + // private void generateClass(AutoImplement autoImplement, Element element) + // throws Exception { + // String pkg = getPackageName(element); + // //delegate some processing to our FieldInfo class + // FieldInfo fieldInfo = FieldInfo.get(element); + // //the target interface name + // String interfaceName = getTypeName(element); + // //using our JClass to delegate most of the string appending there + // JClass implClass = new JClass(); + // implClass.definePackage(pkg); + // implClass.defineClass("public class ", autoImplement.as(), "implements " + interfaceName); + // //nested builder class + // JClass builder = null; + // String builderClassName = null; + // if (autoImplement.builder()) { + // builder = new JClass(); + // builder.defineClass("public static class", + // builderClassName = autoImplement.as() + "Builder", null); + // } + // //adding class fields + // implClass.addFields(fieldInfo.getFields()); + // if (builder != null) { + // builder.addFields(fieldInfo.getFields()); + // } + // //adding constructor with mandatory fields + // implClass.addConstructor(builder == null ? "public" : "private", + // fieldInfo.getMandatoryFields()); + // if (builder != null) { + // builder.addConstructor("private", fieldInfo.getMandatoryFields()); + // } + // //generate methods + // for (Map.Entry entry : fieldInfo.getFields().entrySet()) { + // String name = entry.getKey(); + // String type = entry.getValue(); + // boolean mandatory = fieldInfo.getMandatoryFields().contains(name); + // implClass.createGetterForField(name); + // //if no builder generation specified then crete setters for non mandatory fields + // if (builder == null && !mandatory) { + // implClass.createSetterForField(name); + // } + // if (builder != null && !mandatory) { + // builder.addMethod(new JMethod() + // .defineSignature("public", false, builderClassName) + // .name(name) + // .addParam(type, name) + // .defineBody(" this." + name + " = " + name + ";" + // + JClass.LINE_BREAK + // + " return this;" + // ) + // ); + // } + // } + // if (builder != null) { + // //generate create() method of the Builder class + // JMethod createMethod = new JMethod() + // .defineSignature("public", true, builderClassName) + // .name("create"); + // String paramString = "("; + // int i = 0; + // for (String s : fieldInfo.getMandatoryFields()) { + // createMethod.addParam(fieldInfo.getFields().get(s), s); + // paramString += (i != 0 ? ", " : "") + s; + // i++; + // } + // paramString += ");"; + // createMethod.defineBody("return new " + builderClassName + // + paramString); + // builder.addMethod(createMethod); + // //generate build() method of the builder class. + // JMethod buildMethod = new JMethod() + // .defineSignature("public", false, autoImplement.as()) + // .name("build"); + // StringBuilder buildBody = new StringBuilder(); + // buildBody.append(autoImplement.as()) + // .append(" a = new ") + // .append(autoImplement.as()) + // .append(paramString) + // .append(JClass.LINE_BREAK); + // for (String s : fieldInfo.getFields().keySet()) { + // if (fieldInfo.getMandatoryFields().contains(s)) { + // continue; + // } + // buildBody.append("a.") + // .append(s) + // .append(" = ") + // .append(s) + // .append(";") + // .append(JClass.LINE_BREAK); + // } + // buildBody.append("return a;") + // .append(JClass.LINE_BREAK); + // buildMethod.defineBody(buildBody.toString()); + // builder.addMethod(buildMethod); + // implClass.addNestedClass(builder); + // } + // //finally generate class via Filer + // generateClass(pkg + "." + autoImplement.as(), implClass.end()); + // } + // private String getPackageName(Element element) { + // List packageElements + // = ElementFilter.packagesIn(Arrays.asList(element.getEnclosingElement())); + // Optional packageElement = packageElements.stream().findAny(); + // return packageElement.isPresent() + // ? packageElement.get().getQualifiedName().toString() : null; + // } + // private void generateClass(String qfn, String end) throws IOException { + // JavaFileObject sourceFile = processingEnv.getFiler().createSourceFile(qfn); + // Writer writer = sourceFile.openWriter(); + // writer.write(end); + // writer.close(); + // } + // /** + // * Checking if the class to be generated is a valid java identifier Also the + // * name should be not same as the target interface + // */ + // private boolean checkIdValidity(String name, Element e) { + // boolean valid = true; + // for (int i = 0; i < name.length(); i++) { + // if (i == 0 ? !Character.isJavaIdentifierStart(name.charAt(i)) + // : !Character.isJavaIdentifierPart(name.charAt(i))) { + // error("AutoImplement#as should be valid java " + // + "identifier for code generation: " + name, e); + // valid = false; + // } + // } + // if (name.equals(getTypeName(e))) { + // error("AutoImplement#as should be different than the Interface name ", e); + // } + // return valid; + // } + // /** + // * Get the simple name of the TypeMirror + // */ + // private static String getTypeName(Element e) { + // TypeMirror typeMirror = e.asType(); + // String[] split = typeMirror.toString().split("\\."); + // return split.length > 0 ? split[split.length - 1] : null; + // } + private void error(String msg, Element e) { + processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, msg, e); + } +} diff --git a/sources/processing/src/test/java/com/catppuccin/AppTest.java b/sources/processing/src/test/java/com/catppuccin/AppTest.java new file mode 100644 index 0000000..bb8a731 --- /dev/null +++ b/sources/processing/src/test/java/com/catppuccin/AppTest.java @@ -0,0 +1,20 @@ +package com.catppuccin; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/src/main/java/com/catppuccin/Color.java b/src_old/main/java/com/catppuccin/palette/Color.java similarity index 97% rename from src/main/java/com/catppuccin/Color.java rename to src_old/main/java/com/catppuccin/palette/Color.java index 33cce05..f3e7fb4 100644 --- a/src/main/java/com/catppuccin/Color.java +++ b/src_old/main/java/com/catppuccin/palette/Color.java @@ -1,4 +1,4 @@ -package com.catppuccin; +package com.catppuccin.palette; /** * This {@link Color} class extends the existing {@link java.awt.Color} class to add diff --git a/src/main/java/com/catppuccin/Flavour.java b/src_old/main/java/com/catppuccin/palette/Flavour.java similarity index 99% rename from src/main/java/com/catppuccin/Flavour.java rename to src_old/main/java/com/catppuccin/palette/Flavour.java index 0d6f202..8d2a2e3 100644 --- a/src/main/java/com/catppuccin/Flavour.java +++ b/src_old/main/java/com/catppuccin/palette/Flavour.java @@ -1,4 +1,4 @@ -package com.catppuccin; +package com.catppuccin.palette; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/catppuccin/Pair.java b/src_old/main/java/com/catppuccin/palette/Pair.java similarity index 96% rename from src/main/java/com/catppuccin/Pair.java rename to src_old/main/java/com/catppuccin/palette/Pair.java index 5a401c1..5375305 100644 --- a/src/main/java/com/catppuccin/Pair.java +++ b/src_old/main/java/com/catppuccin/palette/Pair.java @@ -1,4 +1,4 @@ -package com.catppuccin; +package com.catppuccin.palette; import java.util.Objects; diff --git a/src/main/java/com/catppuccin/Palette.java b/src_old/main/java/com/catppuccin/palette/Palette.java similarity index 99% rename from src/main/java/com/catppuccin/Palette.java rename to src_old/main/java/com/catppuccin/palette/Palette.java index 6e67261..efb741a 100644 --- a/src/main/java/com/catppuccin/Palette.java +++ b/src_old/main/java/com/catppuccin/palette/Palette.java @@ -1,4 +1,4 @@ -package com.catppuccin; +package com.catppuccin.palette; import java.util.ArrayList; import java.util.List; diff --git a/pom.xml b/src_old/main/java/com/catppuccin/palette/pom.xml similarity index 99% rename from pom.xml rename to src_old/main/java/com/catppuccin/palette/pom.xml index ced37d5..91c6112 100644 --- a/pom.xml +++ b/src_old/main/java/com/catppuccin/palette/pom.xml @@ -10,7 +10,7 @@ ${packaging} - jar + pom 1.8 1.8 UTF-8 @@ -158,4 +158,4 @@ - + \ No newline at end of file diff --git a/src/test/java/com/catppuccin/PaletteTest.java b/src_old/test/java/com/catppuccin/PaletteTest.java similarity index 100% rename from src/test/java/com/catppuccin/PaletteTest.java rename to src_old/test/java/com/catppuccin/PaletteTest.java