diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2013-12-11 22:00:12 +0100 |
---|---|---|
committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2013-12-11 22:40:48 +0100 |
commit | a19b99cba2fdee4495bafce558a28af49e8e36f0 (patch) | |
tree | 73f77fdae6f5e1ba3407157fec1273f51e5532b6 /src/delombok | |
parent | 9ac86c8a234f2ecd280f27f0dbda15440b1bf155 (diff) | |
download | lombok-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.java | 34 | ||||
-rw-r--r-- | src/delombok/lombok/delombok/DelombokResult.java | 15 | ||||
-rw-r--r-- | src/delombok/lombok/delombok/FormatPreferenceScanner.java | 17 | ||||
-rw-r--r-- | src/delombok/lombok/delombok/FormatPreferences.java | 61 |
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; + } } |