Fix conditional keep rules for new semantics
New conditional syntax is a logical AND, not OR. This means if a resource should be conditionally kept by multiple ids, we need to generate a separate rule for each condition (which will be interpreted as OR). Test: unit tests Bug: 69341430 Change-Id: I0786c65561d36fbf43d181a2dfd0c7eaf1d96b8c
This commit is contained in:
@@ -346,22 +346,20 @@ void WriteKeepSet(const KeepSet& keep_set, OutputStream* out) {
|
||||
can_be_conditional &= CollectLocations(location, keep_set, &locations);
|
||||
}
|
||||
|
||||
for (const UsageLocation& location : entry.second) {
|
||||
printer.Print("# Referenced at ").Println(location.source.to_string());
|
||||
}
|
||||
if (keep_set.conditional_keep_rules_ && can_be_conditional) {
|
||||
printer.Println("-if class **.R$layout {");
|
||||
printer.Indent();
|
||||
for (const UsageLocation& location : locations) {
|
||||
printer.Print("int ")
|
||||
printer.Print("# Referenced at ").Println(location.source.to_string());
|
||||
printer.Print("-if class **.R$layout { int ")
|
||||
.Print(JavaClassGenerator::TransformToFieldName(location.name.entry))
|
||||
.Println(";");
|
||||
.Println("; }");
|
||||
printer.Print("-keep class ").Print(entry.first).Println(" { <init>(...); }");
|
||||
}
|
||||
printer.Undent();
|
||||
printer.Println("}");
|
||||
printer.Println();
|
||||
} else {
|
||||
for (const UsageLocation& location : entry.second) {
|
||||
printer.Print("# Referenced at ").Println(location.source.to_string());
|
||||
}
|
||||
printer.Print("-keep class ").Print(entry.first).Println(" { <init>(...); }");
|
||||
}
|
||||
printer.Print("-keep class ").Print(entry.first).Println(" { <init>(...); }");
|
||||
printer.Println();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user