aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/lombok/core/Version.java4
-rw-r--r--src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java10
-rw-r--r--src/core/lombok/eclipse/handlers/HandleConstructor.java10
-rw-r--r--src/core/lombok/eclipse/handlers/HandleGetter.java4
-rw-r--r--src/core/lombok/eclipse/handlers/HandleSetter.java9
-rw-r--r--src/core/lombok/eclipse/handlers/HandleWither.java8
-rw-r--r--src/delombok/lombok/delombok/ant/DelombokTask.java279
-rw-r--r--src/delombok/lombok/delombok/ant/DelombokTaskImpl.java91
-rw-r--r--src/delombok/lombok/delombok/ant/Format.java35
-rw-r--r--src/installer/lombok/installer/InstallerGUI.java1
10 files changed, 269 insertions, 182 deletions
diff --git a/src/core/lombok/core/Version.java b/src/core/lombok/core/Version.java
index 02bc1af0..b0f12916 100644
--- a/src/core/lombok/core/Version.java
+++ b/src/core/lombok/core/Version.java
@@ -30,9 +30,9 @@ public class Version {
// ** CAREFUL ** - this class must always compile with 0 dependencies (it must not refer to any other sources or libraries).
// Note: In 'X.Y.Z', if Z is odd, its a snapshot build built from the repository, so many different 0.10.3 versions can exist, for example.
// Official builds always end in an even number. (Since 0.10.2).
- private static final String VERSION = "1.14.9.shadow";
+ private static final String VERSION = "1.16.1";
private static final String RELEASE_NAME = "Edgy Guinea Pig";
-// private static final String RELEASE_NAME = "Branching Cobra";
+// private static final String RELEASE_NAME = "Candid Duck";
private Version() {
//Prevent instantiation
diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
index 426171c2..87e35269 100644
--- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
+++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
@@ -411,19 +411,17 @@ public class EclipseHandlerUtil {
}
public static Annotation[] copyAnnotations(ASTNode source, Annotation[]... allAnnotations) {
- boolean allNull = true;
-
- List<Annotation> result = new ArrayList<Annotation>();
+ List<Annotation> result = null;
for (Annotation[] annotations : allAnnotations) {
if (annotations != null) {
- allNull = false;
for (Annotation annotation : annotations) {
+ if (result == null) result = new ArrayList<Annotation>();
result.add(copyAnnotation(annotation, source));
}
}
}
- if (allNull) return null;
- return result.toArray(new Annotation[0]);
+
+ return result == null ? null : result.toArray(new Annotation[0]);
}
public static boolean hasAnnotation(Class<? extends java.lang.annotation.Annotation> type, EclipseNode node) {
diff --git a/src/core/lombok/eclipse/handlers/HandleConstructor.java b/src/core/lombok/eclipse/handlers/HandleConstructor.java
index d19e95e4..5bcc803a 100644
--- a/src/core/lombok/eclipse/handlers/HandleConstructor.java
+++ b/src/core/lombok/eclipse/handlers/HandleConstructor.java
@@ -333,8 +333,7 @@ public class HandleConstructor {
Statement nullCheck = generateNullCheck(field, sourceNode);
if (nullCheck != null) nullChecks.add(nullCheck);
}
- Annotation[] copiedAnnotations = copyAnnotations(source, nonNulls, nullables);
- if (copiedAnnotations.length != 0) parameter.annotations = copiedAnnotations;
+ parameter.annotations = copyAnnotations(source, nonNulls, nullables);
params.add(parameter);
}
@@ -348,10 +347,9 @@ public class HandleConstructor {
constructorProperties = createConstructorProperties(source, fields);
}
- Annotation[] copiedAnnotations = copyAnnotations(source,
+ constructor.annotations = copyAnnotations(source,
onConstructor.toArray(new Annotation[0]),
constructorProperties);
- if (copiedAnnotations.length != 0) constructor.annotations = copiedAnnotations;
}
constructor.traverse(new SetGeneratedByVisitor(source), typeDeclaration.scope);
@@ -396,9 +394,7 @@ public class HandleConstructor {
assigns.add(nameRef);
Argument parameter = new Argument(field.name, fieldPos, copyType(field.type, source), Modifier.FINAL);
-
- Annotation[] copiedAnnotations = copyAnnotations(source, findAnnotations(field, NON_NULL_PATTERN), findAnnotations(field, NULLABLE_PATTERN));
- if (copiedAnnotations.length != 0) parameter.annotations = copiedAnnotations;
+ parameter.annotations = copyAnnotations(source, findAnnotations(field, NON_NULL_PATTERN), findAnnotations(field, NULLABLE_PATTERN));
params.add(parameter);
}
diff --git a/src/core/lombok/eclipse/handlers/HandleGetter.java b/src/core/lombok/eclipse/handlers/HandleGetter.java
index 031fff82..14f2fb72 100644
--- a/src/core/lombok/eclipse/handlers/HandleGetter.java
+++ b/src/core/lombok/eclipse/handlers/HandleGetter.java
@@ -270,14 +270,12 @@ public class HandleGetter extends EclipseAnnotationHandler<Getter> {
deprecated = new Annotation[] { generateDeprecatedAnnotation(source) };
}
- Annotation[] copiedAnnotations = copyAnnotations(source,
+ method.annotations = copyAnnotations(source,
onMethod.toArray(new Annotation[0]),
findAnnotations(field, NON_NULL_PATTERN),
findAnnotations(field, NULLABLE_PATTERN),
findDelegatesAndMarkAsHandled(fieldNode),
deprecated);
-
- if (copiedAnnotations.length != 0) method.annotations = copiedAnnotations;
}
method.traverse(new SetGeneratedByVisitor(source), parent.scope);
diff --git a/src/core/lombok/eclipse/handlers/HandleSetter.java b/src/core/lombok/eclipse/handlers/HandleSetter.java
index c22af676..1fcf751d 100644
--- a/src/core/lombok/eclipse/handlers/HandleSetter.java
+++ b/src/core/lombok/eclipse/handlers/HandleSetter.java
@@ -216,10 +216,7 @@ public class HandleSetter extends EclipseAnnotationHandler<Setter> {
if (isFieldDeprecated(fieldNode)) {
deprecated = new Annotation[] { generateDeprecatedAnnotation(source) };
}
- Annotation[] copiedAnnotations = copyAnnotations(source, onMethod.toArray(new Annotation[0]), deprecated);
- if (copiedAnnotations.length != 0) {
- method.annotations = copiedAnnotations;
- }
+ method.annotations = copyAnnotations(source, onMethod.toArray(new Annotation[0]), deprecated);
Argument param = new Argument(field.name, p, copyType(field.type, source), Modifier.FINAL);
param.sourceStart = pS; param.sourceEnd = pE;
method.arguments = new Argument[] { param };
@@ -252,9 +249,7 @@ public class HandleSetter extends EclipseAnnotationHandler<Setter> {
statements.add(returnThis);
}
method.statements = statements.toArray(new Statement[0]);
-
- Annotation[] copiedAnnotationsParam = copyAnnotations(source, nonNulls, nullables, onParam.toArray(new Annotation[0]));
- if (copiedAnnotationsParam.length != 0) param.annotations = copiedAnnotationsParam;
+ param.annotations = copyAnnotations(source, nonNulls, nullables, onParam.toArray(new Annotation[0]));
method.traverse(new SetGeneratedByVisitor(source), parent.scope);
return method;
diff --git a/src/core/lombok/eclipse/handlers/HandleWither.java b/src/core/lombok/eclipse/handlers/HandleWither.java
index 8b038676..cb06d888 100644
--- a/src/core/lombok/eclipse/handlers/HandleWither.java
+++ b/src/core/lombok/eclipse/handlers/HandleWither.java
@@ -227,10 +227,7 @@ public class HandleWither extends EclipseAnnotationHandler<Wither> {
if (isFieldDeprecated(fieldNode)) {
deprecated = new Annotation[] { generateDeprecatedAnnotation(source) };
}
- Annotation[] copiedAnnotations = copyAnnotations(source, onMethod.toArray(new Annotation[0]), deprecated);
- if (copiedAnnotations.length != 0) {
- method.annotations = copiedAnnotations;
- }
+ method.annotations = copyAnnotations(source, onMethod.toArray(new Annotation[0]), deprecated);
Argument param = new Argument(field.name, p, copyType(field.type, source), Modifier.FINAL);
param.sourceStart = pS; param.sourceEnd = pE;
method.arguments = new Argument[] { param };
@@ -283,8 +280,7 @@ public class HandleWither extends EclipseAnnotationHandler<Wither> {
method.statements = statements.toArray(new Statement[0]);
- Annotation[] copiedAnnotationsParam = copyAnnotations(source, nonNulls, nullables, onParam.toArray(new Annotation[0]));
- if (copiedAnnotationsParam.length != 0) param.annotations = copiedAnnotationsParam;
+ param.annotations = copyAnnotations(source, nonNulls, nullables, onParam.toArray(new Annotation[0]));
method.traverse(new SetGeneratedByVisitor(source), parent.scope);
return method;
diff --git a/src/delombok/lombok/delombok/ant/DelombokTask.java b/src/delombok/lombok/delombok/ant/DelombokTask.java
index d5c17fe7..06bbe3e0 100644
--- a/src/delombok/lombok/delombok/ant/DelombokTask.java
+++ b/src/delombok/lombok/delombok/ant/DelombokTask.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 The Project Lombok Authors.
+ * Copyright (C) 2009-2015 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -22,142 +22,189 @@
package lombok.delombok.ant;
import java.io.File;
-import java.io.IOException;
-import java.nio.charset.UnsupportedCharsetException;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import lombok.delombok.Delombok;
-import lombok.delombok.Delombok.InvalidFormatOptionException;
+import lombok.Lombok;
import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Location;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.resources.FileResource;
-public class DelombokTask extends Task {
- private File fromDir, toDir;
- private Path classpath;
- private Path sourcepath;
- private boolean verbose;
- private String encoding;
- private Path path;
- private List<Format> formatOptions = new ArrayList<Format>();
-
- public void setClasspath(Path classpath) {
- if (this.classpath == null) {
- this.classpath = classpath;
- } else {
- this.classpath.append(classpath);
+@SuppressWarnings("unused") // we use reflection to transfer fields.
+class Tasks {
+ public static class Format {
+ private String value;
+
+ @Override public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((value == null) ? 0 : value.hashCode());
+ return result;
}
- }
-
- public Path createClasspath() {
- if (classpath == null) {
- classpath = new Path(getProject());
+
+ @Override public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ Format other = (Format) obj;
+ if (value == null) {
+ if (other.value != null) return false;
+ } else if (!value.equals(other.value)) return false;
+ return true;
}
- return classpath.createPath();
- }
-
- public void setClasspathRef(Reference r) {
- createClasspath().setRefid(r);
- }
-
- public void setSourcepath(Path sourcepath) {
- if (this.sourcepath == null) {
- this.sourcepath = sourcepath;
- } else {
- this.sourcepath.append(sourcepath);
+
+ @Override public String toString() {
+ return "FormatOption [value=" + value + "]";
}
- }
-
- public Path createSourcepath() {
- if (sourcepath == null) {
- sourcepath = new Path(getProject());
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
}
- return sourcepath.createPath();
- }
-
- public void setSourcepathRef(Reference r) {
- createSourcepath().setRefid(r);
- }
-
- public void setFrom(File dir) {
- this.fromDir = dir;
- }
-
- public void setTo(File dir) {
- this.toDir = dir;
- }
-
- public void setVerbose(boolean verbose) {
- this.verbose = verbose;
- }
-
- public void setEncoding(String encoding) {
- this.encoding = encoding;
- }
-
- public void addFileset(FileSet set) {
- if (path == null) path = new Path(getProject());
- path.add(set);
- }
-
- public void addFormat(Format format) {
- formatOptions.add(format);
}
- @Override
- public void execute() throws BuildException {
- if (fromDir == null && path == null) throw new BuildException("Either 'from' attribute, or nested <fileset> tags are required.");
- if (fromDir != null && path != null) throw new BuildException("You can't specify both 'from' attribute and nested filesets. You need one or the other.");
- if (toDir == null) throw new BuildException("The to attribute is required.");
-
- Delombok delombok = new Delombok();
- if (verbose) delombok.setVerbose(true);
- try {
- if (encoding != null) delombok.setCharset(encoding);
- } catch (UnsupportedCharsetException e) {
- throw new BuildException("Unknown charset: " + encoding, getLocation());
- }
-
- if (classpath != null) delombok.setClasspath(classpath.toString());
- if (sourcepath != null) delombok.setSourcepath(sourcepath.toString());
-
- try {
- List<String> fo = new ArrayList<String>();
- for (Format f : formatOptions) {
- String v = f.getValue();
- if (v == null) throw new BuildException("'value' property required for <format>");
- fo.add(v);
+ public static class Delombok extends Task {
+ private File fromDir, toDir;
+ private Path classpath;
+ private Path sourcepath;
+ private boolean verbose;
+ private String encoding;
+ private Path path;
+ private List<Format> formatOptions = new ArrayList<Format>();
+
+ public void setClasspath(Path classpath) {
+ if (this.classpath == null) {
+ this.classpath = classpath;
+ } else {
+ this.classpath.append(classpath);
+ }
+ }
+
+ public Path createClasspath() {
+ if (classpath == null) {
+ classpath = new Path(getProject());
}
- delombok.setFormatPreferences(Delombok.formatOptionsToMap(fo));
- } catch (InvalidFormatOptionException e) {
- throw new BuildException(e.getMessage() + " Run java -jar lombok.jar --format-help for detailed format help.");
- }
-
- delombok.setOutput(toDir);
- try {
- if (fromDir != null) delombok.addDirectory(fromDir);
- else {
- Iterator<?> it = path.iterator();
- while (it.hasNext()) {
- FileResource fileResource = (FileResource) it.next();
- File baseDir = fileResource.getBaseDir();
- if (baseDir == null) {
- File file = fileResource.getFile();
- delombok.addFile(file.getParentFile(), file.getName());
+ return classpath.createPath();
+ }
+
+ public void setClasspathRef(Reference r) {
+ createClasspath().setRefid(r);
+ }
+
+ public void setSourcepath(Path sourcepath) {
+ if (this.sourcepath == null) {
+ this.sourcepath = sourcepath;
+ } else {
+ this.sourcepath.append(sourcepath);
+ }
+ }
+
+ public Path createSourcepath() {
+ if (sourcepath == null) {
+ sourcepath = new Path(getProject());
+ }
+ return sourcepath.createPath();
+ }
+
+ public void setSourcepathRef(Reference r) {
+ createSourcepath().setRefid(r);
+ }
+
+ public void setFrom(File dir) {
+ this.fromDir = dir;
+ }
+
+ public void setTo(File dir) {
+ this.toDir = dir;
+ }
+
+ public void setVerbose(boolean verbose) {
+ this.verbose = verbose;
+ }
+
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+
+ public void addFileset(FileSet set) {
+ if (path == null) path = new Path(getProject());
+ path.add(set);
+ }
+
+ public Format createFormat() {
+ return new Format();
+ }
+
+ public void addFormat(Format format) {
+ formatOptions.add(format);
+ }
+
+ private static ClassLoader shadowLoader;
+
+ public static Class<?> shadowLoadClass(String name) {
+ try {
+ if (shadowLoader == null) {
+ try {
+ Class.forName("lombok.core.LombokNode");
+ // If we get here, then lombok is already available.
+ shadowLoader = Delombok.class.getClassLoader();
+ } catch (ClassNotFoundException e) {
+ // If we get here, it isn't, and we should use the shadowloader.
+ Class<?> launcherMain = Class.forName("lombok.launch.Main");
+ Method m = launcherMain.getDeclaredMethod("createShadowClassLoader");
+ m.setAccessible(true);
+ shadowLoader = (ClassLoader) m.invoke(null);
+ }
+ }
+
+ return Class.forName(name, true, shadowLoader);
+ } catch (Exception e) {
+ throw Lombok.sneakyThrow(e);
+ }
+ }
+
+ @Override
+ public void execute() throws BuildException {
+ Location loc = getLocation();
+
+ try {
+ Object instance = shadowLoadClass("lombok.delombok.ant.DelombokTaskImpl").newInstance();
+ for(Field selfField : getClass().getDeclaredFields()) {
+ if (selfField.isSynthetic() || Modifier.isStatic(selfField.getModifiers())) continue;
+ Field otherField = instance.getClass().getDeclaredField(selfField.getName());
+ otherField.setAccessible(true);
+ selfField.setAccessible(true);
+ if (selfField.getName().equals("formatOptions")) {
+ List<String> rep = new ArrayList<String>();
+ for (Format f : formatOptions) {
+ if (f.getValue() == null) throw new BuildException("'value' property required for <format>");
+ rep.add(f.getValue());
+ }
+ otherField.set(instance, rep);
} else {
- delombok.addFile(baseDir, fileResource.getName());
+ otherField.set(instance, selfField.get(this));
}
}
+
+ Method m = instance.getClass().getMethod("execute", Location.class);
+ m.setAccessible(true);
+ m.invoke(instance, loc);
+ } catch (InvocationTargetException e) {
+ throw Lombok.sneakyThrow(e.getCause());
+ } catch (Exception e) {
+ throw Lombok.sneakyThrow(e);
}
- delombok.delombok();
- } catch (IOException e) {
- throw new BuildException("I/O problem during delombok", e, getLocation());
}
}
}
diff --git a/src/delombok/lombok/delombok/ant/DelombokTaskImpl.java b/src/delombok/lombok/delombok/ant/DelombokTaskImpl.java
new file mode 100644
index 00000000..470819cd
--- /dev/null
+++ b/src/delombok/lombok/delombok/ant/DelombokTaskImpl.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2009-2015 The Project Lombok Authors.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+package lombok.delombok.ant;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.UnsupportedCharsetException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import lombok.delombok.Delombok;
+import lombok.delombok.Delombok.InvalidFormatOptionException;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Location;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.types.resources.FileResource;
+
+public class DelombokTaskImpl {
+ private File fromDir, toDir;
+ private Path classpath;
+ private Path sourcepath;
+ private boolean verbose;
+ private String encoding;
+ private Path path;
+ private List<String> formatOptions = new ArrayList<String>();
+
+ public void execute(Location location) throws BuildException {
+ if (fromDir == null && path == null) throw new BuildException("Either 'from' attribute, or nested <fileset> tags are required.");
+ if (fromDir != null && path != null) throw new BuildException("You can't specify both 'from' attribute and nested filesets. You need one or the other.");
+ if (toDir == null) throw new BuildException("The to attribute is required.");
+
+ Delombok delombok = new Delombok();
+ if (verbose) delombok.setVerbose(true);
+ try {
+ if (encoding != null) delombok.setCharset(encoding);
+ } catch (UnsupportedCharsetException e) {
+ throw new BuildException("Unknown charset: " + encoding, location);
+ }
+
+ if (classpath != null) delombok.setClasspath(classpath.toString());
+ if (sourcepath != null) delombok.setSourcepath(sourcepath.toString());
+
+ try {
+ delombok.setFormatPreferences(Delombok.formatOptionsToMap(formatOptions));
+ } catch (InvalidFormatOptionException e) {
+ throw new BuildException(e.getMessage() + " Run java -jar lombok.jar --format-help for detailed format help.");
+ }
+
+ delombok.setOutput(toDir);
+ try {
+ if (fromDir != null) delombok.addDirectory(fromDir);
+ else {
+ Iterator<?> it = path.iterator();
+ while (it.hasNext()) {
+ FileResource fileResource = (FileResource) it.next();
+ File baseDir = fileResource.getBaseDir();
+ if (baseDir == null) {
+ File file = fileResource.getFile();
+ delombok.addFile(file.getParentFile(), file.getName());
+ } else {
+ delombok.addFile(baseDir, fileResource.getName());
+ }
+ }
+ }
+ delombok.delombok();
+ } catch (IOException e) {
+ throw new BuildException("I/O problem during delombok", e, location);
+ }
+ }
+}
diff --git a/src/delombok/lombok/delombok/ant/Format.java b/src/delombok/lombok/delombok/ant/Format.java
deleted file mode 100644
index bb2b5e87..00000000
--- a/src/delombok/lombok/delombok/ant/Format.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package lombok.delombok.ant;
-
-public class Format {
- private String value;
-
- @Override public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((value == null) ? 0 : value.hashCode());
- return result;
- }
-
- @Override public boolean equals(Object obj) {
- if (this == obj) return true;
- if (obj == null) return false;
- if (getClass() != obj.getClass()) return false;
- Format other = (Format) obj;
- if (value == null) {
- if (other.value != null) return false;
- } else if (!value.equals(other.value)) return false;
- return true;
- }
-
- @Override public String toString() {
- return "FormatOption [value=" + value + "]";
- }
-
- public String getValue() {
- return value;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-}
diff --git a/src/installer/lombok/installer/InstallerGUI.java b/src/installer/lombok/installer/InstallerGUI.java
index 41832e5d..6b8a58ab 100644
--- a/src/installer/lombok/installer/InstallerGUI.java
+++ b/src/installer/lombok/installer/InstallerGUI.java
@@ -101,6 +101,7 @@ public class InstallerGUI {
public InstallerGUI() {
appWindow = new JFrame(String.format("Project Lombok v%s - Installer", Version.getVersion()));
+ appWindow.setLocationByPlatform(true);
appWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
appWindow.setResizable(false);
appWindow.setIconImage(Toolkit.getDefaultToolkit().getImage(Installer.class.getResource("lombokIcon.png")));