mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-14 08:18:29 +00:00
Config import: add support for environment variables
This commit is contained in:
1 parent
df4501a648
commit
0e583c0122
8 files changed
+61
-10
No files matched your search
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user