aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/lombok/core/configuration/ConfigurationFile.java32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/core/lombok/core/configuration/ConfigurationFile.java b/src/core/lombok/core/configuration/ConfigurationFile.java
index bb15d177..a6a3cb76 100644
--- a/src/core/lombok/core/configuration/ConfigurationFile.java
+++ b/src/core/lombok/core/configuration/ConfigurationFile.java
@@ -27,13 +27,19 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public abstract class ConfigurationFile {
+ private static final Pattern VARIABLE = Pattern.compile("\\<(.+?)\\>");
private static final String LOMBOK_CONFIG_FILENAME = "lombok.config";
+ private static final Map<String, String> ENV = new HashMap<String, String>(System.getenv());;
private static final ThreadLocal<byte[]> buffers = new ThreadLocal<byte[]>() {
protected byte[] initialValue() {
@@ -41,6 +47,10 @@ public abstract class ConfigurationFile {
}
};
+ static void setEnvironment(String key, String value) {
+ ENV.put(key, value);
+ }
+
private final String identifier;
public static ConfigurationFile forFile(File file) {
@@ -48,7 +58,7 @@ public abstract class ConfigurationFile {
}
public static ConfigurationFile forDirectory(File directory) {
- return ConfigurationFile.forFile(new File(directory, LOMBOK_CONFIG_FILENAME));
+ return forFile(new File(directory, LOMBOK_CONFIG_FILENAME));
}
public static ConfigurationFile fromCharSequence(String identifier, CharSequence contents, long lastModified) {
@@ -117,7 +127,7 @@ public abstract class ConfigurationFile {
if (parts.length > 2) return null;
String realFileName = parts[0];
- File file = resolveFile(realFileName);
+ File file = resolveFile(replaceEnvironmentVariables(realFileName));
if (realFileName.endsWith(".zip") || realFileName.endsWith(".jar")) {
try {
return ArchivedConfigurationFile.create(file, URI.create(parts.length == 1 ? LOMBOK_CONFIG_FILENAME : parts[1]));
@@ -166,6 +176,24 @@ public abstract class ConfigurationFile {
File parent = file.getParentFile().getParentFile();
return parent == null ? null : forDirectory(parent);
}
+
+ private static String replaceEnvironmentVariables(String fileName) {
+ int start = 0;;
+ StringBuffer result = new StringBuffer();
+ if (fileName.startsWith("~")) {
+ start = 1;
+ result.append(System.getProperty("user.home", "~"));
+ }
+ Matcher matcher = VARIABLE.matcher(fileName.substring(start));
+ while (matcher.find()) {
+ String key = matcher.group(1);
+ String value = ENV.get(key);
+ if (value == null) value = "<" + key + ">";
+ matcher.appendReplacement(result, value);
+ }
+ matcher.appendTail(result);
+ return result.toString();
+ }
}
private static class ArchivedConfigurationFile extends ConfigurationFile {