From e769991440c44cb4d2eaee606ef2ec8ce92f7937 Mon Sep 17 00:00:00 2001
From: Tulis <79586741+Tulis12@users.noreply.github.com>
Date: Wed, 13 Aug 2025 19:17:06 +0200
Subject: [PATCH] add: jitpack, MissingParameterException, proper error
handling, @Init annotation with useful params, instead of generic ones
---
README.md | 129 ++++++++++++
img.png | Bin 0 -> 33404 bytes
pom.xml | 10 +-
.../{GenericInitializer.java => Init.java} | 4 +-
.../Annotations/InitializeCommand.java | 12 --
.../autoinitializer/AutomaticInitializer.java | 184 +++++++++++++-----
.../MissingParameterException.java | 7 +
7 files changed, 286 insertions(+), 60 deletions(-)
create mode 100644 README.md
create mode 100644 img.png
rename src/main/java/dev/tulis/autoinitializer/Annotations/{GenericInitializer.java => Init.java} (67%)
delete mode 100644 src/main/java/dev/tulis/autoinitializer/Annotations/InitializeCommand.java
create mode 100644 src/main/java/dev/tulis/autoinitializer/MissingParameterException.java
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5f6246f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,129 @@
+
+
+
+
+## What is it?
+It's a Java project for initializing classes automatically,
+a little like Spring uses Beans. You can avoid a mess like this:
+
+```java
+new Command();
+new Command2();
+
+new Event();
+new Event2();
+```
+
+and instead use `@Init` annotation to initialize the class (using your constructor configuration) automatically:
+
+```java
+new AutomaticInitializer.Builder()
+ .setPackageName("(the main package to look for classes)")
+ .addInitVariable(Integer.class, 123) // You can add as many as you want
+ .addInitVariable(MyMainClass.class, mainClassObject) // Or none if you want the default constructor
+ .run();
+```
+
+and for the class:
+
+```java
+@Init
+public class Test {
+ public Test(Integer i, MyMainClass myMainClass) {
+ System.out.println("Hi from test! My int value: " + i);
+ myMainClass.registerEvent(this); // You can initialize the event here for example!
+ }
+}
+```
+
+## Installation
+Install TuliAutoInitializer by Maven or Gradle using Jitpack, or my self-hosted gitea (on git.tulisiowice.top):
+
+### Repos:
+
+```xml
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+```
+
+```xml
+
+
+ gitea
+ https://git.tulisiowice.top/api/packages/Tulis/maven
+
+
+```
+
+### The package:
+
+```xml
+ // Jitpack
+ com.github.Tulis12
+ TuliAutoInitializer
+ latest-version // If you don't know it, check the Jitpack badge!
+
+```
+
+```xml
+ // Gitea
+ dev.tulis
+ TuliAutoInitializer
+ latest-version
+
+```
+
+## All annotation's parameters
+
+### `initializeWithoutParameters = true`
+Tries to use the default constructor of class (the one without parameters), defaults to false (using the configuration of the builder).
+
+```java
+@Init(initializeWithoutParameters = true)
+public class Test {
+ public Test() {
+ System.out.println("Will use this instead!");
+ }
+
+ public Test(Integer i1, Integer i2) {
+ System.out.println("Won't use this!");
+ }
+}
+```
+
+The Initializer won't force use of default constructor (for example, if its private), will instead throw `NoSuchMethodException`, `IllegalAccessException` respectively.
+
+### `initializeOnlyWith = { Integer.class, MyMainClass.class }`
+Will use only those two, even if there are more. In case of multiple values with the same class, will take the one first added in the builder, defaults to an empty array (will use the configuration of builder).
+
+```java
+@Init(initializeOnlyWith = { Integer.class, MyMainClass.class })
+public class Test {
+ public Test(Integer integer, MyMainClass myMainClass) {
+ System.out.println("Will use this, even if in builder there is more.");
+ }
+
+ public Test(Integer integer, String string, MyMainClass myMainClass) {
+ System.out.println("Won't use this!");
+ }
+}
+```
+
+Remember, if there is no class (with a value) provided in the builder, but you will try to use it here, the builder will throw `MissingParameterException`.
+
+## License
+Released under the MIT license.
\ No newline at end of file
diff --git a/img.png b/img.png
new file mode 100644
index 0000000000000000000000000000000000000000..89472b8e4c39a89adebcfc9cacce26ddfef5ec4e
GIT binary patch
literal 33404
zcmeAS@N?(olHy`uVBq!ia0y~yUxV%
zQuQiw3m8Da#=fE;F*!T6L?J0PJu}Z%{r&F!>I#`Dw(8-gz6QPp&Z!xh9#uuD!Bu`C
z$yM3OmMQA?cD!6R6;>6w1-Ypui3%0DIeEoa6}C!XgRSz4tw6&1N_I9yDQQ+gE^bg2
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