blob: 2e75836de84e2ebcfccad3ca3c94f325206cfcc8 [file] [log] [blame]
// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.dump;
import java.util.function.Consumer;
public class ProguardConfigSanitizer {
private static void unhandled() {
throw new AssertionError("Unhandled");
}
private Consumer<String> cleanLineCallback = line -> unhandled();
private Consumer<String> commentCallback = comment -> cleanLineCallback.accept(comment);
private Consumer<String> printDirectivesCallback = line -> unhandled();
private Runnable dontShrinkCallback = ProguardConfigSanitizer::unhandled;
private Runnable dontOptimizeCallback = ProguardConfigSanitizer::unhandled;
private Runnable dontObfuscateCallback = ProguardConfigSanitizer::unhandled;
public static ProguardConfigSanitizer createUnhandled() {
return new ProguardConfigSanitizer();
}
public static ProguardConfigSanitizer createDefaultForward(Consumer<String> callback) {
ProguardConfigSanitizer sanitizer = new ProguardConfigSanitizer();
return sanitizer
.onCleanLine(callback)
.onDontShrink(() -> sanitizer.cleanLineCallback.accept("-dontshrink"))
.onDontOptimize(() -> sanitizer.cleanLineCallback.accept("-dontoptimize"))
.onDontObfuscate(() -> sanitizer.cleanLineCallback.accept("-dontobfuscate"))
.onPrintDirective(sanitizer.cleanLineCallback);
}
public ProguardConfigSanitizer onCleanLine(Consumer<String> callback) {
cleanLineCallback = callback;
return this;
}
public ProguardConfigSanitizer onDontShrink(Runnable callback) {
dontShrinkCallback = callback;
return this;
}
public ProguardConfigSanitizer onDontOptimize(Runnable callback) {
dontOptimizeCallback = callback;
return this;
}
public ProguardConfigSanitizer onDontObfuscate(Runnable callback) {
dontObfuscateCallback = callback;
return this;
}
public ProguardConfigSanitizer onComment(Consumer<String> callback) {
commentCallback = callback;
return this;
}
public ProguardConfigSanitizer onPrintDirective(Consumer<String> callback) {
printDirectivesCallback = callback;
return this;
}
public void sanitize(String line) {
String trimmed = line.trim();
if (trimmed.equals("-dontobfuscate")) {
dontObfuscateCallback.run();
} else if (trimmed.equals("-dontoptimize")) {
dontOptimizeCallback.run();
} else if (trimmed.equals("-dontshrink")) {
dontShrinkCallback.run();
} else if (trimmed.startsWith("-print")) {
printDirectivesCallback.accept(line);
} else if (trimmed.startsWith("#")) {
commentCallback.accept(line);
} else {
cleanLineCallback.accept(line);
}
}
}