aboutsummaryrefslogtreecommitdiff
path: root/src/delombok
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2013-12-11 22:00:12 +0100
committerReinier Zwitserloot <reinier@zwitserloot.com>2013-12-11 22:40:48 +0100
commita19b99cba2fdee4495bafce558a28af49e8e36f0 (patch)
tree73f77fdae6f5e1ba3407157fec1273f51e5532b6 /src/delombok
parent9ac86c8a234f2ecd280f27f0dbda15440b1bf155 (diff)
downloadlombok-a19b99cba2fdee4495bafce558a28af49e8e36f0.tar.gz
lombok-a19b99cba2fdee4495bafce558a28af49e8e36f0.tar.bz2
lombok-a19b99cba2fdee4495bafce558a28af49e8e36f0.zip
Added complete support for delombok's 'pretty' format options; covering all of the issue #608.
Diffstat (limited to 'src/delombok')
-rw-r--r--src/delombok/lombok/delombok/Delombok.java34
-rw-r--r--src/delombok/lombok/delombok/DelombokResult.java15
-rw-r--r--src/delombok/lombok/delombok/FormatPreferenceScanner.java17
-rw-r--r--src/delombok/lombok/delombok/FormatPreferences.java61
4 files changed, 85 insertions, 42 deletions
diff --git a/src/delombok/lombok/delombok/Delombok.java b/src/delombok/lombok/delombok/Delombok.java
index ef2d2f38..e5b719f1 100644
--- a/src/delombok/lombok/delombok/Delombok.java
+++ b/src/delombok/lombok/delombok/Delombok.java
@@ -206,26 +206,47 @@ public class Delombok {
System.out.println(indentAndWordbreak(e.getValue(), 4, 70));
}
System.out.println("Example: -f indent:4 -f emptyLines:indent");
+ System.out.println("The '-f pretty' option is shorthand for '-f suppressWarnings:skip -f danceAroundIdeChecks:skip -f generateDelombokComment:skip -f javaLangAsFQN:skip'");
System.exit(0);
return;
}
+ boolean prettyEnabled = false;
for (String format : args.format) {
int idx = format.indexOf(':');
if (idx == -1) {
- System.err.println("Format keys need to be 2 values separated with a colon. Try -f help.");
- System.exit(1);
- return;
+ if (format.equalsIgnoreCase("pretty")) {
+ prettyEnabled = true;
+ continue;
+ } else {
+ System.err.println("Format keys need to be 2 values separated with a colon. Try -f help.");
+ System.exit(1);
+ return;
+ }
}
String key = format.substring(0, idx);
String value = format.substring(idx + 1);
- if (!FormatPreferences.getKeysAndDescriptions().containsKey(key)) {
+ boolean valid = false;
+ for (String k : FormatPreferences.getKeysAndDescriptions().keySet()) {
+ if (k.equalsIgnoreCase(key)) {
+ valid = true;
+ break;
+ }
+ }
+ if (!valid) {
System.err.println("Unknown format key: '" + key + "'. Try -f help.");
System.exit(1);
return;
}
- formatPrefs.put(key, value);
+ formatPrefs.put(key.toLowerCase(), value);
+ }
+
+ if (prettyEnabled) {
+ if (!formatPrefs.containsKey("suppresswarnings")) formatPrefs.put("suppresswarnings", "skip");
+ if (!formatPrefs.containsKey("dancearoundidechecks")) formatPrefs.put("dancearoundidechecks", "skip");
+ if (!formatPrefs.containsKey("generatedelombokcomment")) formatPrefs.put("generatedelombokcomment", "skip");
+ if (!formatPrefs.containsKey("javalangasfqn")) formatPrefs.put("javalangasfqn", "skip");
}
delombok.setFormatPreferences(formatPrefs);
@@ -474,8 +495,9 @@ public class Delombok {
Object care = callAttributeMethodOnJavaCompiler(delegate, delegate.todo);
callFlowMethodOnJavaCompiler(delegate, care);
+ FormatPreferences fps = new FormatPreferences(formatPrefs);
for (JCCompilationUnit unit : roots) {
- DelombokResult result = new DelombokResult(catcher.getComments(unit), unit, force || options.isChanged(unit), formatPrefs);
+ DelombokResult result = new DelombokResult(catcher.getComments(unit), unit, force || options.isChanged(unit), fps);
if (verbose) feedback.printf("File: %s [%s]\n", unit.sourcefile.getName(), result.isChanged() ? "delomboked" : "unchanged");
Writer rawWriter;
if (presetWriter != null) rawWriter = presetWriter;
diff --git a/src/delombok/lombok/delombok/DelombokResult.java b/src/delombok/lombok/delombok/DelombokResult.java
index 52e47e02..84aeb68b 100644
--- a/src/delombok/lombok/delombok/DelombokResult.java
+++ b/src/delombok/lombok/delombok/DelombokResult.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2010 The Project Lombok Authors.
+ * Copyright (C) 2009-2013 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
@@ -25,7 +25,6 @@ import java.io.IOException;
import java.io.Writer;
import java.util.Date;
import java.util.List;
-import java.util.Map;
import javax.tools.JavaFileObject;
@@ -37,9 +36,9 @@ public class DelombokResult {
private final List<CommentInfo> comments;
private final JCCompilationUnit compilationUnit;
private final boolean changed;
- private final Map<String, String> formatPreferences;
+ private final FormatPreferences formatPreferences;
- public DelombokResult(List<CommentInfo> comments, JCCompilationUnit compilationUnit, boolean changed, Map<String, String> formatPreferences) {
+ public DelombokResult(List<CommentInfo> comments, JCCompilationUnit compilationUnit, boolean changed, FormatPreferences formatPreferences) {
this.comments = comments;
this.compilationUnit = compilationUnit;
this.changed = changed;
@@ -55,9 +54,11 @@ public class DelombokResult {
}
}
- out.write("// Generated by delombok at ");
- out.write(String.valueOf(new Date()));
- out.write(System.getProperty("line.separator"));
+ if (formatPreferences.generateDelombokComment()) {
+ out.write("// Generated by delombok at ");
+ out.write(String.valueOf(new Date()));
+ out.write(System.getProperty("line.separator"));
+ }
com.sun.tools.javac.util.List<CommentInfo> comments_;
if (comments instanceof com.sun.tools.javac.util.List) comments_ = (com.sun.tools.javac.util.List<CommentInfo>) comments;
diff --git a/src/delombok/lombok/delombok/FormatPreferenceScanner.java b/src/delombok/lombok/delombok/FormatPreferenceScanner.java
index fc823ccb..dffd535d 100644
--- a/src/delombok/lombok/delombok/FormatPreferenceScanner.java
+++ b/src/delombok/lombok/delombok/FormatPreferenceScanner.java
@@ -37,17 +37,16 @@ import java.util.Map;
*/
public class FormatPreferenceScanner {
/** Checks validity of preferences, and returns with a non-null value if ALL format keys are available, thus negating the need for a scan. */
- private FormatPreferences tryEasy(Map<String, String> preferences, boolean force) {
+ private FormatPreferences tryEasy(FormatPreferences preferences, boolean force) {
int count = 0;
- for (Map.Entry<String, String> e : preferences.entrySet()) {
- if (!FormatPreferences.KEYS.containsKey(e.getKey())) throw new IllegalArgumentException("Unknown format key: " + e.getKey());
+ for (Map.Entry<String, String> e : preferences.rawMap.entrySet()) {
if (!"scan".equalsIgnoreCase(e.getValue())) count++;
}
- if (force || count >= FormatPreferences.KEYS.size()) return new FormatPreferences(preferences, "\t", false);
+ if (force || count >= FormatPreferences.KEYS.size()) return preferences;
return null;
}
- public FormatPreferences scan(Map<String, String> preferences, final CharSequence source) {
+ public FormatPreferences scan(FormatPreferences preferences, final CharSequence source) {
FormatPreferences fps = tryEasy(preferences, source == null);
if (fps != null) return fps;
@@ -75,7 +74,7 @@ public class FormatPreferenceScanner {
}
}
- public FormatPreferences scan(Map<String, String> preferences, char[] source) {
+ public FormatPreferences scan(FormatPreferences preferences, char[] source) {
FormatPreferences fps = tryEasy(preferences, source == null);
if (fps != null) return fps;
@@ -86,14 +85,14 @@ public class FormatPreferenceScanner {
}
}
- public FormatPreferences scan(Map<String, String> preferences, Reader in) throws IOException {
+ public FormatPreferences scan(FormatPreferences preferences, Reader in) throws IOException {
FormatPreferences fps = tryEasy(preferences, in == null);
if (fps != null) return fps;
return scan_(preferences, in);
}
- private static FormatPreferences scan_(Map<String, String> preferences, Reader in) throws IOException {
+ private static FormatPreferences scan_(FormatPreferences preferences, Reader in) throws IOException {
int filledEmpties = 0;
List<String> indents = new ArrayList<String>();
@@ -188,6 +187,6 @@ public class FormatPreferenceScanner {
indent = new String(id);
}
- return new FormatPreferences(preferences, indent, filledEmpties > 0);
+ return new FormatPreferences(preferences.rawMap, indent, filledEmpties > 0);
}
}
diff --git a/src/delombok/lombok/delombok/FormatPreferences.java b/src/delombok/lombok/delombok/FormatPreferences.java
index 2df0ac60..9bd668a5 100644
--- a/src/delombok/lombok/delombok/FormatPreferences.java
+++ b/src/delombok/lombok/delombok/FormatPreferences.java
@@ -29,16 +29,23 @@ import java.util.Map;
public final class FormatPreferences {
private final String indent;
private final Boolean filledEmpties;
- private final boolean generateSuppressWarnings;
private final boolean generateFinalParams;
+ private final boolean generateConstructorProperties;
+ private final boolean generateSuppressWarnings, danceAroundIdeChecks, generateDelombokComment, javaLangAsFqn;
+ final Map<String, String> rawMap;
+
static final Map<String, String> KEYS;
static {
Map<String, String> keys = new LinkedHashMap<String, String>();
keys.put("indent", "The indent to use. 'tab' can be used to represent 1 tab. A number means that many spaces. Default: 'tab'");
keys.put("emptyLines", "Either 'indent' or 'blank'. indent means: Indent an empty line to the right level. Default: 'blank'");
- keys.put("suppressWarnings", "Either 'generate' or 'skip'. generate means: All lombok-generated methods get a @SuppressWarnings annotation. Default: 'generate'");
keys.put("finalParams", "Either 'generate' or 'skip'. generate means: All lombok-generated methods set all parameters to final. Default: 'generate'");
+ keys.put("constructorProperties", "Either 'generate' or 'skip'. generate means: All lombok-generated constructors with 1 or more arguments get an @ConstructorProperties annotation. Default: 'generate'");
+ keys.put("suppressWarnings", "Either 'generate' or 'skip'. generate means: All lombok-generated methods get a @SuppressWarnings annotation. Default: 'generate'");
+ keys.put("danceAroundIdeChecks", "Either 'generate' or 'skip'. generate means: Lombok will intentionally obfuscate some generated code to avoid IDE warnings. Default: 'generate'");
+ keys.put("generateDelombokComment", "Either 'generate' or 'skip'. generate means: Any file modified by delombok will have a comment stating this at the top. Default: 'generate'");
+ keys.put("javaLangAsFQN", "Either 'generate' or 'skip'. generate means: Any generated reference to java.lang classes are prefixed with `java.lang.`. Default: 'generate'");
KEYS = Collections.unmodifiableMap(keys);
}
@@ -47,6 +54,7 @@ public final class FormatPreferences {
}
public FormatPreferences(Map<String, String> preferences, String indent, Boolean filledEmpties) {
+ this.rawMap = preferences;
if (preferences == null) preferences = Collections.emptyMap();
String indent_ = preferences.get("indent");
@@ -61,7 +69,7 @@ public final class FormatPreferences {
} catch (NumberFormatException ignore) {}
indent = indent_.replace("\\t", "\t").replace("tab", "\t");
}
- String empties_ = preferences.get("emptyLines");
+ String empties_ = preferences.get("emptyLines".toLowerCase());
if ("indent".equalsIgnoreCase(empties_)) filledEmpties = true;
else if ("blank".equalsIgnoreCase(empties_)) filledEmpties = false;
else if (empties_ != null && !"scan".equalsIgnoreCase(empties_)) {
@@ -71,23 +79,20 @@ public final class FormatPreferences {
this.indent = indent;
this.filledEmpties = filledEmpties;
- String generateFinalParams_ = preferences.get("finalParams");
- if (generateFinalParams_ == null || "generate".equalsIgnoreCase(generateFinalParams_)) {
- this.generateFinalParams = true;
- } else if ("skip".equalsIgnoreCase(generateFinalParams_)) {
- this.generateFinalParams = false;
- } else {
- throw new IllegalArgumentException("Legal values for 'finalParams' are 'generate', or 'skip'.");
- }
-
- String generateSuppressWarnings_ = preferences.get("suppressWarnings");
- if (generateSuppressWarnings_ == null || "generate".equalsIgnoreCase(generateSuppressWarnings_)) {
- this.generateSuppressWarnings = true;
- } else if ("skip".equalsIgnoreCase(generateSuppressWarnings_)) {
- this.generateSuppressWarnings = false;
- } else {
- throw new IllegalArgumentException("Legal values for 'suppressWarnings' are 'generate', or 'skip'.");
- }
+ this.generateFinalParams = unrollBoolean(preferences, "finalParams", "generate", "skip", true);
+ this.generateConstructorProperties = unrollBoolean(preferences, "constructorProperties", "generate", "skip", true);
+ this.generateSuppressWarnings = unrollBoolean(preferences, "suppressWarnings", "generate", "skip", true);
+ this.danceAroundIdeChecks = unrollBoolean(preferences, "danceAroundIdeChecks", "generate", "skip", true);
+ this.generateDelombokComment = unrollBoolean(preferences, "generateDelombokComment", "generate", "skip", true);
+ this.javaLangAsFqn = unrollBoolean(preferences, "javaLangAsFQN", "generate", "skip", true);
+ }
+
+ private static boolean unrollBoolean(Map<String, String> preferences, String name, String trueStr, String falseStr, boolean defaultVal) {
+ String v_ = preferences.get(name.toLowerCase());
+ if (v_ == null) return defaultVal;
+ if (trueStr.equalsIgnoreCase(v_)) return true;
+ if (falseStr.equalsIgnoreCase(v_)) return false;
+ throw new IllegalArgumentException("Legal values for '" + name + "' are '" + trueStr + "', or '" + falseStr + "'.");
}
public static Map<String, String> getKeysAndDescriptions() {
@@ -110,4 +115,20 @@ public final class FormatPreferences {
public boolean generateFinalParams() {
return generateFinalParams;
}
+
+ public boolean danceAroundIdeChecks() {
+ return danceAroundIdeChecks;
+ }
+
+ public boolean generateDelombokComment() {
+ return generateDelombokComment;
+ }
+
+ public boolean javaLangAsFqn() {
+ return javaLangAsFqn;
+ }
+
+ public boolean generateConstructorProperties() {
+ return generateConstructorProperties;
+ }
}