package lombok.core.configuration; import com.zwitserloot.cmdreader.CmdReader; import com.zwitserloot.cmdreader.Description; import com.zwitserloot.cmdreader.Excludes; import com.zwitserloot.cmdreader.FullName; import com.zwitserloot.cmdreader.InvalidCommandLineException; import com.zwitserloot.cmdreader.Mandatory; import com.zwitserloot.cmdreader.Requires; import com.zwitserloot.cmdreader.Sequential; import com.zwitserloot.cmdreader.Shorthand; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.net.URI; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import lombok.ConfigurationKeys; import lombok.core.LombokApp; import lombok.core.configuration.ConfigurationKeysLoader; import lombok.core.configuration.ConfigurationParser; /* loaded from: com.discord-121111.apk:lombok/core/configuration/ConfigurationApp.SCL.lombok */ public class ConfigurationApp extends LombokApp { private PrintStream out = System.out; private PrintStream err = System.err; private static final URI NO_CONFIG = URI.create(""); private static final ConfigurationProblemReporter VOID = new AnonymousClass1(); /* renamed from: lombok.core.configuration.ConfigurationApp$1 reason: invalid class name */ /* loaded from: com.discord-121111.apk:lombok/core/configuration/ConfigurationApp$1.SCL.lombok */ class AnonymousClass1 implements ConfigurationProblemReporter { AnonymousClass1() { } @Override // lombok.core.configuration.ConfigurationProblemReporter public void report(String str, String str2, int i, CharSequence charSequence) { } } /* renamed from: lombok.core.configuration.ConfigurationApp$2 reason: invalid class name */ /* loaded from: com.discord-121111.apk:lombok/core/configuration/ConfigurationApp$2.SCL.lombok */ class AnonymousClass2 implements ConfigurationProblemReporter { private final /* synthetic */ List val$problems; AnonymousClass2(List list) { this.val$problems = list; } @Override // lombok.core.configuration.ConfigurationProblemReporter public void report(String str, String str2, int i, CharSequence charSequence) { this.val$problems.add(String.format("%s: %s (%s:%d)", str2, charSequence, str, Integer.valueOf(i))); } } /* renamed from: lombok.core.configuration.ConfigurationApp$3 reason: invalid class name */ /* loaded from: com.discord-121111.apk:lombok/core/configuration/ConfigurationApp$3.SCL.lombok */ class AnonymousClass3 implements ConfigurationParser.Collector { private final /* synthetic */ Deque val$round; private final /* synthetic */ Collection val$keys; private final /* synthetic */ Map val$result; AnonymousClass3(Deque deque, Collection collection, Map map) { this.val$round = deque; this.val$keys = collection; this.val$result = map; } @Override // lombok.core.configuration.ConfigurationParser.Collector public void addImport(ConfigurationFile configurationFile, ConfigurationFile configurationFile2, int i) { this.val$round.push(new Source(configurationFile, String.valueOf(configurationFile.description()) + " (imported from " + configurationFile2.description() + ":" + i + ")")); } @Override // lombok.core.configuration.ConfigurationParser.Collector public void clear(ConfigurationKey configurationKey, ConfigurationFile configurationFile, int i) { trace(configurationKey, "clear " + configurationKey.getKeyName(), i); } @Override // lombok.core.configuration.ConfigurationParser.Collector public void set(ConfigurationKey configurationKey, Object obj, ConfigurationFile configurationFile, int i) { trace(configurationKey, String.valueOf(configurationKey.getKeyName()) + " = " + obj, i); } @Override // lombok.core.configuration.ConfigurationParser.Collector public void add(ConfigurationKey configurationKey, Object obj, ConfigurationFile configurationFile, int i) { trace(configurationKey, String.valueOf(configurationKey.getKeyName()) + " += " + obj, i); } @Override // lombok.core.configuration.ConfigurationParser.Collector public void remove(ConfigurationKey configurationKey, Object obj, ConfigurationFile configurationFile, int i) { trace(configurationKey, String.valueOf(configurationKey.getKeyName()) + " -= " + obj, i); } private void trace(ConfigurationKey configurationKey, String str, int i) { if (this.val$keys.contains(configurationKey) || configurationKey == ConfigurationKeys.STOP_BUBBLING) { List list = (List) this.val$result.get(configurationKey); if (list == null) { list = new ArrayList(); this.val$result.put(configurationKey, list); } list.add(String.format("%4d: %s", Integer.valueOf(i), str)); } } } /* renamed from: lombok.core.configuration.ConfigurationApp$4 reason: invalid class name */ /* loaded from: com.discord-121111.apk:lombok/core/configuration/ConfigurationApp$4.SCL.lombok */ class AnonymousClass4 implements Comparator { AnonymousClass4() { } public int compare(URI uri, URI uri2) { return uri.toString().compareTo(uri2.toString()); } } /* loaded from: com.discord-121111.apk:lombok/core/configuration/ConfigurationApp$CmdArgs.SCL.lombok */ public static class CmdArgs { @Mandatory(onlyIfNot = {"help", "generate"}) @Description("Paths to java files or directories the configuration is to be printed for.") @Sequential private List paths = new ArrayList(); @Excludes({"paths"}) @Description("Generates a list containing all the available configuration parameters. Add --verbose to print more information.") @Shorthand({"g"}) boolean generate = false; @Description("Displays more information.") @Shorthand({"v"}) boolean verbose = false; @Requires({"verbose"}) @Description("Also display files that don't mention the key.") @Shorthand({"n"}) @FullName("not-mentioned") boolean notMentioned = false; @Description("Limit the result to these keys.") @Shorthand({"k"}) private List key = new ArrayList(); @Description("Shows this help text.") @Shorthand({"h", "?"}) boolean help = false; static /* synthetic */ List access$0(CmdArgs cmdArgs) { return cmdArgs.key; } static /* synthetic */ List access$1(CmdArgs cmdArgs) { return cmdArgs.paths; } } /* loaded from: com.discord-121111.apk:lombok/core/configuration/ConfigurationApp$Source.SCL.lombok */ private static final class Source { final ConfigurationFile file; final String description; Source(ConfigurationFile configurationFile, String str) { this.file = configurationFile; this.description = str; } } @Override // lombok.core.LombokApp public String getAppName() { return "config"; } @Override // lombok.core.LombokApp public String getAppDescription() { return "Prints the configurations for the provided paths to standard out."; } @Override // lombok.core.LombokApp public List getAppAliases() { return Arrays.asList("configuration", "config", "conf", "settings"); } @Override // lombok.core.LombokApp public int runApp(List list) throws Exception { CmdReader of = CmdReader.of(CmdArgs.class); try { CmdArgs cmdArgs = (CmdArgs) of.make((String[]) list.toArray(new String[0])); if (cmdArgs.help) { this.out.println(of.generateCommandLineHelp("java -jar lombok.jar configuration")); return 0; } ConfigurationKeysLoader.LoaderLoader.loadAllConfigurationKeys(); Collection> checkKeys = checkKeys(CmdArgs.access$0(cmdArgs)); if (checkKeys == null) { return 1; } boolean z2 = cmdArgs.verbose; if (cmdArgs.generate) { return generate(checkKeys, z2, !CmdArgs.access$0(cmdArgs).isEmpty()); } return display(checkKeys, z2, CmdArgs.access$1(cmdArgs), !CmdArgs.access$0(cmdArgs).isEmpty(), cmdArgs.notMentioned); } catch (InvalidCommandLineException e) { this.err.println(e.getMessage()); this.err.println(of.generateCommandLineHelp("java -jar lombok.jar configuration")); return 1; } } public ConfigurationApp redirectOutput(PrintStream printStream, PrintStream printStream2) { if (printStream != null) { this.out = printStream; } if (printStream2 != null) { this.err = printStream2; } return this; } public int generate(Collection> collection, boolean z2, boolean z3) { Iterator> it = collection.iterator(); while (it.hasNext()) { ConfigurationKey next = it.next(); if (z3 || !next.isHidden()) { String keyName = next.getKeyName(); ConfigurationDataType type = next.getType(); String description = next.getDescription(); boolean z4 = description != null && !description.isEmpty(); if (!z2) { this.out.println(keyName); if (z4) { this.out.print(" "); this.out.println(description); } this.out.println(); } else { this.out.printf("##%n## Key : %s%n## Type: %s%n", keyName, type); if (z4) { this.out.printf("##%n## %s%n", description); } this.out.printf("##%n## Examples:%n#%n", new Object[0]); this.out.printf("# clear %s%n", keyName); String exampleValue = type.getParser().exampleValue(); if (type.isList()) { this.out.printf("# %s += %s%n", keyName, exampleValue); this.out.printf("# %s -= %s%n", keyName, exampleValue); } else { this.out.printf("# %s = %s%n", keyName, exampleValue); } this.out.printf("#%n%n", new Object[0]); } } } if (z2) { return 0; } this.out.println("Use --verbose for more information."); return 0; } public int display(Collection> collection, boolean z2, Collection collection2, boolean z3, boolean z4) throws Exception { TreeMap> findSharedDirectories = findSharedDirectories(collection2); if (findSharedDirectories == null) { return 1; } Set remove = findSharedDirectories.remove(NO_CONFIG); if (remove != null) { if (remove.size() == 1) { this.out.printf("No 'lombok.config' found for '%s'.%n", remove.iterator().next()); } else { this.out.println("No 'lombok.config' found for: "); Iterator it = remove.iterator(); while (it.hasNext()) { this.out.printf("- %s%n", it.next()); } } } ArrayList arrayList = new ArrayList(); AnonymousClass2 r0 = new AnonymousClass2(arrayList); FileSystemSourceCache fileSystemSourceCache = new FileSystemSourceCache(); ConfigurationParser configurationParser = new ConfigurationParser(r0); boolean z5 = true; Iterator>> it2 = findSharedDirectories.entrySet().iterator(); while (it2.hasNext()) { Map.Entry> next = it2.next(); if (!z5) { this.out.printf("%n%n", new Object[0]); } Set value = next.getValue(); if (value.size() != 1) { this.out.printf("Configuration for:%n", new Object[0]); Iterator it3 = value.iterator(); while (it3.hasNext()) { this.out.printf("- %s%n", it3.next()); } this.out.println(); } else if (collection2.size() != 1) { this.out.printf("Configuration for '%s'.%n%n", value.iterator().next()); } URI key = next.getKey(); BubblingConfigurationResolver bubblingConfigurationResolver = new BubblingConfigurationResolver(fileSystemSourceCache.forUri(key), fileSystemSourceCache.fileToSource(configurationParser)); Map, ? extends Collection> trace = trace(collection, key, z4); boolean z6 = false; Iterator> it4 = collection.iterator(); while (it4.hasNext()) { ConfigurationKey next2 = it4.next(); Object resolve = bubblingConfigurationResolver.resolve(next2); Collection collection3 = (Collection) trace.get(next2); if (!collection3.isEmpty() || z3) { if (z6 && z2) { this.out.println(); } printValue(next2, resolve, z2, collection3); z6 = true; } } if (!z6) { this.out.println(""); } z5 = false; } if (arrayList.isEmpty()) { return 0; } this.err.printf("Problems in the configuration files:%n", new Object[0]); Iterator it5 = arrayList.iterator(); while (it5.hasNext()) { this.err.printf("- %s%n", (String) it5.next()); } return 0; } private void printValue(ConfigurationKey configurationKey, Object obj, boolean z2, Collection collection) { if (z2) { this.out.printf("# %s%n", configurationKey.getDescription()); } if (obj == null) { this.out.printf("clear %s%n", configurationKey.getKeyName()); } else if (obj instanceof List) { List list = (List) obj; if (list.isEmpty()) { this.out.printf("clear %s%n", configurationKey.getKeyName()); } Iterator it = list.iterator(); while (it.hasNext()) { this.out.printf("%s += %s%n", configurationKey.getKeyName(), it.next()); } } else { this.out.printf("%s = %s%n", configurationKey.getKeyName(), obj); } if (z2) { Iterator it2 = collection.iterator(); while (it2.hasNext()) { this.out.printf("# %s%n", it2.next()); } } } private Map, ? extends Collection> trace(Collection> collection, URI uri, boolean z2) throws Exception { HashMap hashMap = new HashMap(); Iterator> it = collection.iterator(); while (it.hasNext()) { hashMap.put(it.next(), new ArrayList()); } HashSet hashSet = new HashSet(); boolean z3 = false; HashSet hashSet2 = new HashSet(); for (ConfigurationFile forDirectory = ConfigurationFile.forDirectory(new File(uri)); forDirectory != null && !z3; forDirectory = forDirectory.parent()) { if (forDirectory.exists()) { ArrayDeque arrayDeque = new ArrayDeque(); arrayDeque.push(new Source(forDirectory, forDirectory.description())); while (!arrayDeque.isEmpty()) { Source pop = arrayDeque.pop(); if (pop != null && hashSet2.add(pop.file) && pop.file.exists()) { Map, List> trace = trace(pop.file, collection, arrayDeque); z3 = stopBubbling(trace.get(ConfigurationKeys.STOP_BUBBLING)); Iterator> it2 = collection.iterator(); while (it2.hasNext()) { ConfigurationKey next = it2.next(); List list = trace.get(next); if (list == null) { list = new ArrayList<>(); if (z2) { list.add(""); list.add(String.valueOf(pop.description) + ":"); list.add(" <'" + next.getKeyName() + "' not mentioned>"); } } else { hashSet.add(next); list.add(0, String.valueOf(pop.description) + ":"); list.add(0, ""); } ((List) hashMap.get(next)).addAll(0, list); } } } } } Iterator> it3 = collection.iterator(); while (it3.hasNext()) { ConfigurationKey next2 = it3.next(); if (hashSet.contains(next2)) { List list2 = (List) hashMap.get(next2); list2.remove(0); if (z3) { String str = (String) list2.get(0); list2.set(0, String.valueOf(str.substring(0, str.length() - 1)) + " (stopped bubbling):"); } } else { hashMap.put(next2, Collections.emptyList()); } } return hashMap; } private Map, List> trace(ConfigurationFile configurationFile, Collection> collection, Deque deque) throws IOException { HashMap hashMap = new HashMap(); new ConfigurationParser(VOID).parse(configurationFile, new AnonymousClass3(deque, collection, hashMap)); return hashMap; } private boolean stopBubbling(List list) { return list != null && !list.isEmpty() && list.get(list.size() - 1).endsWith("true"); } private Collection> checkKeys(List list) { Map> registeredKeys = ConfigurationKey.registeredKeys(); if (list.isEmpty()) { return registeredKeys.values(); } ArrayList arrayList = new ArrayList(); Iterator it = list.iterator(); while (it.hasNext()) { String next = it.next(); ConfigurationKey configurationKey = registeredKeys.get(next); if (configurationKey == null) { this.err.printf("Unknown key '%s'%n", next); return null; } arrayList.remove(configurationKey); arrayList.add(configurationKey); } return arrayList; } private TreeMap> findSharedDirectories(Collection collection) { TreeMap> treeMap = new TreeMap<>(new AnonymousClass4()); Iterator it = collection.iterator(); while (it.hasNext()) { String next = it.next(); File file = new File(next); if (!file.exists()) { this.err.printf("File not found: '%s'%n", next); return null; } URI findFirstLombokDirectory = findFirstLombokDirectory(file); Set set = treeMap.get(findFirstLombokDirectory); if (set == null) { set = new TreeSet<>(); treeMap.put(findFirstLombokDirectory, set); } set.add(next); } return treeMap; } private URI findFirstLombokDirectory(File file) { File file2 = new File(file.toURI().normalize()); if (file.isFile()) { file2 = file2.getParentFile(); } while (file2 != null) { if (new File(file2, "lombok.config").exists()) { return file2.toURI(); } file2 = file2.getParentFile(); } return NO_CONFIG; } }