Enable new missing class reporting in tests
Bug: 154849103
Fixes: 70293332
Change-Id: Ie8071f9ff2c60f9871fa054a6f33ed74577221be
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index af6d9f6..37b8d28 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -107,13 +107,16 @@
}
public List<DexProgramClass> classesWithDeterministicOrder() {
- List<DexProgramClass> classes = new ArrayList<>(programClasses());
- // We never actually sort by anything but the DexType, this is just here in case we ever change
- // that.
- if (options.testing.deterministicSortingBasedOnDexType) {
- // To keep the order deterministic, we sort the classes by their type, which is a unique key.
- classes.sort(Comparator.comparing(DexClass::getType));
- }
+ return classesWithDeterministicOrder(new ArrayList<>(programClasses()));
+ }
+
+ public static <T extends DexClass> List<T> classesWithDeterministicOrder(Collection<T> classes) {
+ return classesWithDeterministicOrder(new ArrayList<>(classes));
+ }
+
+ public static <T extends DexClass> List<T> classesWithDeterministicOrder(List<T> classes) {
+ // To keep the order deterministic, we sort the classes by their type, which is a unique key.
+ classes.sort(Comparator.comparing(DexClass::getType));
return classes;
}
@@ -129,15 +132,9 @@
}
public abstract static class Builder<T extends Builder<T>> {
- // We handle program class collection separately from classpath
- // and library class collections. Since while we assume program
- // class collection should always be fully loaded and thus fully
- // represented by the map (making it easy, for example, adding
- // new or removing existing classes), classpath and library
- // collections will be considered monolithic collections.
- private List<DexProgramClass> programClasses = new ArrayList<>();
- private List<DexClasspathClass> classpathClasses = new ArrayList<>();
+ private final List<DexProgramClass> programClasses = new ArrayList<>();
+ private final List<DexClasspathClass> classpathClasses = new ArrayList<>();
final List<DataResourceProvider> dataResourceProviders = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index c267e7c..4f38fb2 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -63,7 +63,7 @@
return programClasses;
}
- public Collection<DexLibraryClass> libraryClasses() {
+ public List<DexLibraryClass> libraryClasses() {
return libraryClasses;
}
diff --git a/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java b/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
index c6f7a5f..f3385af 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
@@ -34,7 +34,7 @@
}
public static MethodMapBacking createSorted() {
- Comparator<Wrapper<DexMethod>> comparator = (x, y) -> x.get().compareTo(y.get());
+ Comparator<Wrapper<DexMethod>> comparator = Comparator.comparing(Wrapper::get);
return new MethodMapBacking(new Object2ReferenceRBTreeMap<>(comparator));
}
diff --git a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
index edb5e46..3356777 100644
--- a/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/ResolutionResult.java
@@ -567,18 +567,14 @@
public LookupTarget lookupVirtualDispatchTarget(
LambdaDescriptor lambdaInstance, AppInfoWithClassHierarchy appInfo) {
if (lambdaInstance.getMainMethod().match(resolvedMethod)) {
- DexMethod method = lambdaInstance.implHandle.asMethod();
- DexClass holder = appInfo.definitionForHolder(method);
- if (holder == null) {
- assert false;
- return null;
- }
- DexEncodedMethod definition = holder.lookupMethod(method);
- if (definition == null) {
+ DexMethod methodReference = lambdaInstance.implHandle.asMethod();
+ DexClass holder = appInfo.definitionForHolder(methodReference);
+ DexClassAndMethod method = methodReference.lookupMemberOnClass(holder);
+ if (method == null) {
// The targeted method might not exist, eg, Throwable.addSuppressed in an old library.
return null;
}
- return new LookupLambdaTarget(lambdaInstance, DexClassAndMethod.create(holder, definition));
+ return new LookupLambdaTarget(lambdaInstance, method);
}
return lookupMaximallySpecificDispatchTarget(lambdaInstance, appInfo);
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
index bd6d488..0c27a75 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
@@ -481,7 +481,7 @@
.appInfoForDesugaring()
.resolveMethodOnInterface(clazz, invokedMethod)
.asSingleResolution();
- if (resolutionResult != null) {
+ if (resolutionResult != null && resolutionResult.getResolvedMethod().isStatic()) {
instructions.replaceCurrentInstruction(
new InvokeStatic(
staticAsMethodOfCompanionClass(resolutionResult.getResolutionPair()),
@@ -490,28 +490,26 @@
return;
}
- // Replace by throw new NoSuchMethodError.
- UtilityMethodForCodeOptimizations throwNoSuchMethodErrorMethod =
- UtilityMethodsForCodeOptimizations.synthesizeThrowNoSuchMethodErrorMethod(
- appView, context, methodProcessingId);
- throwNoSuchMethodErrorMethod.optimize(methodProcessor);
+ // Replace by throw new IncompatibleClassChangeError/NoSuchMethodError.
+ UtilityMethodForCodeOptimizations throwMethod =
+ resolutionResult == null
+ ? UtilityMethodsForCodeOptimizations.synthesizeThrowNoSuchMethodErrorMethod(
+ appView, context, methodProcessingId)
+ : UtilityMethodsForCodeOptimizations.synthesizeThrowIncompatibleClassChangeErrorMethod(
+ appView, context, methodProcessingId);
+ throwMethod.optimize(methodProcessor);
- InvokeStatic throwNoSuchMethodErrorInvoke =
+ InvokeStatic throwInvoke =
InvokeStatic.builder()
- .setMethod(throwNoSuchMethodErrorMethod.getMethod())
+ .setMethod(throwMethod.getMethod())
.setFreshOutValue(appView, code)
.setPosition(invoke)
.build();
instructions.previous();
- instructions.add(throwNoSuchMethodErrorInvoke);
+ instructions.add(throwInvoke);
instructions.next();
instructions.replaceCurrentInstructionWithThrow(
- appView,
- code,
- blockIterator,
- throwNoSuchMethodErrorInvoke.outValue(),
- blocksToRemove,
- affectedValues);
+ appView, code, blockIterator, throwInvoke.outValue(), blocksToRemove, affectedValues);
}
private void rewriteInvokeSuper(
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java b/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
index 35467e9..9e360b4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/UtilityMethodsForCodeOptimizations.java
@@ -77,6 +77,35 @@
options, method);
}
+ public static UtilityMethodForCodeOptimizations synthesizeThrowIncompatibleClassChangeErrorMethod(
+ AppView<?> appView, ProgramMethod context, MethodProcessingId methodProcessingId) {
+ InternalOptions options = appView.options();
+ DexItemFactory dexItemFactory = appView.dexItemFactory();
+ DexProto proto = dexItemFactory.createProto(dexItemFactory.icceType);
+ SyntheticItems syntheticItems = appView.getSyntheticItems();
+ ProgramMethod syntheticMethod =
+ syntheticItems.createMethod(
+ SyntheticNaming.SyntheticKind.THROW_ICCE,
+ context,
+ dexItemFactory,
+ builder ->
+ builder
+ .setAccessFlags(MethodAccessFlags.createPublicStaticSynthetic())
+ .setClassFileVersion(CfVersion.V1_8)
+ .setCode(
+ method -> getThrowIncompatibleClassChangeErrorCodeTemplate(method, options))
+ .setProto(proto),
+ methodProcessingId);
+ return new UtilityMethodForCodeOptimizations(syntheticMethod);
+ }
+
+ private static CfCode getThrowIncompatibleClassChangeErrorCodeTemplate(
+ DexMethod method, InternalOptions options) {
+ return CfUtilityMethodsForCodeOptimizations
+ .CfUtilityMethodsForCodeOptimizationsTemplates_throwIncompatibleClassChangeError(
+ options, method);
+ }
+
public static UtilityMethodForCodeOptimizations synthesizeThrowNoSuchMethodErrorMethod(
AppView<?> appView, ProgramMethod context, MethodProcessingId methodProcessingId) {
InternalOptions options = appView.options();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java b/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
index a1731e7..831a0b3 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
@@ -33,6 +33,7 @@
public static void registerSynthesizedCodeReferences(DexItemFactory factory) {
factory.createSynthesizedType("Ljava/lang/ClassCastException;");
+ factory.createSynthesizedType("Ljava/lang/IncompatibleClassChangeError;");
factory.createSynthesizedType("Ljava/lang/NoSuchMethodError;");
}
@@ -74,6 +75,30 @@
ImmutableList.of());
}
+ public static CfCode
+ CfUtilityMethodsForCodeOptimizationsTemplates_throwIncompatibleClassChangeError(
+ InternalOptions options, DexMethod method) {
+ CfLabel label0 = new CfLabel();
+ return new CfCode(
+ method.holder,
+ 2,
+ 0,
+ ImmutableList.of(
+ label0,
+ new CfNew(options.itemFactory.createType("Ljava/lang/IncompatibleClassChangeError;")),
+ new CfStackInstruction(CfStackInstruction.Opcode.Dup),
+ new CfInvoke(
+ 183,
+ options.itemFactory.createMethod(
+ options.itemFactory.createType("Ljava/lang/IncompatibleClassChangeError;"),
+ options.itemFactory.createProto(options.itemFactory.voidType),
+ options.itemFactory.createString("<init>")),
+ false),
+ new CfThrow()),
+ ImmutableList.of(),
+ ImmutableList.of());
+ }
+
public static CfCode CfUtilityMethodsForCodeOptimizationsTemplates_throwNoSuchMethodError(
InternalOptions options, DexMethod method) {
CfLabel label0 = new CfLabel();
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
index e7ca5b5..771c336 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMinifier.java
@@ -100,13 +100,6 @@
}
ClassRenaming computeRenaming(Timing timing) {
- return computeRenaming(timing, Collections.emptyMap());
- }
-
- ClassRenaming computeRenaming(Timing timing, Map<DexType, DexString> syntheticClasses) {
- // Externally defined synthetic classes populate an initial renaming.
- renaming.putAll(syntheticClasses);
-
// Collect names we have to keep.
timing.begin("reserve");
for (DexClass clazz : classes) {
diff --git a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
index 8e19257..0f5924d 100644
--- a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
@@ -23,7 +23,6 @@
import com.google.common.collect.Sets;
import java.io.PrintStream;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
@@ -397,7 +396,7 @@
return Comparator.comparing(globalStateMap::get);
}
- private void reserveNamesInInterfaces(Collection<DexClass> interfaces) {
+ private void reserveNamesInInterfaces(Iterable<DexClass> interfaces) {
for (DexClass iface : interfaces) {
assert iface.isInterface();
minifierState.allocateReservationStateAndReserve(iface.type, iface.type);
@@ -407,7 +406,7 @@
}
}
- void assignNamesToInterfaceMethods(Timing timing, Collection<DexClass> interfaces) {
+ void assignNamesToInterfaceMethods(Timing timing, Iterable<DexClass> interfaces) {
timing.begin("Interface minification");
// Reserve all the names that are required for interfaces.
timing.begin("Reserve direct and compute hierarchy");
diff --git a/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
index 49dcd83..0f50ecb 100644
--- a/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
@@ -16,7 +16,6 @@
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableMap;
-import java.util.Collection;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;
@@ -174,7 +173,7 @@
}
}
- MethodRenaming computeRenaming(Collection<DexClass> interfaces, Timing timing) {
+ MethodRenaming computeRenaming(Iterable<DexClass> interfaces, Timing timing) {
// Phase 1: Reserve all the names that need to be kept and allocate linked state in the
// library part.
timing.begin("Phase 1");
diff --git a/src/main/java/com/android/tools/r8/naming/Minifier.java b/src/main/java/com/android/tools/r8/naming/Minifier.java
index 4bc638a..c00993f 100644
--- a/src/main/java/com/android/tools/r8/naming/Minifier.java
+++ b/src/main/java/com/android/tools/r8/naming/Minifier.java
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.naming;
+import static com.android.tools.r8.graph.DexApplication.classesWithDeterministicOrder;
import static com.android.tools.r8.utils.StringUtils.EMPTY_CHAR_ARRAY;
import static com.android.tools.r8.utils.SymbolGenerationUtils.PRIMITIVE_TYPE_NAMES;
@@ -26,11 +27,10 @@
import com.android.tools.r8.utils.SymbolGenerationUtils;
import com.android.tools.r8.utils.SymbolGenerationUtils.MixedCasing;
import com.android.tools.r8.utils.Timing;
-import java.util.Comparator;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import java.util.TreeSet;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.function.BiPredicate;
@@ -48,8 +48,7 @@
assert appView.options().isMinifying();
SubtypingInfo subtypingInfo = appView.appInfo().computeSubtypingInfo();
timing.begin("ComputeInterfaces");
- Set<DexClass> interfaces = new TreeSet<>(Comparator.comparing(a -> a.type));
- interfaces.addAll(appView.appInfo().computeReachableInterfaces());
+ List<DexClass> interfaces = computeReachableInterfacesWithDeterministicOrder();
timing.end();
timing.begin("MinifyClasses");
ClassNameMinifier classNameMinifier =
@@ -92,6 +91,12 @@
return lens;
}
+ private List<DexClass> computeReachableInterfacesWithDeterministicOrder() {
+ List<DexClass> interfaces = new ArrayList<>();
+ appView.appInfo().forEachReachableInterface(interfaces::add);
+ return classesWithDeterministicOrder(interfaces);
+ }
+
abstract static class BaseMinificationNamingStrategy {
// We have to ensure that the names proposed by the minifier is not used in the obfuscation
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
index 6d8c889..b75956e 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -4,6 +4,8 @@
package com.android.tools.r8.naming;
+import static com.android.tools.r8.graph.DexApplication.classesWithDeterministicOrder;
+
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
@@ -35,7 +37,9 @@
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import java.util.ArrayDeque;
+import java.util.Comparator;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
@@ -73,9 +77,8 @@
private final SeedMapper seedMapper;
private final BiMap<DexType, DexString> mappedNames = HashBiMap.create();
// To keep the order deterministic, we sort the classes by their type, which is a unique key.
- private final Set<DexClass> mappedClasses = new TreeSet<>((a, b) -> a.type.compareTo(b.type));
+ private final Set<DexClass> mappedClasses = Sets.newIdentityHashSet();
private final Map<DexReference, MemberNaming> memberNames = Maps.newIdentityHashMap();
- private final Map<DexType, DexString> syntheticCompanionClasses = Maps.newIdentityHashMap();
private final Map<DexMethod, DexString> defaultInterfaceMethodImplementationNames =
Maps.newIdentityHashMap();
private final Map<DexMethod, DexString> additionalMethodNamings = Maps.newIdentityHashMap();
@@ -95,15 +98,15 @@
Set<DexReference> notMappedReferences = new HashSet<>();
timing.begin("MappingInterfaces");
- Set<DexClass> interfaces = new TreeSet<>((a, b) -> a.type.compareTo(b.type));
+ Set<DexClass> interfaces = new TreeSet<>(Comparator.comparing(DexClass::getType));
Consumer<DexClass> consumer =
- dexClass -> {
- if (dexClass.isInterface()) {
+ clazz -> {
+ if (clazz.isInterface()) {
// Only visit top level interfaces because computeMapping will visit the hierarchy.
- if (dexClass.interfaces.isEmpty()) {
- computeMapping(dexClass.type, nonPrivateMembers, notMappedReferences, subtypingInfo);
+ if (clazz.interfaces.isEmpty()) {
+ computeMapping(clazz.type, nonPrivateMembers, notMappedReferences, subtypingInfo);
}
- interfaces.add(dexClass);
+ interfaces.add(clazz);
}
};
// For union-find of interface methods we also need to add the library types above live types.
@@ -141,9 +144,8 @@
// in the ClassNameMinifier that the strategy should produce a "fresh" name so we just
// use the existing strategy.
new MinificationPackageNamingStrategy(appView),
- mappedClasses);
- ClassRenaming classRenaming =
- classNameMinifier.computeRenaming(timing, syntheticCompanionClasses);
+ classesWithDeterministicOrder(mappedClasses));
+ ClassRenaming classRenaming = classNameMinifier.computeRenaming(timing);
timing.end();
ApplyMappingMemberNamingStrategy nameStrategy =
@@ -341,11 +343,10 @@
}
// TODO(b/150736225): Is this sound? What if the type is a library type that has been pruned?
DexClass dexClass = appView.appInfo().definitionForWithoutExistenceAssert(type);
- if (dexClass == null) {
+ if (dexClass == null || dexClass.isClasspathClass()) {
computeDefaultInterfaceMethodMappingsForType(
type,
classNaming,
- syntheticCompanionClasses,
defaultInterfaceMethodImplementationNames);
}
}
@@ -354,7 +355,6 @@
private void computeDefaultInterfaceMethodMappingsForType(
DexType type,
ClassNamingForMapApplier classNaming,
- Map<DexType, DexString> syntheticCompanionClasses,
Map<DexMethod, DexString> defaultInterfaceMethodImplementationNames) {
// If the class does not resolve, then check if it is a companion class for an interface on
// the class path.
@@ -366,7 +366,6 @@
if (interfaceType == null || !interfaceType.isClasspathClass()) {
return;
}
- syntheticCompanionClasses.put(type, factory.createString(classNaming.renamedName));
for (List<MemberNaming> namings : classNaming.getQualifiedMethodMembers().values()) {
// If the qualified name has been mapped to multiple names we can't compute a mapping (and it
// should not be possible that this is a default interface method in that case.)
diff --git a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
index 30d9b7d..a675776 100644
--- a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
@@ -10,7 +10,6 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexApplication;
-import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexMethod;
@@ -83,9 +82,7 @@
// Phase 2: Visit classes and promote class/member to public if possible.
timing.begin("Phase 2: promoteToPublic");
- for (DexClass iface : appView.appInfo().computeReachableInterfaces()) {
- publicizeType(iface.type);
- }
+ appView.appInfo().forEachReachableInterface(clazz -> publicizeType(clazz.getType()));
publicizeType(appView.dexItemFactory().objectType);
timing.end();
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index e88a714..744e0fc 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -604,8 +604,7 @@
return reprocess;
}
- public Collection<DexClass> computeReachableInterfaces() {
- Set<DexClass> interfaces = Sets.newIdentityHashSet();
+ public void forEachReachableInterface(Consumer<DexClass> consumer) {
WorkList<DexType> worklist = WorkList.newIdentityWorkList();
worklist.addIfNotSeen(objectAllocationInfoCollection.getInstantiatedLambdaInterfaces());
for (DexProgramClass clazz : classes()) {
@@ -618,14 +617,13 @@
continue;
}
if (definition.isInterface()) {
- interfaces.add(definition);
+ consumer.accept(definition);
}
if (definition.superType != null) {
worklist.addIfNotSeen(definition.superType);
}
worklist.addIfNotSeen(definition.interfaces.values);
}
- return interfaces;
}
/**
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 1905d90..997ef55 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -5,6 +5,7 @@
import static com.android.tools.r8.graph.DexProgramClass.asProgramClassOrNull;
import static com.android.tools.r8.graph.FieldAccessInfoImpl.MISSING_FIELD_ACCESS_INFO;
+import static com.android.tools.r8.ir.desugar.LambdaDescriptor.isLambdaMetafactoryMethod;
import static com.android.tools.r8.ir.optimize.enums.UnboxedEnumMemberRelocator.ENUM_UNBOXING_UTILITY_CLASS_SUFFIX;
import static com.android.tools.r8.naming.IdentifierNameStringUtils.identifyIdentifier;
import static com.android.tools.r8.naming.IdentifierNameStringUtils.isReflectionMethod;
@@ -553,10 +554,15 @@
}
private void recordMethodReference(DexMethod method, ProgramDefinition context) {
- recordTypeReference(method.holder, context);
- recordTypeReference(method.proto.returnType, context);
+ recordMethodReference(method, context, this::reportMissingClass);
+ }
+
+ private void recordMethodReference(
+ DexMethod method, ProgramDefinition context, Consumer<DexType> missingClassConsumer) {
+ recordTypeReference(method.holder, context, missingClassConsumer);
+ recordTypeReference(method.proto.returnType, context, missingClassConsumer);
for (DexType type : method.proto.parameters.values) {
- recordTypeReference(type, context);
+ recordTypeReference(type, context, missingClassConsumer);
}
}
@@ -941,13 +947,17 @@
}
void traceCallSite(DexCallSite callSite, ProgramMethod context) {
- DexProgramClass bootstrapClass =
- getProgramHolderOrNull(callSite.bootstrapMethod.asMethod(), context);
- if (bootstrapClass != null) {
- bootstrapMethods.add(callSite.bootstrapMethod.asMethod());
+ // Do not lookup java.lang.invoke.LambdaMetafactory when compiling for DEX to avoid reporting
+ // the class as missing.
+ if (options.isGeneratingClassFiles() || !isLambdaMetafactoryMethod(callSite, appInfo())) {
+ DexProgramClass bootstrapClass =
+ getProgramHolderOrNull(callSite.bootstrapMethod.asMethod(), context);
+ if (bootstrapClass != null) {
+ bootstrapMethods.add(callSite.bootstrapMethod.asMethod());
+ }
}
- LambdaDescriptor descriptor = LambdaDescriptor.tryInfer(callSite, appInfo, context);
+ LambdaDescriptor descriptor = LambdaDescriptor.tryInfer(callSite, appInfo(), context);
if (descriptor == null) {
return;
}
@@ -1735,9 +1745,10 @@
if (enclosingMethodAttribute != null) {
DexMethod enclosingMethod = enclosingMethodAttribute.getEnclosingMethod();
if (enclosingMethod != null) {
- recordMethodReference(enclosingMethod, clazz);
+ recordMethodReference(enclosingMethod, clazz, this::ignoreMissingClass);
} else {
- recordTypeReference(enclosingMethodAttribute.getEnclosingClass(), clazz);
+ recordTypeReference(
+ enclosingMethodAttribute.getEnclosingClass(), clazz, this::ignoreMissingClass);
}
}
@@ -2312,20 +2323,24 @@
private void checkLambdaInterface(DexType itf, ProgramMethod context) {
DexClass clazz = definitionFor(itf, context);
if (clazz == null) {
- StringDiagnostic message =
- new StringDiagnostic(
- "Lambda expression implements missing interface `" + itf.toSourceString() + "`",
- context.getOrigin());
- options.reporter.warning(message);
+ if (!options.getProguardConfiguration().getDontWarnPatterns().matches(itf)) {
+ StringDiagnostic message =
+ new StringDiagnostic(
+ "Lambda expression implements missing interface `" + itf.toSourceString() + "`",
+ context.getOrigin());
+ options.reporter.warning(message);
+ }
} else if (!clazz.isInterface()) {
- StringDiagnostic message =
- new StringDiagnostic(
- "Lambda expression expected to implement an interface, but found "
- + "`"
- + itf.toSourceString()
- + "`",
- context.getOrigin());
- options.reporter.warning(message);
+ if (!options.getProguardConfiguration().getDontWarnPatterns().matches(itf)) {
+ StringDiagnostic message =
+ new StringDiagnostic(
+ "Lambda expression expected to implement an interface, but found "
+ + "`"
+ + itf.toSourceString()
+ + "`",
+ context.getOrigin());
+ options.reporter.warning(message);
+ }
}
}
@@ -4664,7 +4679,7 @@
}
public DexClass definitionFor(DexType type, ProgramDefinition context) {
- return enqueuer.definitionFor(type, context);
+ return enqueuer.definitionFor(type, context, enqueuer::ignoreMissingClass);
}
}
}
diff --git a/src/main/java/com/android/tools/r8/shaking/MissingClasses.java b/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
index d3cd164..d8dbca6 100644
--- a/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
+++ b/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
@@ -93,6 +93,7 @@
public MissingClasses reportMissingClasses(InternalOptions options) {
Set<DexType> newMissingClassesWithoutDontWarn =
options.getProguardConfiguration().getDontWarnPatterns().getNonMatches(newMissingClasses);
+ newMissingClassesWithoutDontWarn.removeAll(alreadyMissingClasses);
newMissingClassesWithoutDontWarn.removeAll(
getAllowedMissingClasses(options.dexItemFactory()));
if (!newMissingClassesWithoutDontWarn.isEmpty()) {
@@ -111,7 +112,15 @@
}
private static Collection<DexType> getAllowedMissingClasses(DexItemFactory dexItemFactory) {
- return ImmutableList.of(dexItemFactory.annotationThrows);
+ return ImmutableList.of(
+ dexItemFactory.annotationDefault,
+ dexItemFactory.annotationMethodParameters,
+ dexItemFactory.annotationSourceDebugExtension,
+ dexItemFactory.annotationThrows,
+ // TODO(b/176133674) StringConcatFactory is backported, but the class is reported as
+ // missing because the enqueuer runs prior to backporting and thus sees the non-desugared
+ // code.
+ dexItemFactory.stringConcatFactoryType);
}
/** Intentionally private, use {@link Builder#reportMissingClasses(InternalOptions)}. */
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index decafef..78957e7 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1336,7 +1336,6 @@
public Consumer<IRCode> irModifier = null;
public int basicBlockMuncherIterationLimit = NO_LIMIT;
public boolean dontReportFailingCheckDiscarded = false;
- public boolean deterministicSortingBasedOnDexType = true;
public PrintStream whyAreYouNotInliningConsumer = System.out;
public boolean trackDesugaredAPIConversions =
System.getProperty("com.android.tools.r8.trackDesugaredAPIConversions") != null;
diff --git a/src/main/keep.txt b/src/main/keep.txt
index 82f6965..24d0fbc 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -26,3 +26,8 @@
# Compatibility command line program used by the Android Platform build.
-keep public class com.android.tools.r8.compatproguard.CompatProguard { public static void main(java.lang.String[]); }
+
+# TODO(b/176783536): Avoid need to use -dontwarn.
+-dontwarn com.google.errorprone.annotations.**
+-dontwarn com.google.j2objc.annotations.*
+-dontwarn javax.annotation.Nullable
diff --git a/src/test/java/com/android/tools/r8/Keep.java b/src/test/java/com/android/tools/r8/Keep.java
new file mode 100644
index 0000000..ed8275b
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/Keep.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2018, 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;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.CLASS)
+public @interface Keep {}
diff --git a/src/test/java/com/android/tools/r8/TestBuilderMinAndroidJarTest.java b/src/test/java/com/android/tools/r8/TestBuilderMinAndroidJarTest.java
index 06cba56..d917ab6 100644
--- a/src/test/java/com/android/tools/r8/TestBuilderMinAndroidJarTest.java
+++ b/src/test/java/com/android/tools/r8/TestBuilderMinAndroidJarTest.java
@@ -28,7 +28,10 @@
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().withAllApiLevels().build();
+ return getTestParameters()
+ .withAllRuntimes()
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.N)
+ .build();
}
public TestBuilderMinAndroidJarTest(TestParameters parameters) {
diff --git a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
index f196151..27033d8 100644
--- a/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestCompilerBuilder.java
@@ -46,6 +46,7 @@
public static final Consumer<InternalOptions> DEFAULT_OPTIONS =
options -> {
options.testing.allowClassInlinerGracefulExit = false;
+ options.testing.enableExperimentalMissingClassesReporting = true;
options.testing.reportUnusedProguardConfigurationRules = true;
options.horizontalClassMergerOptions().enable();
};
diff --git a/src/test/java/com/android/tools/r8/TestParametersCollection.java b/src/test/java/com/android/tools/r8/TestParametersCollection.java
index 52bc8d5..8351a9c 100644
--- a/src/test/java/com/android/tools/r8/TestParametersCollection.java
+++ b/src/test/java/com/android/tools/r8/TestParametersCollection.java
@@ -6,7 +6,6 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.stream.Stream;
-import org.jetbrains.annotations.NotNull;
public class TestParametersCollection implements Iterable<TestParameters> {
@@ -17,7 +16,6 @@
this.parameters = parameters;
}
- @NotNull
@Override
public Iterator<TestParameters> iterator() {
return parameters.iterator();
diff --git a/src/test/java/com/android/tools/r8/TestRunResult.java b/src/test/java/com/android/tools/r8/TestRunResult.java
index c775215..4a7d5c7 100644
--- a/src/test/java/com/android/tools/r8/TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/TestRunResult.java
@@ -66,8 +66,12 @@
}
public RR assertSuccessWithOutputLinesIf(boolean condition, String... expected) {
+ return assertSuccessWithOutputLinesIf(condition, Arrays.asList(expected));
+ }
+
+ public RR assertSuccessWithOutputLinesIf(boolean condition, List<String> expected) {
if (condition) {
- return assertSuccessWithOutputLines(Arrays.asList(expected));
+ return assertSuccessWithOutputLines(expected);
}
return self();
}
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index 12b42cb..9ac6cdb 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -4,6 +4,8 @@
package com.android.tools.r8;
+import static com.android.tools.r8.ir.desugar.InterfaceMethodRewriter.COMPANION_CLASS_NAME_SUFFIX;
+
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.dexsplitter.SplitterTestBase.RunInterface;
import com.android.tools.r8.references.MethodReference;
@@ -108,6 +110,98 @@
return addKeepRules("-dontwarn " + className);
}
+ public T addDontWarn(String... classes) {
+ for (String clazz : classes) {
+ addKeepRules("-dontwarn " + clazz);
+ }
+ return self();
+ }
+
+ @Deprecated
+ public T addDontWarnCompanionClasses() {
+ return addDontWarn("**" + COMPANION_CLASS_NAME_SUFFIX);
+ }
+
+ @Deprecated
+ public T addDontWarnCompilerSynthesizedAnnotations() {
+ return addDontWarn("com.android.tools.r8.annotations.SynthesizedClass")
+ .addDontWarn("com.android.tools.r8.annotations.SynthesizedClassMap");
+ }
+
+ // TODO(b/176143558): Should not report missing classes for compiler synthesized classes.
+ @Deprecated
+ public T addDontWarnEmulatedLibraryClasses() {
+ return addDontWarn("**$-EL");
+ }
+
+ public T addDontWarnGoogle() {
+ return addDontWarn("com.google.**");
+ }
+
+ public T addDontWarnJavax() {
+ return addDontWarn("javax.**");
+ }
+
+ public T addDontWarnJavaLangInvoke() {
+ return addDontWarn("java.lang.invoke.*");
+ }
+
+ public T addDontWarnJavaNioFile() {
+ return addDontWarn("java.nio.file.**");
+ }
+
+ // TODO(b/176133676): Investigate why there are missing class references to org.jetbrains
+ @Deprecated
+ public T addDontWarnJetBrains() {
+ return addDontWarn("org.jetbrains.**");
+ }
+
+ public T addDontWarnJetBrainsAnnotations() {
+ return addDontWarn("org.jetbrains.annotations.NotNull", "org.jetbrains.annotations.Nullable");
+ }
+
+ // TODO(b/176133676): Should not report missing classes for Kotlin classes.
+ @Deprecated
+ public T addDontWarnKotlin() {
+ return addDontWarn("kotlin.**");
+ }
+
+ // TODO(b/176133676): Should not report missing classes for Kotlin metadata.
+ @Deprecated
+ public T addDontWarnKotlinMetadata() {
+ return addDontWarn("kotlin.Metadata");
+ }
+
+ // TODO(b/176133676): Investigate kotlinx missing class references.
+ @Deprecated
+ public T addDontWarnKotlinx() {
+ return addDontWarn("kotlinx.**");
+ }
+
+ // TODO(b/176144018): Should not report compiler synthesized references as missing.
+ @Deprecated
+ public T addDontWarnRetargetLibraryMembers() {
+ return addDontWarn("j$.retarget.$r8$retargetLibraryMember**");
+ }
+
+ // TODO(b/154849103): Should not warn about SerializedLambda.
+ @Deprecated
+ public T addDontWarnSerializedLambda() {
+ return addDontWarn("java.lang.invoke.SerializedLambda");
+ }
+
+ // TODO(b/176781593): Should not be reported missing.
+ @Deprecated
+ public T addDontWarnTimeConversions() {
+ return addDontWarn("java.time.TimeConversions");
+ }
+
+ // TODO(b/176144018): Should not report compiler synthesized references as missing.
+ @Deprecated
+ public T addDontWarnVivifiedClasses() {
+ return addDontWarn("$-vivified-$.**");
+ }
+
public T addKeepKotlinMetadata() {
return addKeepRules("-keep class kotlin.Metadata { *; }");
}
@@ -331,6 +425,10 @@
return addTestingAnnotation(NeverInline.class);
}
+ public final T addKeepAnnotation() {
+ return addTestingAnnotation(Keep.class);
+ }
+
public final T addMemberValuePropagationAnnotations() {
return addTestingAnnotation(NeverPropagateValue.class);
}
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
index ce40a93..1127d82 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
@@ -23,7 +23,7 @@
this.parameters = parameters;
}
- static void assertPublic(CodeInspector codeInspector, Class clazz, MethodSignature signature) {
+ static void assertPublic(CodeInspector codeInspector, Class<?> clazz, MethodSignature signature) {
ClassSubject classSubject = codeInspector.clazz(clazz);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method(signature);
@@ -31,12 +31,12 @@
assertThat(methodSubject, isPublic());
}
- static void assertNotPublic(CodeInspector codeInspector, Class clazz, MethodSignature signature) {
+ static void assertNotPublic(
+ CodeInspector codeInspector, Class<?> clazz, MethodSignature signature) {
ClassSubject classSubject = codeInspector.clazz(clazz);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method(signature);
assertThat(methodSubject, isPresent());
assertThat(methodSubject, not(isPublic()));
}
-
}
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
index 83a0155..339361b 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NoRelaxationForSerializableTest.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.StringUtils;
@@ -103,7 +104,11 @@
@Parameterized.Parameters(name = "{0}, access-modification: {1}")
public static List<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimesAndApiLevels().build(), BooleanUtils.values());
+ getTestParameters()
+ .withAllRuntimes()
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
+ .build(),
+ BooleanUtils.values());
}
public NoRelaxationForSerializableTest(TestParameters parameters, boolean accessModification) {
@@ -141,6 +146,8 @@
R8TestCompileResult result =
testForR8(parameters.getBackend())
.addProgramClasses(CLASSES)
+ .addMemberValuePropagationAnnotations()
+ .addNoVerticalClassMergingAnnotations()
.enableInliningAnnotations()
.addKeepRuleFiles(configuration)
.addKeepRules(KEEPMEMBER_RULES)
@@ -174,6 +181,7 @@
R8TestCompileResult result =
testForR8(parameters.getBackend())
.addProgramClasses(CLASSES)
+ .addNoVerticalClassMergingAnnotations()
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.addKeepRuleFiles(configuration)
diff --git a/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java b/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
index 607f96d..84d55b4 100644
--- a/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
+++ b/src/test/java/com/android/tools/r8/annotations/SourceDebugExtensionTest.java
@@ -66,6 +66,7 @@
.addProgramFiles(kotlinSources)
.addKeepAttributes(ProguardKeepAttributes.SOURCE_DEBUG_EXTENSION)
.addKeepAllClassesRule()
+ .addDontWarnJetBrainsAnnotations()
.setMode(CompilationMode.RELEASE)
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java b/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
index 8bb8e36..902d503 100644
--- a/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/KeepDeserializeLambdaMethodTestRunner.java
@@ -11,6 +11,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.TestShrinkerBuilder;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
@@ -26,9 +27,9 @@
@RunWith(Parameterized.class)
public class KeepDeserializeLambdaMethodTestRunner extends TestBase {
- private static final Class TEST_CLASS_CF =
+ private static final Class<?> TEST_CLASS_CF =
com.android.tools.r8.cf.KeepDeserializeLambdaMethodTestCf.class;
- private static final Class TEST_CLASS_DEX =
+ private static final Class<?> TEST_CLASS_DEX =
com.android.tools.r8.cf.KeepDeserializeLambdaMethodTestDex.class;
private static final String EXPECTED =
@@ -89,8 +90,10 @@
// TODO(b/148836254): Support deserialized lambdas without the need of additional rules.
"-keep class * { private static synthetic void lambda$*(); }");
} else {
- builder.noMinification();
- builder.noTreeShaking();
+ builder
+ .applyIf(parameters.isDexRuntime(), TestShrinkerBuilder::addDontWarnSerializedLambda)
+ .noMinification()
+ .noTreeShaking();
}
builder
.run(parameters.getRuntime(), getMainClass())
diff --git a/src/test/java/com/android/tools/r8/cf/MissingClassJoinsToObjectTest.java b/src/test/java/com/android/tools/r8/cf/MissingClassJoinsToObjectTest.java
index 81f1d09..43d02cb 100644
--- a/src/test/java/com/android/tools/r8/cf/MissingClassJoinsToObjectTest.java
+++ b/src/test/java/com/android/tools/r8/cf/MissingClassJoinsToObjectTest.java
@@ -51,6 +51,7 @@
.enableInliningAnnotations()
.addProgramClasses(TestClass.class, A.class)
.addKeepMainRule(TestClass.class)
+ .addDontWarn(B.class)
.setMinApi(parameters.getApiLevel())
.compile()
.addRunClasspathFiles(getRuntimeClasspath())
diff --git a/src/test/java/com/android/tools/r8/cf/PrintSeedsWithDeserializeLambdaMethodTest.java b/src/test/java/com/android/tools/r8/cf/PrintSeedsWithDeserializeLambdaMethodTest.java
index 497a1bf..ed9277a 100644
--- a/src/test/java/com/android/tools/r8/cf/PrintSeedsWithDeserializeLambdaMethodTest.java
+++ b/src/test/java/com/android/tools/r8/cf/PrintSeedsWithDeserializeLambdaMethodTest.java
@@ -53,6 +53,7 @@
.addProgramClasses(getClasses())
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(getMainClass())
+ .addDontWarnSerializedLambda()
.addPrintSeeds()
.allowStdoutMessages()
.noMinification()
diff --git a/src/test/java/com/android/tools/r8/cf/UnusedMultiNewArrayTest.java b/src/test/java/com/android/tools/r8/cf/UnusedMultiNewArrayTest.java
index 5b9ad45..0820b25 100644
--- a/src/test/java/com/android/tools/r8/cf/UnusedMultiNewArrayTest.java
+++ b/src/test/java/com/android/tools/r8/cf/UnusedMultiNewArrayTest.java
@@ -20,7 +20,7 @@
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().build();
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
public UnusedMultiNewArrayTest(TestParameters parameters) {
@@ -32,7 +32,8 @@
testForR8(parameters.getBackend())
.addProgramClasses(TestClass.class)
.addKeepMainRule(TestClass.class)
- .setMinApi(parameters.getRuntime())
+ .addDontWarn(A.class)
+ .setMinApi(parameters.getApiLevel())
.compile();
}
diff --git a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
index bac9468..ffe8230 100644
--- a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
+++ b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardModifyDiagnosticsLevelTest.java
@@ -18,6 +18,8 @@
import com.android.tools.r8.checkdiscarded.testclasses.Main;
import com.android.tools.r8.checkdiscarded.testclasses.UnusedClass;
import com.android.tools.r8.checkdiscarded.testclasses.UsedClass;
+import com.android.tools.r8.checkdiscarded.testclasses.WillBeGone;
+import com.android.tools.r8.checkdiscarded.testclasses.WillStay;
import com.android.tools.r8.errors.CheckDiscardDiagnostic;
import com.android.tools.r8.utils.InternalOptions;
import com.google.common.collect.ImmutableList;
@@ -79,7 +81,8 @@
public void dontFailCompilationOnCheckDiscardedFailure() {
try {
testForR8(Backend.DEX)
- .addProgramClasses(UnusedClass.class, UsedClass.class, Main.class)
+ .addProgramClasses(
+ UnusedClass.class, UsedClass.class, Main.class, WillBeGone.class, WillStay.class)
.addKeepMainRule(Main.class)
.addKeepRules("-checkdiscard class " + UsedClass.class.getTypeName())
.addOptionsModification(this::noInlining)
diff --git a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
index 61f8917..da2e4cb 100644
--- a/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
+++ b/src/test/java/com/android/tools/r8/checkdiscarded/CheckDiscardedTest.java
@@ -46,7 +46,7 @@
}
private void compile(
- Class annotation,
+ Class<?> annotation,
boolean checkMembers,
Consumer<TestDiagnosticMessages> onCompilationFailure) {
R8FullTestBuilder builder = testForR8(Backend.DEX);
@@ -54,7 +54,8 @@
try {
R8TestCompileResult result =
builder
- .addProgramClasses(UnusedClass.class, UsedClass.class, Main.class)
+ .addProgramClasses(
+ UnusedClass.class, UsedClass.class, Main.class, WillBeGone.class, WillStay.class)
.addKeepMainRule(Main.class)
.addKeepRules(checkDiscardRule(checkMembers, annotation))
.minification(minify)
@@ -122,5 +123,4 @@
containsString("is invoked from"))));
compile(WillStay.class, true, check);
}
-
}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/AdaptVerticallyMergedResourceFileContentsTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/AdaptVerticallyMergedResourceFileContentsTest.java
index 0ebbb9d..090cb9e 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/AdaptVerticallyMergedResourceFileContentsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/AdaptVerticallyMergedResourceFileContentsTest.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.DataEntryResource;
import com.android.tools.r8.NeverClassInline;
-import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.DataResourceConsumerForTesting;
@@ -51,9 +50,11 @@
.addHorizontallyMergedClassesInspectorIf(
enableHorizontalClassMerging,
inspector -> inspector.assertMergedInto(B.class, A.class))
+ .addVerticallyMergedClassesInspector(
+ inspector -> inspector.assertMergedIntoSubtype(Parent.class))
.compile()
.run(parameters.getRuntime(), Main.class)
- .assertSuccessWithOutputLines("a", "foo parent", "b")
+ .assertSuccessWithOutputLines("a", "b")
.inspector();
assertThat(codeInspector.clazz(Parent.class), not(isPresent()));
@@ -72,13 +73,7 @@
ImmutableList.of(aClassSubject.getFinalName(), aClassSubject.getFinalName(), newClassName));
}
- @NeverClassInline
- public static class Parent {
- @NeverInline
- public void foo() {
- System.out.println("foo parent");
- }
- }
+ public static class Parent {}
@NeverClassInline
public static class A extends Parent {
@@ -95,13 +90,8 @@
}
public static class Main {
- @NeverInline
- public static void parent(Parent p) {
- p.foo();
- }
-
public static void main(String[] args) {
- parent(new A());
+ new A();
new B();
}
}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
index 935e75e..369ebfd 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/ConstructorCantInlineTest.java
@@ -50,7 +50,6 @@
}
}
- @NoHorizontalClassMerging
@NeverClassInline
public static class B extends A {}
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingProducesFieldCollisionTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingProducesFieldCollisionTest.java
index 34972f6..13cc54f 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingProducesFieldCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/MergingProducesFieldCollisionTest.java
@@ -59,7 +59,6 @@
});
}
- @NoVerticalClassMerging
public static class Parent {
@NeverInline
public void foo() {
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessOnMergedClassTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessOnMergedClassTest.java
index 671f740..ce0425e 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessOnMergedClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NonReboundFieldAccessOnMergedClassTest.java
@@ -35,6 +35,7 @@
}
})
.enableNeverClassInliningAnnotations()
+ .enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByCheckCastTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByCheckCastTest.java
index 366800a..eba6de8 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByCheckCastTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByCheckCastTest.java
@@ -25,6 +25,7 @@
.addOptionsModification(
options ->
options.horizontalClassMergerOptions().enableIf(enableHorizontalClassMerging))
+ .enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByInstanceOfTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByInstanceOfTest.java
index c8ad21d..47994ef 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByInstanceOfTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/VerticallyMergedClassDistinguishedByInstanceOfTest.java
@@ -25,6 +25,7 @@
.addOptionsModification(
options ->
options.horizontalClassMergerOptions().enableIf(enableHorizontalClassMerging))
+ .enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/NoIllegalClassAccessWithAccessModificationsTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/NoIllegalClassAccessWithAccessModificationsTest.java
index 35e27eb..f2edbce 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/NoIllegalClassAccessWithAccessModificationsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/NoIllegalClassAccessWithAccessModificationsTest.java
@@ -42,6 +42,7 @@
.addKeepMainRule(TestClass.class)
.addVerticallyMergedClassesInspector(this::inspectVerticallyMergedClasses)
.allowAccessModification()
+ .enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
index 0f28809..c65809a 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/NonReboundFieldAccessOnMergedClassTest.java
@@ -37,6 +37,7 @@
.addVerticallyMergedClassesInspector(
inspector -> inspector.assertMergedIntoSubtype(C.class))
.enableNeverClassInliningAnnotations()
+ .enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java b/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
index 8dc4e01..5468cae 100644
--- a/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/vertical/VerticalClassMergerTest.java
@@ -39,7 +39,6 @@
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import java.io.File;
@@ -336,7 +335,8 @@
CF_DIR.resolve("ConflictingInterfaceSignaturesTest.class"),
CF_DIR.resolve("ConflictingInterfaceSignaturesTest$A.class"),
CF_DIR.resolve("ConflictingInterfaceSignaturesTest$B.class"),
- CF_DIR.resolve("ConflictingInterfaceSignaturesTest$InterfaceImpl.class")
+ CF_DIR.resolve("ConflictingInterfaceSignaturesTest$InterfaceImpl.class"),
+ CF_DIR.resolve("NeverInline.class")
};
Set<String> preservedClassNames =
ImmutableSet.of(
@@ -361,7 +361,8 @@
JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest.class"),
JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$A.class"),
JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$B.class"),
- JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$C.class")
+ JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$C.class"),
+ JAVA8_CF_DIR.resolve("NeverInline.class")
};
Set<String> preservedClassNames =
ImmutableSet.of(
@@ -384,7 +385,8 @@
new Path[] {
JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest.class"),
JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$A.class"),
- JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$B.class")
+ JAVA8_CF_DIR.resolve("NestedDefaultInterfaceMethodsTest$B.class"),
+ JAVA8_CF_DIR.resolve("NeverInline.class")
};
Set<String> preservedClassNames =
ImmutableSet.of(
@@ -461,8 +463,14 @@
new Path[] {
CF_DIR.resolve("ProguardFieldMapTest.class"),
CF_DIR.resolve("ProguardFieldMapTest$A.class"),
- CF_DIR.resolve("ProguardFieldMapTest$B.class")
+ CF_DIR.resolve("ProguardFieldMapTest$B.class"),
+ CF_DIR.resolve("NeverClassInline.class")
};
+ Set<String> preservedClassNamesWithoutClassMerging =
+ ImmutableSet.of(
+ "classmerging.ProguardFieldMapTest",
+ "classmerging.ProguardFieldMapTest$A",
+ "classmerging.ProguardFieldMapTest$B");
// Try without vertical class merging, to check that output is as expected.
R8TestCompileResult compileResultWithoutClassMerging =
@@ -478,7 +486,7 @@
.allowUnusedProguardConfigurationRules(),
main,
readProgramFiles(programFiles),
- Predicates.alwaysTrue());
+ preservedClassNamesWithoutClassMerging::contains);
ClassNameMapper mappingWithoutClassMerging =
ClassNameMapper.mapperFromString(compileResultWithoutClassMerging.getProguardMap());
@@ -528,8 +536,14 @@
new Path[] {
CF_DIR.resolve("ProguardMethodMapTest.class"),
CF_DIR.resolve("ProguardMethodMapTest$A.class"),
- CF_DIR.resolve("ProguardMethodMapTest$B.class")
+ CF_DIR.resolve("ProguardMethodMapTest$B.class"),
+ CF_DIR.resolve("NeverClassInline.class")
};
+ Set<String> preservedClassNamesWithoutClassMerging =
+ ImmutableSet.of(
+ "classmerging.ProguardMethodMapTest",
+ "classmerging.ProguardMethodMapTest$A",
+ "classmerging.ProguardMethodMapTest$B");
// Try without vertical class merging, to check that output is as expected.
R8TestCompileResult compileResultWithoutClassMerging =
@@ -545,7 +559,7 @@
.allowUnusedProguardConfigurationRules(),
main,
readProgramFiles(programFiles),
- Predicates.alwaysTrue());
+ preservedClassNamesWithoutClassMerging::contains);
ClassNameMapper mappingWithoutClassMerging =
ClassNameMapper.mapperFromString(compileResultWithoutClassMerging.getProguardMap());
@@ -603,8 +617,14 @@
new Path[] {
CF_DIR.resolve("ProguardMethodMapTest.class"),
CF_DIR.resolve("ProguardMethodMapTest$A.class"),
- CF_DIR.resolve("ProguardMethodMapTest$B.class")
+ CF_DIR.resolve("ProguardMethodMapTest$B.class"),
+ CF_DIR.resolve("NeverClassInline.class")
};
+ Set<String> preservedClassNamesWithoutClassMerging =
+ ImmutableSet.of(
+ "classmerging.ProguardMethodMapTest",
+ "classmerging.ProguardMethodMapTest$A",
+ "classmerging.ProguardMethodMapTest$B");
// Try without vertical class merging, to check that output is as expected.
R8TestCompileResult compileResultWithoutClassMerging =
@@ -624,7 +644,7 @@
.allowUnusedProguardConfigurationRules(),
main,
readProgramFiles(programFiles),
- Predicates.alwaysTrue());
+ preservedClassNamesWithoutClassMerging::contains);
ClassNameMapper mappingWithoutClassMerging =
ClassNameMapper.mapperFromString(compileResultWithoutClassMerging.getProguardMap());
@@ -690,7 +710,8 @@
new Path[] {
CF_DIR.resolve("SubClassThatReferencesSuperMethod.class"),
CF_DIR.resolve("SuperClassWithReferencedMethod.class"),
- CF_DIR.resolve("SuperCallRewritingTest.class")
+ CF_DIR.resolve("SuperCallRewritingTest.class"),
+ CF_DIR.resolve("NeverInline.class")
};
Set<String> preservedClassNames =
ImmutableSet.of(
@@ -721,7 +742,8 @@
Path[] programFiles =
new Path[] {
CF_DIR.resolve("SuperClassWithReferencedMethod.class"),
- CF_DIR.resolve("SuperCallRewritingTest.class")
+ CF_DIR.resolve("SuperCallRewritingTest.class"),
+ CF_DIR.resolve("NeverInline.class")
};
// Build SubClassThatReferencesMethod.
@@ -936,7 +958,8 @@
CF_DIR.resolve("ConflictingInterfaceSignaturesTest.class"),
CF_DIR.resolve("ConflictingInterfaceSignaturesTest$A.class"),
CF_DIR.resolve("ConflictingInterfaceSignaturesTest$B.class"),
- CF_DIR.resolve("ConflictingInterfaceSignaturesTest$InterfaceImpl.class")
+ CF_DIR.resolve("ConflictingInterfaceSignaturesTest$InterfaceImpl.class"),
+ CF_DIR.resolve("NeverInline.class")
};
Set<String> preservedClassNames =
ImmutableSet.of(
@@ -958,7 +981,8 @@
new Path[] {
JAVA8_CF_DIR.resolve("MergeDefaultMethodIntoClassTest.class"),
JAVA8_CF_DIR.resolve("MergeDefaultMethodIntoClassTest$A.class"),
- JAVA8_CF_DIR.resolve("MergeDefaultMethodIntoClassTest$B.class")
+ JAVA8_CF_DIR.resolve("MergeDefaultMethodIntoClassTest$B.class"),
+ JAVA8_CF_DIR.resolve("NeverInline.class")
};
ImmutableSet<String> preservedClassNames =
ImmutableSet.of(
@@ -1021,17 +1045,21 @@
Path[] programFiles =
new Path[] {
CF_DIR.resolve("SimpleInterfaceAccessTest.class"),
+ CF_DIR.resolve("SimpleInterfaceAccessTest$1.class"),
CF_DIR.resolve("SimpleInterfaceAccessTest$SimpleInterface.class"),
CF_DIR.resolve("SimpleInterfaceAccessTest$OtherSimpleInterface.class"),
CF_DIR.resolve("SimpleInterfaceAccessTest$OtherSimpleInterfaceImpl.class"),
CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever.class"),
- CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$SimpleInterfaceImpl.class")
+ CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$SimpleInterfaceImpl.class"),
+ CF_DIR.resolve("pkg/SimpleInterfaceImplRetriever$1.class"),
+ CF_DIR.resolve("NeverInline.class")
};
// SimpleInterface cannot be merged into SimpleInterfaceImpl because SimpleInterfaceImpl
// is in a different package and is not public.
ImmutableSet<String> preservedClassNames =
ImmutableSet.of(
"classmerging.SimpleInterfaceAccessTest",
+ "classmerging.SimpleInterfaceAccessTest$1",
"classmerging.SimpleInterfaceAccessTest$SimpleInterface",
"classmerging.SimpleInterfaceAccessTest$OtherSimpleInterface",
"classmerging.SimpleInterfaceAccessTest$OtherSimpleInterfaceImpl",
@@ -1081,8 +1109,10 @@
Path[] programFiles =
new Path[] {
CF_DIR.resolve("TemplateMethodTest.class"),
+ CF_DIR.resolve("TemplateMethodTest$1.class"),
CF_DIR.resolve("TemplateMethodTest$AbstractClass.class"),
- CF_DIR.resolve("TemplateMethodTest$AbstractClassImpl.class")
+ CF_DIR.resolve("TemplateMethodTest$AbstractClassImpl.class"),
+ CF_DIR.resolve("NeverInline.class")
};
Set<String> preservedClassNames =
ImmutableSet.of(
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java b/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
index deb97d8..ff841d7 100644
--- a/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
+++ b/src/test/java/com/android/tools/r8/debug/KotlinStdLibCompilationTest.java
@@ -54,6 +54,7 @@
.noMinification()
.noTreeShaking()
.addKeepAllAttributes()
+ .addDontWarnJetBrainsAnnotations()
.setMode(CompilationMode.DEBUG)
.setMinApi(parameters.getApiLevel())
.compileWithExpectedDiagnostics(TestDiagnosticMessages::assertNoMessages);
diff --git a/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java b/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
index f63c4d9..93e46d0 100644
--- a/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/InvokeSuperToRewrittenDefaultMethodTest.java
@@ -106,7 +106,6 @@
}
}
- @FunctionalInterface
public interface CharConsumer extends Consumer<Character>, IntConsumer {
void accept(char c);
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
index f71c916..8397b6d 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/BufferedReaderTest.java
@@ -174,6 +174,7 @@
configurationAlternative3(options, false, parameters))
.addInnerClasses(BufferedReaderTest.class)
.addKeepMainRule(TestClass.class)
+ .addDontWarnRetargetLibraryMembers()
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.enableInliningAnnotations()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionForwardingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionForwardingTest.java
index cf0d8ef..1d08bfa 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionForwardingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionForwardingTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.desugar.desugaredlibrary;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
import java.util.ArrayList;
@@ -15,7 +14,6 @@
import java.util.List;
import java.util.ListIterator;
import java.util.Spliterator;
-import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -64,6 +62,7 @@
.addKeepMainRule(Executor.class)
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
+ .addDontWarnEmulatedLibraryClasses()
.compile()
.addDesugaredCoreLibraryRunClassPath(
this::buildDesugaredLibrary,
@@ -115,21 +114,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return null;
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return null;
}
@@ -144,27 +140,27 @@
}
@Override
- public boolean containsAll(@NotNull Collection<?> c) {
+ public boolean containsAll(Collection<?> c) {
return false;
}
@Override
- public boolean addAll(@NotNull Collection<? extends E> c) {
+ public boolean addAll(Collection<? extends E> c) {
return false;
}
@Override
- public boolean addAll(int index, @NotNull Collection<? extends E> c) {
+ public boolean addAll(int index, Collection<? extends E> c) {
return false;
}
@Override
- public boolean removeAll(@NotNull Collection<?> c) {
+ public boolean removeAll(Collection<?> c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection<?> c) {
+ public boolean retainAll(Collection<?> c) {
return false;
}
@@ -199,19 +195,16 @@
return 0;
}
- @NotNull
@Override
public ListIterator<E> listIterator() {
return null;
}
- @NotNull
@Override
public ListIterator<E> listIterator(int index) {
return null;
}
- @NotNull
@Override
public List<E> subList(int fromIndex, int toIndex) {
return null;
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionInterfaceSuperTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionInterfaceSuperTest.java
index 4bd591e..e26c8c3 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionInterfaceSuperTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionInterfaceSuperTest.java
@@ -7,7 +7,6 @@
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
import java.util.Collection;
@@ -15,7 +14,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;
-import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -82,6 +80,8 @@
testForR8(parameters.getBackend())
.addInnerClasses(CustomCollectionInterfaceSuperTest.class)
.addKeepMainRule(Main.class)
+ .addDontWarnEmulatedLibraryClasses()
+ .addDontWarnVivifiedClasses()
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
@@ -153,21 +153,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return Collections.emptyIterator();
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return a;
}
@@ -182,22 +179,22 @@
}
@Override
- public boolean containsAll(@NotNull Collection<?> c) {
+ public boolean containsAll(Collection<?> c) {
return false;
}
@Override
- public boolean addAll(@NotNull Collection<? extends E> c) {
+ public boolean addAll(Collection<? extends E> c) {
return false;
}
@Override
- public boolean removeAll(@NotNull Collection<?> c) {
+ public boolean removeAll(Collection<?> c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection<?> c) {
+ public boolean retainAll(Collection<?> c) {
return false;
}
@@ -226,21 +223,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return Collections.emptyIterator();
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return a;
}
@@ -255,22 +249,22 @@
}
@Override
- public boolean containsAll(@NotNull Collection<?> c) {
+ public boolean containsAll(Collection<?> c) {
return false;
}
@Override
- public boolean addAll(@NotNull Collection<? extends E> c) {
+ public boolean addAll(Collection<? extends E> c) {
return false;
}
@Override
- public boolean removeAll(@NotNull Collection<?> c) {
+ public boolean removeAll(Collection<?> c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection<?> c) {
+ public boolean retainAll(Collection<?> c) {
return false;
}
@@ -299,21 +293,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return Collections.emptyIterator();
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return a;
}
@@ -328,22 +319,22 @@
}
@Override
- public boolean containsAll(@NotNull Collection<?> c) {
+ public boolean containsAll(Collection<?> c) {
return false;
}
@Override
- public boolean addAll(@NotNull Collection<? extends E> c) {
+ public boolean addAll(Collection<? extends E> c) {
return false;
}
@Override
- public boolean removeAll(@NotNull Collection<?> c) {
+ public boolean removeAll(Collection<?> c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection<?> c) {
+ public boolean retainAll(Collection<?> c) {
return false;
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionSuperCallsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionSuperCallsTest.java
index 0707ab9..6d78e52 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionSuperCallsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionSuperCallsTest.java
@@ -106,6 +106,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(CustomCollectionSuperCallsTest.class)
.addKeepMainRule(Executor.class)
+ .addDontWarnVivifiedClasses()
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
index 0947a55..cd832f4 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/CustomCollectionTest.java
@@ -24,8 +24,6 @@
import java.util.List;
import java.util.SortedSet;
import java.util.stream.Stream;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -97,10 +95,7 @@
.disableDesugaring()
.compile()
.assertNoMessages()
- .inspect(
- inspector -> {
- this.assertCustomCollectionCallsCorrect(inspector);
- })
+ .inspect(this::assertCustomCollectionCallsCorrect)
.addDesugaredCoreLibraryRunClassPath(
this::buildDesugaredLibrary,
parameters.getApiLevel(),
@@ -138,6 +133,8 @@
.addInnerClasses(CustomCollectionTest.class)
.setMinApi(parameters.getApiLevel())
.addKeepClassAndMembersRules(Executor.class)
+ .addDontWarnEmulatedLibraryClasses()
+ .addDontWarnVivifiedClasses()
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(this::assertCustomCollectionCallsCorrect)
@@ -161,7 +158,8 @@
.allMatch(
instr ->
instr.toString().contains("$-EL")
- || instr.toString().contains("Comparator$-CC")));
+ || instr.toString().contains("Comparator$-CC")
+ || instr.toString().contains("Stream$-CC")));
} else {
assertTrue(direct.streamInstructions().noneMatch(instr -> instr.toString().contains("$-EL")));
}
@@ -178,7 +176,8 @@
.allMatch(
instr ->
instr.toString().contains("$-EL")
- || instr.toString().contains("Comparator$-CC")));
+ || instr.toString().contains("Comparator$-CC")
+ || instr.toString().contains("Stream$-CC")));
inherited.streamInstructions().forEach(this::assertInheritedDispatchCorrect);
}
@@ -311,21 +310,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return Collections.emptyIterator();
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return a;
}
@@ -340,22 +336,22 @@
}
@Override
- public boolean containsAll(@NotNull Collection<?> c) {
+ public boolean containsAll(Collection<?> c) {
return false;
}
@Override
- public boolean addAll(@NotNull Collection<? extends E> c) {
+ public boolean addAll(Collection<? extends E> c) {
return false;
}
@Override
- public boolean removeAll(@NotNull Collection<?> c) {
+ public boolean removeAll(Collection<?> c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection<?> c) {
+ public boolean retainAll(Collection<?> c) {
return false;
}
@@ -369,25 +365,21 @@
// Implements directly a core library interface which implements other library interfaces.
static class CustomSortedSet<E> implements SortedSet<E> {
- @Nullable
@Override
public Comparator<? super E> comparator() {
return null;
}
- @NotNull
@Override
public SortedSet<E> subSet(E fromElement, E toElement) {
return new CustomSortedSet<>();
}
- @NotNull
@Override
public SortedSet<E> headSet(E toElement) {
return new CustomSortedSet<>();
}
- @NotNull
@Override
public SortedSet<E> tailSet(E fromElement) {
return new CustomSortedSet<>();
@@ -418,21 +410,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return Collections.emptyIterator();
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return a;
}
@@ -447,7 +436,7 @@
}
@Override
- public boolean addAll(@NotNull Collection c) {
+ public boolean addAll(Collection c) {
return false;
}
@@ -455,17 +444,17 @@
public void clear() {}
@Override
- public boolean removeAll(@NotNull Collection c) {
+ public boolean removeAll(Collection c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection c) {
+ public boolean retainAll(Collection c) {
return false;
}
@Override
- public boolean containsAll(@NotNull Collection c) {
+ public boolean containsAll(Collection c) {
return false;
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/FeatureSplitTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/FeatureSplitTest.java
index d4f08fc..16377244 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/FeatureSplitTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/FeatureSplitTest.java
@@ -247,6 +247,7 @@
SplitterTestBase.simpleSplitProvider(
builder, feature2Path, temp, FeatureClass2.class))
.addKeepAllClassesRule()
+ .addDontWarnEmulatedLibraryClasses()
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.writeToZip(basePath);
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
index f998b89..0c16701 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/IterableTest.java
@@ -19,7 +19,6 @@
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
-import org.jetbrains.annotations.NotNull;
import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -138,7 +137,6 @@
this.collection = collection;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return collection.iterator();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaTimeTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaTimeTest.java
index 31bbcbd..e030d3f 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaTimeTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaTimeTest.java
@@ -264,6 +264,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(JavaTimeTest.class)
.addKeepMainRule(TestClass.class)
+ .addDontWarnRetargetLibraryMembers()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MinimalInterfaceSuperTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MinimalInterfaceSuperTest.java
index 616ec2c..1e2a8e8 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MinimalInterfaceSuperTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MinimalInterfaceSuperTest.java
@@ -12,7 +12,6 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.function.Predicate;
-import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -46,6 +45,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(MinimalInterfaceSuperTest.class)
.addKeepMainRule(Main.class)
+ .addDontWarnVivifiedClasses()
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel())
.compile()
@@ -71,7 +71,6 @@
}
static class Col1<E> extends AbstractCollection<E> implements Col1Itf<E> {
- @NotNull
@Override
public Iterator<E> iterator() {
return Collections.emptyIterator();
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoDesugaredLibraryDexFileTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoDesugaredLibraryDexFileTest.java
index a6ea994..f0e55c0 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoDesugaredLibraryDexFileTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoDesugaredLibraryDexFileTest.java
@@ -16,8 +16,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.SortedSet;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -97,25 +95,21 @@
// Implements directly a core library interface which implements other library interfaces.
static class CustomSortedSet<E> implements SortedSet<E> {
- @Nullable
@Override
public Comparator<? super E> comparator() {
return null;
}
- @NotNull
@Override
public SortedSet<E> subSet(E fromElement, E toElement) {
return new CustomSortedSet<>();
}
- @NotNull
@Override
public SortedSet<E> headSet(E toElement) {
return new CustomSortedSet<>();
}
- @NotNull
@Override
public SortedSet<E> tailSet(E fromElement) {
return new CustomSortedSet<>();
@@ -146,21 +140,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return Collections.emptyIterator();
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return a;
}
@@ -175,7 +166,7 @@
}
@Override
- public boolean addAll(@NotNull Collection c) {
+ public boolean addAll(Collection c) {
return false;
}
@@ -183,17 +174,17 @@
public void clear() {}
@Override
- public boolean removeAll(@NotNull Collection c) {
+ public boolean removeAll(Collection c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection c) {
+ public boolean retainAll(Collection c) {
return false;
}
@Override
- public boolean containsAll(@NotNull Collection c) {
+ public boolean containsAll(Collection c) {
return false;
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoForwardingMethodsTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoForwardingMethodsTest.java
index 98ad7dc..b8f2a9f 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoForwardingMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/NoForwardingMethodsTest.java
@@ -17,8 +17,6 @@
import java.util.List;
import java.util.Objects;
import java.util.SortedSet;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -67,6 +65,7 @@
.setMinApi(parameters.getApiLevel())
.addKeepClassAndMembersRules(Executor.class)
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
+ .addDontWarnEmulatedLibraryClasses()
.compile()
.inspect(this::assertNoForwardingStreamMethod)
.addDesugaredCoreLibraryRunClassPath(
@@ -103,25 +102,21 @@
// Implements directly a core library interface which implements other library interfaces.
static class CustomSortedSet<E> implements SortedSet<E> {
- @Nullable
@Override
public Comparator<? super E> comparator() {
return null;
}
- @NotNull
@Override
public SortedSet<E> subSet(E fromElement, E toElement) {
return new CustomSortedSet<>();
}
- @NotNull
@Override
public SortedSet<E> headSet(E toElement) {
return new CustomSortedSet<>();
}
- @NotNull
@Override
public SortedSet<E> tailSet(E fromElement) {
return new CustomSortedSet<>();
@@ -152,21 +147,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return Collections.emptyIterator();
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return a;
}
@@ -181,7 +173,7 @@
}
@Override
- public boolean addAll(@NotNull Collection c) {
+ public boolean addAll(Collection c) {
return false;
}
@@ -189,17 +181,17 @@
public void clear() {}
@Override
- public boolean removeAll(@NotNull Collection c) {
+ public boolean removeAll(Collection c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection c) {
+ public boolean retainAll(Collection c) {
return false;
}
@Override
- public boolean containsAll(@NotNull Collection c) {
+ public boolean containsAll(Collection c) {
return false;
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
index 69f366f..7dde5dc 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ProgramRewritingTest.java
@@ -120,6 +120,7 @@
testForR8(parameters.getBackend())
.minification(minifying)
.addKeepMainRule(TEST_CLASS)
+ .addDontWarnEmulatedLibraryClasses()
.addProgramFiles(Paths.get(ToolHelper.EXAMPLES_JAVA9_BUILD_DIR + "stream.jar"))
.setMinApi(parameters.getApiLevel())
.addOptionsModification(
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
index 59dbd1b..bacc4ec 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/RetargetOverrideTest.java
@@ -5,8 +5,6 @@
package com.android.tools.r8.desugar.desugaredlibrary;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper.DexVm.Version;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import java.time.Instant;
import java.time.ZonedDateTime;
@@ -64,6 +62,9 @@
testForR8(Backend.DEX)
.addKeepMainRule(Executor.class)
.addInnerClasses(RetargetOverrideTest.class)
+ .addDontWarnRetargetLibraryMembers()
+ .addDontWarnTimeConversions()
+ .addDontWarnVivifiedClasses()
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SynchronizedCollectionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SynchronizedCollectionTest.java
index 2ad9b4f..b1234ab 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SynchronizedCollectionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/SynchronizedCollectionTest.java
@@ -79,6 +79,7 @@
testForR8(parameters.getBackend())
.addProgramFiles(INPUT_JAR)
.addKeepMainRule(MAIN_CLASS)
+ .addDontWarnEmulatedLibraryClasses()
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
index cb8c24f..71e690e 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/CallBackConversionTest.java
@@ -172,6 +172,7 @@
.setMinApi(parameters.getApiLevel())
.addProgramClasses(Impl.class)
.addLibraryClasses(CustomLibClass.class)
+ .addDontWarnVivifiedClasses()
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(this::assertLibraryOverridesThere)
@@ -189,6 +190,7 @@
.setMinApi(parameters.getApiLevel())
.addProgramClasses(Impl.class)
.addLibraryClasses(CustomLibClass.class)
+ .addDontWarnVivifiedClasses()
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(this::assertLibraryOverridesThere)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
index 5c01507..d769448 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/ConversionIntroduceInterfaceMethodTest.java
@@ -23,7 +23,6 @@
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;
-import org.jetbrains.annotations.NotNull;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -155,6 +154,7 @@
opt.desugaredLibraryConfiguration =
configurationWithSupportAllCallbacksFromLibrary(
opt, false, parameters, supportAllCallbacksFromLibrary))
+ .addDontWarnVivifiedClasses()
.compile()
.inspect(this::assertDoubleForEach)
.inspect(this::assertWrapperMethodsPresent)
@@ -224,15 +224,13 @@
return Collections.<E>singletonList(null).iterator();
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] a) {
+ public <T> T[] toArray(T[] a) {
return null;
}
@@ -247,22 +245,22 @@
}
@Override
- public boolean containsAll(@NotNull Collection<?> c) {
+ public boolean containsAll(Collection<?> c) {
return false;
}
@Override
- public boolean addAll(@NotNull Collection<? extends E> c) {
+ public boolean addAll(Collection<? extends E> c) {
return false;
}
@Override
- public boolean removeAll(@NotNull Collection<?> c) {
+ public boolean removeAll(Collection<?> c) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection<?> c) {
+ public boolean retainAll(Collection<?> c) {
return false;
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIProgramTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIProgramTest.java
index b62045b..4b8c213 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIProgramTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/DuplicateAPIProgramTest.java
@@ -84,6 +84,7 @@
.addKeepMainRule(Executor.class)
.addProgramClasses(Executor.class, MyMap.class)
.addLibraryClasses(CustomLibClass.class)
+ .addDontWarnVivifiedClasses()
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
.compile()
.inspect(this::assertDupMethod)
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/FunctionConversionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/FunctionConversionTest.java
index 6afc3a5..24588c6 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/FunctionConversionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/conversiontests/FunctionConversionTest.java
@@ -174,7 +174,7 @@
private Object1 field;
- private Object2(Object1 o) {
+ Object2(Object1 o) {
this.field = o;
}
}
@@ -183,7 +183,7 @@
private Object2 field;
- private Object3(Object2 o) {
+ Object3(Object2 o) {
this.field = o;
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/GetGenericInterfaceTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/GetGenericInterfaceTest.java
index 249f26f..1ba5416 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/GetGenericInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/gson/GetGenericInterfaceTest.java
@@ -24,8 +24,6 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -75,6 +73,7 @@
testForR8(Backend.DEX)
.addInnerClasses(GetGenericInterfaceTest.class)
.addKeepMainRule(Executor.class)
+ .addDontWarnRetargetLibraryMembers()
.noMinification()
.setMinApi(parameters.getApiLevel())
.enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
@@ -301,7 +300,6 @@
return null;
}
- @Nullable
@Override
public V put(K k, V v) {
return null;
@@ -313,46 +311,43 @@
}
@Override
- public void putAll(@NotNull Map<? extends K, ? extends V> map) {}
+ public void putAll(Map<? extends K, ? extends V> map) {}
@Override
public void clear() {}
- @NotNull
@Override
public Set<K> keySet() {
return null;
}
- @NotNull
@Override
public Collection<V> values() {
return null;
}
- @NotNull
@Override
public Set<Entry<K, V>> entrySet() {
return null;
}
@Override
- public V putIfAbsent(@NotNull K k, V v) {
+ public V putIfAbsent(K k, V v) {
return null;
}
@Override
- public boolean remove(@NotNull Object o, Object o1) {
+ public boolean remove(Object o, Object o1) {
return false;
}
@Override
- public boolean replace(@NotNull K k, @NotNull V v, @NotNull V v1) {
+ public boolean replace(K k, V v, V v1) {
return false;
}
@Override
- public V replace(@NotNull K k, @NotNull V v) {
+ public V replace(K k, V v) {
return null;
}
}
@@ -394,7 +389,6 @@
return null;
}
- @Nullable
@Override
public V put(K k, V v) {
return null;
@@ -406,46 +400,43 @@
}
@Override
- public void putAll(@NotNull Map<? extends K, ? extends V> map) {}
+ public void putAll(Map<? extends K, ? extends V> map) {}
@Override
public void clear() {}
- @NotNull
@Override
public Set<K> keySet() {
return null;
}
- @NotNull
@Override
public Collection<V> values() {
return null;
}
- @NotNull
@Override
public Set<Entry<K, V>> entrySet() {
return null;
}
@Override
- public V putIfAbsent(@NotNull K k, V v) {
+ public V putIfAbsent(K k, V v) {
return null;
}
@Override
- public boolean remove(@NotNull Object o, Object o1) {
+ public boolean remove(Object o, Object o1) {
return false;
}
@Override
- public boolean replace(@NotNull K k, @NotNull V v, @NotNull V v1) {
+ public boolean replace(K k, V v, V v1) {
return false;
}
@Override
- public V replace(@NotNull K k, @NotNull V v) {
+ public V replace(K k, V v) {
return null;
}
@@ -475,21 +466,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return null;
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] ts) {
+ public <T> T[] toArray(T[] ts) {
return null;
}
@@ -504,27 +492,27 @@
}
@Override
- public boolean containsAll(@NotNull Collection<?> collection) {
+ public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
- public boolean addAll(@NotNull Collection<? extends E> collection) {
+ public boolean addAll(Collection<? extends E> collection) {
return false;
}
@Override
- public boolean addAll(int i, @NotNull Collection<? extends E> collection) {
+ public boolean addAll(int i, Collection<? extends E> collection) {
return false;
}
@Override
- public boolean removeAll(@NotNull Collection<?> collection) {
+ public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection<?> collection) {
+ public boolean retainAll(Collection<?> collection) {
return false;
}
@@ -559,19 +547,16 @@
return 0;
}
- @NotNull
@Override
public ListIterator<E> listIterator() {
return null;
}
- @NotNull
@Override
public ListIterator<E> listIterator(int i) {
return null;
}
- @NotNull
@Override
public List<E> subList(int i, int i1) {
return null;
@@ -603,21 +588,18 @@
return false;
}
- @NotNull
@Override
public Iterator<E> iterator() {
return null;
}
- @NotNull
@Override
public Object[] toArray() {
return new Object[0];
}
- @NotNull
@Override
- public <T> T[] toArray(@NotNull T[] ts) {
+ public <T> T[] toArray(T[] ts) {
return null;
}
@@ -632,27 +614,27 @@
}
@Override
- public boolean containsAll(@NotNull Collection<?> collection) {
+ public boolean containsAll(Collection<?> collection) {
return false;
}
@Override
- public boolean addAll(@NotNull Collection<? extends E> collection) {
+ public boolean addAll(Collection<? extends E> collection) {
return false;
}
@Override
- public boolean addAll(int i, @NotNull Collection<? extends E> collection) {
+ public boolean addAll(int i, Collection<? extends E> collection) {
return false;
}
@Override
- public boolean removeAll(@NotNull Collection<?> collection) {
+ public boolean removeAll(Collection<?> collection) {
return false;
}
@Override
- public boolean retainAll(@NotNull Collection<?> collection) {
+ public boolean retainAll(Collection<?> collection) {
return false;
}
@@ -687,19 +669,16 @@
return 0;
}
- @NotNull
@Override
public ListIterator<E> listIterator() {
return null;
}
- @NotNull
@Override
public ListIterator<E> listIterator(int i) {
return null;
}
- @NotNull
@Override
public List<E> subList(int i, int i1) {
return null;
@@ -710,7 +689,6 @@
}
static class CollectionMapImplements2<R, C> implements Iterable<R>, Map<R, C> {
- @NotNull
@Override
public Iterator<R> iterator() {
return null;
@@ -741,7 +719,6 @@
return null;
}
- @Nullable
@Override
public C put(R r, C c) {
return null;
@@ -753,24 +730,21 @@
}
@Override
- public void putAll(@NotNull Map<? extends R, ? extends C> map) {}
+ public void putAll(Map<? extends R, ? extends C> map) {}
@Override
public void clear() {}
- @NotNull
@Override
public Set<R> keySet() {
return null;
}
- @NotNull
@Override
public Collection<C> values() {
return null;
}
- @NotNull
@Override
public Set<Entry<R, C>> entrySet() {
return null;
@@ -778,7 +752,6 @@
}
static class CollectionMapExtendImplement<R, C> extends HashMap<R, C> implements Iterable<R> {
- @NotNull
@Override
public Iterator<R> iterator() {
return null;
@@ -809,7 +782,6 @@
return null;
}
- @Nullable
@Override
public C put(R r, C c) {
return null;
@@ -821,24 +793,21 @@
}
@Override
- public void putAll(@NotNull Map<? extends R, ? extends C> map) {}
+ public void putAll(Map<? extends R, ? extends C> map) {}
@Override
public void clear() {}
- @NotNull
@Override
public Set<R> keySet() {
return null;
}
- @NotNull
@Override
public Collection<C> values() {
return null;
}
- @NotNull
@Override
public Set<Entry<R, C>> entrySet() {
return null;
@@ -847,7 +816,6 @@
static class CollectionMapImplements2Integer1<C>
implements Iterable<PathClassLoader>, Map<PathClassLoader, C> {
- @NotNull
@Override
public Iterator<PathClassLoader> iterator() {
return null;
@@ -878,7 +846,6 @@
return null;
}
- @Nullable
@Override
public C put(PathClassLoader unsafe, C c) {
return null;
@@ -890,24 +857,21 @@
}
@Override
- public void putAll(@NotNull Map<? extends PathClassLoader, ? extends C> map) {}
+ public void putAll(Map<? extends PathClassLoader, ? extends C> map) {}
@Override
public void clear() {}
- @NotNull
@Override
public Set<PathClassLoader> keySet() {
return null;
}
- @NotNull
@Override
public Collection<C> values() {
return null;
}
- @NotNull
@Override
public Set<Entry<PathClassLoader, C>> entrySet() {
return null;
@@ -916,7 +880,6 @@
static class CollectionMapExtendImplementInteger1<C> extends HashMap<PathClassLoader, C>
implements Iterable<PathClassLoader> {
- @NotNull
@Override
public Iterator<PathClassLoader> iterator() {
return null;
@@ -924,7 +887,6 @@
}
static class CollectionMapImplements2Integer2<R> implements Iterable<R>, Map<R, PathClassLoader> {
- @NotNull
@Override
public Iterator<R> iterator() {
return null;
@@ -955,7 +917,6 @@
return null;
}
- @Nullable
@Override
public PathClassLoader put(R r, PathClassLoader unsafe) {
return null;
@@ -967,24 +928,21 @@
}
@Override
- public void putAll(@NotNull Map<? extends R, ? extends PathClassLoader> map) {}
+ public void putAll(Map<? extends R, ? extends PathClassLoader> map) {}
@Override
public void clear() {}
- @NotNull
@Override
public Set<R> keySet() {
return null;
}
- @NotNull
@Override
public Collection<PathClassLoader> values() {
return null;
}
- @NotNull
@Override
public Set<Entry<R, PathClassLoader>> entrySet() {
return null;
@@ -993,7 +951,6 @@
static class CollectionMapExtendImplementInteger2<R> extends HashMap<R, PathClassLoader>
implements Iterable<R> {
- @NotNull
@Override
public Iterator<R> iterator() {
return null;
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
index 89748a7..aa5393a 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/kotlin/KotlinMetadataTest.java
@@ -133,7 +133,8 @@
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.setMinApi(parameters.getApiLevel())
- .allowDiagnosticWarningMessages();
+ .allowDiagnosticWarningMessages()
+ .addDontWarnJetBrains();
KeepRuleConsumer keepRuleConsumer = null;
if (desugarLibrary) {
keepRuleConsumer = createKeepRuleConsumer(parameters);
diff --git a/src/test/java/com/android/tools/r8/desugar/enclosingmethod/EnclosingMethodRewriteTest.java b/src/test/java/com/android/tools/r8/desugar/enclosingmethod/EnclosingMethodRewriteTest.java
index 897f4a7..3e60058 100644
--- a/src/test/java/com/android/tools/r8/desugar/enclosingmethod/EnclosingMethodRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/enclosingmethod/EnclosingMethodRewriteTest.java
@@ -3,20 +3,26 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.desugar.enclosingmethod;
-import static org.hamcrest.CoreMatchers.containsString;
+import static com.android.tools.r8.ir.desugar.InterfaceMethodRewriter.COMPANION_CLASS_NAME_SUFFIX;
+import static com.android.tools.r8.ir.desugar.InterfaceMethodRewriter.DEFAULT_METHOD_PREFIX;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.ClassFileConsumer.ArchiveConsumer;
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.util.Collection;
+import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -52,11 +58,6 @@
@RunWith(Parameterized.class)
public class EnclosingMethodRewriteTest extends TestBase {
private static final Class<?> MAIN = TestClass.class;
- private static final String JAVA_OUTPUT = StringUtils.lines(
- "interface " + A.class.getName(),
- "public default int " + A.class.getName() + ".def()",
- "42"
- );
private final TestParameters parameters;
private final boolean enableMinification;
@@ -64,8 +65,7 @@
@Parameterized.Parameters(name = "{0} minification: {1}")
public static Collection<Object[]> data() {
return buildParameters(
- getTestParameters().withAllRuntimes().withAllApiLevels().build(),
- BooleanUtils.values());
+ getTestParameters().withAllRuntimesAndApiLevels().build(), BooleanUtils.values());
}
public EnclosingMethodRewriteTest(TestParameters parameters, boolean enableMinification) {
@@ -79,7 +79,7 @@
testForJvm()
.addTestClasspath()
.run(parameters.getRuntime(), MAIN)
- .assertSuccessWithOutput(JAVA_OUTPUT);
+ .assertSuccessWithOutputLines(getExpectedOutput());
}
@Test
@@ -88,7 +88,8 @@
Path desugared = temp.newFile("desugared.jar").toPath().toAbsolutePath();
R8FullTestBuilder builder =
testForR8(parameters.getBackend())
- .addProgramClasses(A.class, C.class, MAIN)
+ .addProgramClassesAndInnerClasses(A.class)
+ .addProgramClasses(C.class, MAIN)
.addKeepMainRule(MAIN)
.addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
.setProgramConsumer(new ArchiveConsumer(desugared))
@@ -99,41 +100,100 @@
builder.addKeepAllClassesRule();
}
builder.compile().assertNoMessages();
- try {
- testForProguard()
- .addProgramFiles(desugared)
- .addKeepMainRule(MAIN)
- .addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
- .run(parameters.getRuntime(), MAIN)
- .assertSuccessWithOutput(JAVA_OUTPUT);
- } catch (CompilationFailedException e) {
- // TODO(b/70293332)
- assertThat(e.getMessage(), containsString("unresolved references"));
- assertThat(e.getMessage(), containsString(A.class.getName() + "$1"));
- }
+ testForProguard()
+ .addProgramFiles(desugared)
+ .addKeepMainRule(MAIN)
+ .addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
+ .run(parameters.getRuntime(), MAIN)
+ .assertSuccess();
}
@Test
public void testR8() throws Exception {
R8FullTestBuilder builder =
testForR8(parameters.getBackend())
- .addProgramClasses(A.class, C.class, MAIN)
+ .addProgramClassesAndInnerClasses(A.class)
+ .addProgramClasses(C.class, MAIN)
.addKeepMainRule(MAIN)
.addKeepRules("-keepattributes InnerClasses,EnclosingMethod")
.setMinApi(parameters.getApiLevel());
if (enableMinification) {
builder.addKeepAllClassesRuleWithAllowObfuscation();
} else {
- builder.addKeepAllClassesRule();
- }
- String errorType = "ClassNotFoundException";
- if (parameters.isDexRuntime()
- && parameters.getRuntime().asDex().getVm().isOlderThanOrEqual(DexVm.ART_4_4_4_HOST)) {
- errorType = "NoClassDefFoundError";
+ builder.noTreeShaking().noMinification();
}
builder
+ .compile()
+ .inspect(
+ inspect -> {
+ ClassSubject cImplSubject = inspect.clazz(A.class.getTypeName() + "$1");
+ assertThat(cImplSubject, isPresent());
+
+ ClassSubject enclosingClassSubject =
+ inspect.clazz(
+ parameters.canUseDefaultAndStaticInterfaceMethods()
+ ? A.class.getTypeName()
+ : A.class.getTypeName() + COMPANION_CLASS_NAME_SUFFIX);
+ assertThat(enclosingClassSubject, isPresent());
+ assertEquals(
+ enclosingClassSubject.getDexProgramClass().getType(),
+ cImplSubject
+ .getDexProgramClass()
+ .getEnclosingMethodAttribute()
+ .getEnclosingMethod()
+ .getHolderType());
+ })
.run(parameters.getRuntime(), MAIN)
- // TODO(b/70293332)
- .assertFailureWithErrorThatMatches(containsString(errorType));
+ .apply(
+ result -> result.assertSuccessWithOutputLines(getExpectedOutput(result.inspector())));
+ }
+
+ private List<String> getExpectedOutput() {
+ return ImmutableList.of(
+ "interface " + A.class.getTypeName(),
+ "public default int " + A.class.getTypeName() + ".def()",
+ "42");
+ }
+
+ private List<String> getExpectedOutput(CodeInspector inspector) {
+ ClassSubject aClassSubject = inspector.clazz(A.class);
+ assertThat(aClassSubject, isPresent());
+
+ MethodSubject defMethodSubject = aClassSubject.uniqueMethodWithName("def");
+ assertThat(defMethodSubject, isPresent());
+
+ if (parameters.canUseDefaultAndStaticInterfaceMethods()) {
+ String modifiers =
+ parameters.isCfRuntime()
+ || parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V8_1_0)
+ ? "public default"
+ : "public";
+ return ImmutableList.of(
+ "interface " + aClassSubject.getFinalName(),
+ modifiers
+ + " int "
+ + aClassSubject.getFinalName()
+ + "."
+ + defMethodSubject.getFinalName()
+ + "()",
+ "42");
+ }
+
+ ClassSubject aCompanionClassSubject =
+ inspector.clazz(A.class.getTypeName() + COMPANION_CLASS_NAME_SUFFIX);
+ assertThat(aCompanionClassSubject, isPresent());
+
+ String methodNamePrefix = enableMinification ? "" : DEFAULT_METHOD_PREFIX;
+ return ImmutableList.of(
+ "class " + aCompanionClassSubject.getFinalName(),
+ "public static int "
+ + aCompanionClassSubject.getFinalName()
+ + "."
+ + methodNamePrefix
+ + defMethodSubject.getFinalName()
+ + "("
+ + aClassSubject.getFinalName()
+ + ")",
+ "42");
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
index 1fa2bdc..8a37cd0 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
@@ -50,7 +50,7 @@
return getTestParameters()
.withCfRuntimesStartingFromIncluding(CfVm.JDK11)
.withDexRuntimes()
- .withAllApiLevels()
+ .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
.build();
}
@@ -143,6 +143,7 @@
.addKeepAllAttributes()
.addOptionsModification(options -> options.enableNestReduction = false)
.addProgramFiles(JAR)
+ .addInliningAnnotations()
.setMinApi(minApi)
.compile();
}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
index 5a788bf..ee5b311 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
@@ -68,6 +68,8 @@
.addKeepRuleFiles(MAIN_KEEP)
.addOptionsModification(
options -> options.testing.enableForceNestBasedAccessDesugaringForTest = desugar)
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
.compile()
.inspect(inspector -> assertNests(inspector, desugar))
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
index 6ebe0db..eecd15c 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.desugar.nestaccesscontrol;
import static junit.framework.TestCase.assertTrue;
-import static org.hamcrest.CoreMatchers.containsString;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -51,10 +50,11 @@
.setMinApi(parameters.getApiLevel())
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
.addKeepRuleFiles(MAIN_KEEP)
+ // TODO(b/177967938): Investigate why this is needed.
+ .addDontWarnJavaLangInvoke()
+ .addDontWarnJavaNioFile()
.addOptionsModification(opt -> opt.ignoreMissingClasses = true)
- .allowDiagnosticWarningMessages()
.compile()
- .assertAllWarningMessagesMatch(containsString("Missing class "))
.inspect(this::assertNotEmpty)
.inspect(Java11R8CompilationTest::assertNoNests);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
index 56b025c..c55df8c 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
@@ -37,7 +37,7 @@
.withCfRuntimesStartingFromIncluding(CfVm.JDK11)
.withDexRuntime(DexVm.Version.first())
.withDexRuntime(DexVm.Version.last())
- .withAllApiLevels()
+ .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
.build();
}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
index 816a233..aa22447 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
@@ -94,6 +94,7 @@
options.enableClassInlining = false;
})
.addProgramFiles(classesMatching(outerNestName))
+ .addInliningAnnotations()
.compile()
.inspect(
inspector -> {
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
index e9cdbe0..62aa4a3 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
@@ -53,7 +53,7 @@
.withCfRuntimesStartingFromIncluding(CfVm.JDK11)
.withDexRuntime(DexVm.Version.first())
.withDexRuntime(DexVm.Version.last())
- .withAllApiLevels()
+ .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
.build();
}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
index 1ed0e0a..85bade9 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
@@ -33,7 +33,7 @@
.withCfRuntimesStartingFromIncluding(CfVm.JDK11)
.withDexRuntime(DexVm.Version.first())
.withDexRuntime(DexVm.Version.last())
- .withAllApiLevels()
+ .withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
.build();
}
diff --git a/src/test/java/com/android/tools/r8/desugar/twr/TwrCloseResourceDuplicationTest.java b/src/test/java/com/android/tools/r8/desugar/twr/TwrCloseResourceDuplicationTest.java
index dde98e2..aac4a9e 100644
--- a/src/test/java/com/android/tools/r8/desugar/twr/TwrCloseResourceDuplicationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/twr/TwrCloseResourceDuplicationTest.java
@@ -90,6 +90,9 @@
.addInnerClasses(getClass())
.addKeepMainRule(TestClass.class)
.addKeepClassAndMembersRules(Foo.class, Bar.class)
+ .applyIf(
+ parameters.getApiLevel().isLessThan(apiLevelWithTwrCloseResourceSupport()),
+ builder -> builder.addDontWarn("java.lang.AutoCloseable"))
.setMinApi(parameters.getApiLevel())
.noMinification()
.run(parameters.getRuntime(), TestClass.class, getZipFile())
diff --git a/src/test/java/com/android/tools/r8/desugaring/lambdanames/PackageDependentLambdaNamesTest.java b/src/test/java/com/android/tools/r8/desugaring/lambdanames/PackageDependentLambdaNamesTest.java
index 5730599..771a77f 100644
--- a/src/test/java/com/android/tools/r8/desugaring/lambdanames/PackageDependentLambdaNamesTest.java
+++ b/src/test/java/com/android/tools/r8/desugaring/lambdanames/PackageDependentLambdaNamesTest.java
@@ -85,7 +85,6 @@
return transformer.transform();
}
- @FunctionalInterface
public interface StringConsumer {
void accept(String arg);
}
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterMergeRegression.java b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterMergeRegression.java
index c9dd274..780696e 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterMergeRegression.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterMergeRegression.java
@@ -62,8 +62,7 @@
r8FullTestBuilder
.enableNoVerticalClassMergingAnnotations()
.enableInliningAnnotations()
- .noMinification()
- .addOptionsModification(o -> o.testing.deterministicSortingBasedOnDexType = true);
+ .noMinification();
ProcessResult processResult =
testDexSplitter(
parameters,
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java b/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
index c41a1d1..dce9fbc 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/SplitterTestBase.java
@@ -143,6 +143,7 @@
.addProgramClasses(baseClasses)
.addFeatureSplit(
builder -> simpleSplitProvider(builder, featureOutput, temp, featureClasses))
+ .addInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(SplitRunner.class)
.addKeepClassRules(toRun);
@@ -182,6 +183,7 @@
.addClasspathClasses(baseClasses)
.addClasspathClasses(RunInterface.class)
.addKeepAllClassesRule()
+ .addInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java b/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
index 3dabac7..4b1bb9e 100644
--- a/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
+++ b/src/test/java/com/android/tools/r8/diagnostics/ModifyDiagnosticsLevelTest.java
@@ -48,12 +48,11 @@
})
.allowDiagnosticInfoMessages()
.compileWithExpectedDiagnostics(
- diagnostics -> {
- diagnostics
- .assertOnlyInfos()
- .assertInfosCount(1)
- .assertInfosMatch(diagnosticMessage(startsWith(MISSING_CLASS_MESSAGE_PREFIX)));
- });
+ diagnostics ->
+ diagnostics
+ .assertOnlyInfos()
+ .assertInfosCount(1)
+ .assertInfosMatch(diagnosticMessage(startsWith(MISSING_CLASS_MESSAGE_PREFIX))));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/AnnotationEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/AnnotationEnumUnboxingTest.java
index 20362c3..0bc6b67 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/AnnotationEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/AnnotationEnumUnboxingTest.java
@@ -51,6 +51,7 @@
.addKeepRuntimeVisibleAnnotations()
.enableNeverClassInliningAnnotations()
.enableInliningAnnotations()
+ .enableMemberValuePropagationAnnotations()
.enableNoVerticalClassMergingAnnotations()
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
.allowDiagnosticInfoMessages()
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
index a4f280c..3c48865 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/kotlin/SimpleKotlinEnumUnboxingTest.java
@@ -4,8 +4,10 @@
package com.android.tools.r8.enumunboxing.kotlin;
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
import static com.android.tools.r8.KotlinTestBase.getCompileMemoizer;
import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
+import static org.hamcrest.core.StringContains.containsString;
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
@@ -68,18 +70,25 @@
public void testEnumUnboxing() throws Exception {
assumeTrue(parameters.isDexRuntime());
testForR8(parameters.getBackend())
- .addProgramFiles(jars.getForConfiguration(kotlinCompiler, targetVersion))
+ .addProgramFiles(
+ jars.getForConfiguration(kotlinCompiler, targetVersion),
+ ToolHelper.getKotlinStdlibJar(kotlinCompiler))
.addKeepMainRule(PKG + ".MainKt")
.addKeepRules(enumKeepRules.getKeepRules())
.addKeepRuntimeVisibleAnnotations()
.addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))
- .allowDiagnosticInfoMessages()
+ .allowDiagnosticMessages()
.setMinApi(parameters.getApiLevel())
.compile()
.inspectDiagnosticMessages(
- m -> {
+ messages -> {
+ messages
+ .assertNoErrors()
+ .assertAllWarningsMatch(
+ diagnosticMessage(
+ containsString("Resource 'META-INF/MANIFEST.MF' already exists.")));
assertEnumIsUnboxed(
- PKG + ".Color", SimpleKotlinEnumUnboxingTest.class.getSimpleName(), m);
+ PKG + ".Color", SimpleKotlinEnumUnboxingTest.class.getSimpleName(), messages);
})
.run(parameters.getRuntime(), PKG + ".MainKt")
.assertSuccessWithOutputLines("RED", "GREEN", "BLUE");
diff --git a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
index 183ae6b..509bfa2 100644
--- a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
@@ -34,20 +34,20 @@
@Test
public void testRuntime() throws Exception {
testForRuntime(parameters.getRuntime(), parameters.getApiLevel())
- .addProgramClasses(I.class, Main.class)
+ .addProgramClassesAndInnerClasses(Main.class)
+ .addProgramClasses(I.class)
.addProgramClassFileData(getClassWithTransformedInvoked())
.run(parameters.getRuntime(), Main.class)
- .assertFailureWithErrorThatThrows(
- parameters.isCfRuntime()
- ? VerifyError.class
- // TODO(b/144410139): Consider making this a compilation failure.
- : NoClassDefFoundError.class);
+ // TODO(b/144410139): Consider making this a compilation failure when generating DEX.
+ .assertSuccessWithOutputLinesIf(parameters.isDexRuntime(), "Hello World!")
+ .assertFailureWithErrorThatThrowsIf(parameters.isCfRuntime(), VerifyError.class);
}
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
- .addProgramClasses(I.class, Main.class)
+ .addProgramClassesAndInnerClasses(Main.class)
+ .addProgramClasses(I.class)
.addProgramClassFileData(getClassWithTransformedInvoked())
.addKeepMainRule(Main.class)
.setMinApi(parameters.getApiLevel())
@@ -56,7 +56,7 @@
parameters.isCfRuntime()
? VerifyError.class
// TODO(b/144410139): Consider making this a compilation failure.
- : NoClassDefFoundError.class);
+ : NullPointerException.class);
}
private byte[] getClassWithTransformedInvoked() throws IOException {
diff --git a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialToSubclassTest.java b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialToSubclassTest.java
index b439787..9c44e2a 100644
--- a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialToSubclassTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialToSubclassTest.java
@@ -42,25 +42,21 @@
@Test
public void testRuntime() throws Exception {
testForRuntime(parameters.getRuntime(), parameters.getApiLevel())
- .addProgramClasses(EmptySubC.class, C.class, Main.class)
+ .addProgramClasses(EmptySubC.class, C.class, D.class, Main.class)
.addProgramClassFileData(getClassBWithTransformedInvoked(holder))
.run(parameters.getRuntime(), Main.class)
- // The failures are very different from one back-end to another: verification error,
- // invalid invoke-super, segmentation fault, NoSuchMethod, etc.
- .assertFailure();
+ .assertSuccessWithOutputLines("Should not be called.");
}
@Test
public void testR8() throws Exception {
testForR8(parameters.getBackend())
- .addProgramClasses(EmptySubC.class, C.class, Main.class)
+ .addProgramClasses(EmptySubC.class, C.class, D.class, Main.class)
.addProgramClassFileData(getClassBWithTransformedInvoked(holder))
.addKeepMainRule(Main.class)
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
- // The failures are very different from one back-end to another: verification error,
- // invalid invoke-super, segmentation fault, NoSuchMethod, etc.
- .assertFailure();
+ .assertSuccessWithOutputLines("Should not be called.");
}
private byte[] getClassBWithTransformedInvoked(Class<?> holder) throws IOException {
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/MissingClassesJoinTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/MissingClassesJoinTest.java
index 6d3c6cb..e654b89 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/MissingClassesJoinTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/MissingClassesJoinTest.java
@@ -69,6 +69,7 @@
.addProgramClasses(A.class, ASub1.class, Box.class, TestClass.class)
.addKeepAllClassesRule()
.addOptionsModification(options -> options.testing.allowTypeErrors = allowTypeErrors)
+ .addDontWarn(ASub2.class)
.allowDiagnosticWarningMessages()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
index 14d7e6b..da19669 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
@@ -5,7 +5,9 @@
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ThrowableConsumer;
import com.android.tools.r8.ir.optimize.nonnull.FieldAccessTest;
import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterArrayAccess;
import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterFieldAccess;
@@ -32,10 +34,19 @@
}
private void testR8(Class<?> testClass, List<MethodSignature> signatures) throws Exception {
+ testR8(testClass, signatures, null);
+ }
+
+ private void testR8(
+ Class<?> testClass,
+ List<MethodSignature> signatures,
+ ThrowableConsumer<R8FullTestBuilder> configuration)
+ throws Exception {
CodeInspector codeInspector =
testForR8(Backend.DEX)
.addProgramClasses(testClass)
.addKeepRules("-keep class " + testClass.getCanonicalName() + " { *; }")
+ .apply(configuration)
.compile()
.inspector();
verifyAbsenceOfIf(codeInspector, testClass, signatures);
@@ -67,6 +78,9 @@
new String[]{FieldAccessTest.class.getCanonicalName()});
MethodSignature foo2 = new MethodSignature("foo2", "int",
new String[]{FieldAccessTest.class.getCanonicalName()});
- testR8(NonNullAfterFieldAccess.class, ImmutableList.of(foo, bar, foo2));
+ testR8(
+ NonNullAfterFieldAccess.class,
+ ImmutableList.of(foo, bar, foo2),
+ testBuilder -> testBuilder.addProgramClasses(FieldAccessTest.class));
}
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/SubsumedCatchHandlerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/SubsumedCatchHandlerTest.java
index 87de375..19d7226 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/SubsumedCatchHandlerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/SubsumedCatchHandlerTest.java
@@ -86,6 +86,7 @@
testForR8(backend)
.addInnerClasses(SubsumedCatchHandlerTest.class)
.addKeepMainRule(TestClass.class)
+ .enableForceInliningAnnotations()
.enableInliningAnnotations()
.run(TestClass.class)
.assertSuccessWithOutput(expected)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EffectivelyFinalFieldCanonicalizationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EffectivelyFinalFieldCanonicalizationTest.java
index 4e73445..59eff5b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EffectivelyFinalFieldCanonicalizationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/canonicalization/EffectivelyFinalFieldCanonicalizationTest.java
@@ -40,6 +40,8 @@
testForR8(parameters.getBackend())
.addInnerClasses(EffectivelyFinalFieldCanonicalizationTest.class)
.addKeepMainRule(TestClass.class)
+ .enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinitializerdefaults/NonFinalFieldWithDefaultValueTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinitializerdefaults/NonFinalFieldWithDefaultValueTest.java
index c9033f5..2922b90 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinitializerdefaults/NonFinalFieldWithDefaultValueTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinitializerdefaults/NonFinalFieldWithDefaultValueTest.java
@@ -58,6 +58,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(NonFinalFieldWithDefaultValueTest.class)
.addKeepMainRule(TestClass.class)
+ .enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ExtraMethodNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ExtraMethodNullTest.java
index 3ece2da..9890166 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ExtraMethodNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ExtraMethodNullTest.java
@@ -4,21 +4,36 @@
package com.android.tools.r8.ir.optimize.classinliner;
-import static org.hamcrest.CoreMatchers.containsString;
-import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+@RunWith(Parameterized.class)
public class ExtraMethodNullTest extends TestBase {
+ private final TestParameters parameters;
+
+ @Parameterized.Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
+ }
+
+ public ExtraMethodNullTest(TestParameters parameters) {
+ this.parameters = parameters;
+ }
+
@Test
public void test() throws Exception {
- testForR8(Backend.DEX)
+ testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(One.class)
.addKeepMainRule(One.class)
- .run(One.class)
- .assertFailureWithErrorThatMatches(containsString("java.lang.NullPointerException"));
+ .setMinApi(parameters.getApiLevel())
+ .run(parameters.getRuntime(), One.class)
+ .assertFailureWithErrorThatThrows(NullPointerException.class);
}
public static class One {
@@ -30,7 +45,6 @@
}
static class Other {
- @NeverInline
Object print(Object one) {
return one;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InterfaceRenewalInLoopDebugTestRunner.java b/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InterfaceRenewalInLoopDebugTestRunner.java
index b21e168..be426b1 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InterfaceRenewalInLoopDebugTestRunner.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InterfaceRenewalInLoopDebugTestRunner.java
@@ -26,13 +26,15 @@
@Test
public void test() throws Throwable {
- R8TestCompileResult result = testForR8(Backend.CF)
- .setMode(CompilationMode.DEBUG)
- .addProgramClasses(TestInterface.class, IMPL, MAIN)
- .addKeepMainRule(MAIN)
- .addKeepRules(ImmutableList.of("-keepattributes SourceFile,LineNumberTable"))
- .noMinification()
- .compile();
+ R8TestCompileResult result =
+ testForR8(Backend.CF)
+ .setMode(CompilationMode.DEBUG)
+ .addProgramClasses(TestInterface.class, IMPL, MAIN)
+ .addKeepMainRule(MAIN)
+ .addKeepRules(ImmutableList.of("-keepattributes SourceFile,LineNumberTable"))
+ .enableNoVerticalClassMergingAnnotations()
+ .noMinification()
+ .compile();
CodeInspector inspector = result.inspector();
ClassSubject mainSubject = inspector.clazz(MAIN);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/fields/NonFinalFinalFieldTest.java b/src/test/java/com/android/tools/r8/ir/optimize/fields/NonFinalFinalFieldTest.java
index 292f74e..d8cdbc5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/fields/NonFinalFinalFieldTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/fields/NonFinalFinalFieldTest.java
@@ -49,6 +49,7 @@
.addProgramClasses(TestClass.class)
.addProgramClassFileData(getProgramClassFileData())
.addKeepMainRule(TestClass.class)
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineMappingOnSameLineTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineMappingOnSameLineTest.java
index a8abf65..c4a0b9d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineMappingOnSameLineTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineMappingOnSameLineTest.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.naming.retrace.RetraceTestBase;
import com.android.tools.r8.naming.retrace.StackTrace;
@@ -46,6 +47,11 @@
}
@Override
+ public void configure(R8TestBuilder<?> builder) {
+ builder.enableInliningAnnotations();
+ }
+
+ @Override
public Class<?> getMainClass() {
return Main.class;
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
index a3b0c4a..46727f2 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InliningIntoVisibilityBridgeTest.java
@@ -10,6 +10,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.ir.optimize.inliner.testclasses.InliningIntoVisibilityBridgeTestClasses;
@@ -47,10 +48,10 @@
.addInnerClasses(InliningIntoVisibilityBridgeTest.class)
.addInnerClasses(InliningIntoVisibilityBridgeTestClasses.class)
.addKeepMainRule(TestClass.class)
- .addKeepRules(
- neverInline
- ? ("-neverinline class " + getClassA().getTypeName() + " { method(); }")
- : "")
+ .addForceInliningAnnotations()
+ .addInliningAnnotations()
+ .applyIf(neverInline, R8TestBuilder::enableInliningAnnotations)
+ .applyIf(!neverInline, R8TestBuilder::enableForceInliningAnnotations)
.enableNoVerticalClassMergingAnnotations()
.enableProguardTestOptions()
.compile()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/MultipleIndirectCallSitesTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/MultipleIndirectCallSitesTest.java
index a0ed3e6..09bb71b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/MultipleIndirectCallSitesTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/MultipleIndirectCallSitesTest.java
@@ -29,7 +29,8 @@
@Parameterized.Parameters(name = "{1}, invoke A.m(): {0}")
public static List<Object[]> data() {
- return buildParameters(BooleanUtils.values(), getTestParameters().withAllRuntimes().build());
+ return buildParameters(
+ BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
}
public MultipleIndirectCallSitesTest(boolean invokeMethodOnA, TestParameters parameters) {
@@ -47,6 +48,7 @@
// kept, there is a single call site that invokes A.m(). However, this does not mean that
// A.m() has a single call site, so it should not allow inlining of A.m().
.addKeepRules(getKeepRules())
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getRuntime())
.compile()
.inspect(this::verifyInlining)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/Regress131349148.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/Regress131349148.java
index 09b0ae3..235aa07 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/Regress131349148.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/Regress131349148.java
@@ -26,7 +26,10 @@
@Parameters(name = "{0}")
public static TestParametersCollection params() {
- return getTestParameters().withDexRuntimes().withAllApiLevels().build();
+ return getTestParameters()
+ .withDexRuntimes()
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
+ .build();
}
public Regress131349148(TestParameters parameters) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
index c8c60ae..54018ee 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/testclasses/InliningIntoVisibilityBridgeTestClasses.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.ir.optimize.inliner.testclasses;
import com.android.tools.r8.ForceInline;
+import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoVerticalClassMerging;
public class InliningIntoVisibilityBridgeTestClasses {
@@ -17,6 +18,7 @@
static class InliningIntoVisibilityBridgeTestClassA {
@ForceInline
+ @NeverInline
public static void method() {
System.out.println("Hello world");
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B143686595.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B143686595.java
index 036bde7..4f95f4d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B143686595.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/B143686595.java
@@ -39,6 +39,7 @@
.addProgramClasses(TestClass.class)
.addClasspathClasses(I.class)
.addKeepMainRule(TestClass.class)
+ .enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.addRunClasspathFiles(libraryResult.writeToZip())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java
index d2b739e..6c7cf37 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/membervaluepropagation/InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.java
@@ -40,6 +40,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(InstanceFieldValuePropagationWithMultipleInstanceInitializersTest.class)
.addKeepMainRule(TestClass.class)
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
index ec4c859..c0267f2 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/OutlineFromStaticInterfaceMethodTest.java
@@ -50,6 +50,7 @@
options.outline.minSize = 2;
})
.enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
index 3e28157..d1d5f1f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.ForceInline;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
+import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ListUtils;
@@ -218,6 +219,8 @@
testForR8(parameters.getBackend())
.setMode(mode)
.addInnerClasses(GetClassTest.class)
+ .addForceInliningAnnotations()
+ .applyIf(mode == CompilationMode.RELEASE, R8TestBuilder::enableForceInliningAnnotations)
.enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.addKeepMainRule(MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
index a9a5c6f..81612ee 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetSimpleNameTest.java
@@ -214,6 +214,7 @@
R8TestRunResult result =
testForR8(parameters.getBackend())
.addProgramFiles(classPaths)
+ .enableForceInliningAnnotations()
.enableInliningAnnotations()
.addKeepMainRule(MAIN)
.addKeepRules("-keep class **.ClassGetSimpleName*")
@@ -243,6 +244,7 @@
.addKeepRules("-keep,allowobfuscation class **.Outer*")
.addKeepAttributes("InnerClasses", "EnclosingMethod")
.addKeepRules("-printmapping " + createNewMappingPath().toAbsolutePath().toString())
+ .enableForceInliningAnnotations()
.minification(enableMinification)
.setMinApi(parameters.getApiLevel())
.addOptionsModification(this::configure)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
index 9ee6ad7..6e91c38 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
@@ -116,6 +116,7 @@
.addKeepMainRule(main)
.addKeepAttributes("InnerClasses", "EnclosingMethod")
.addOptionsModification(this::configure)
+ .enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), main)
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
index 59c3d5c..7924a77 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
@@ -96,6 +96,7 @@
R8TestRunResult result =
testForR8(parameters.getBackend())
.addProgramClasses(MAIN)
+ .enableForceInliningAnnotations()
.enableInliningAnnotations()
.addKeepMainRule(MAIN)
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
index 7d68bda..2e1709c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
@@ -111,6 +111,7 @@
SingleTestRunResult<?> result =
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(MAIN)
+ .enableForceInliningAnnotations()
.enableInliningAnnotations()
.enableMemberValuePropagationAnnotations()
.addKeepMainRule(MAIN)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidInitTest.java b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidInitTest.java
index c8d8086..cb50223 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidInitTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidInitTest.java
@@ -35,6 +35,7 @@
testForR8(parameters.getBackend())
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
.addInnerClasses(SwitchMapInvalidInitTest.class)
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidOrdinalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidOrdinalTest.java
index a779afb..8c84a76 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidOrdinalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/switches/SwitchMapInvalidOrdinalTest.java
@@ -45,6 +45,7 @@
+ "com.android.tools.r8.ir.optimize.switches.SwitchMapInvalidOrdinalTest$MyEnum {"
+ " static <fields>; }")
.addInnerClasses(SwitchMapInvalidOrdinalTest.class)
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizationsTemplates.java b/src/test/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizationsTemplates.java
index 9dd23f8..c1b1f8b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizationsTemplates.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizationsTemplates.java
@@ -18,6 +18,10 @@
}
}
+ public static IncompatibleClassChangeError throwIncompatibleClassChangeError() {
+ throw new IncompatibleClassChangeError();
+ }
+
public static NoSuchMethodError throwNoSuchMethodError() {
throw new NoSuchMethodError();
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
index 035ab54..c6dfe83 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
@@ -54,6 +54,7 @@
public void test() throws Exception {
testForR8(parameters.getBackend())
.addInnerClasses(UninstantiatedAnnotatedArgumentsTest.class)
+ .addConstantArgumentAnnotations()
.addKeepMainRule(TestClass.class)
.addKeepClassRules(Instantiated.class, Uninstantiated.class)
.addKeepAttributes("RuntimeVisibleParameterAnnotations")
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
index 09c0de7..bd1b805 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
@@ -52,6 +52,7 @@
public void test() throws Exception {
testForR8(parameters.getBackend())
.addInnerClasses(UnusedAnnotatedArgumentsTest.class)
+ .addUnusedArgumentAnnotations()
.addKeepMainRule(TestClass.class)
.addKeepClassRules(Used.class, Unused.class)
.addKeepAttributes("RuntimeVisibleParameterAnnotations")
diff --git a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
index 0abfe16..f272406 100644
--- a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
@@ -270,6 +270,7 @@
.enableProguardTestOptions()
.noMinification()
.apply(configuration)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.assertAllWarningMessagesMatch(
containsString("Resource 'META-INF/MANIFEST.MF' already exists."))
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
index c683b1a..5d41673 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinIntrinsicsInlineTest.java
@@ -58,6 +58,7 @@
StringUtils.lines(
"-keepclasseswithmembers class " + MAIN + "{", " public static *** *(...);", "}"))
.allowAccessModification(allowAccessModification)
+ .addDontWarnJetBrainsAnnotations()
.noMinification()
.setMinApi(parameters.getRuntime())
.compile()
@@ -102,6 +103,7 @@
"-keepclasseswithmembers class " + MAIN + "{",
" public static *** " + methodName + "(...);",
"}"))
+ .addDontWarnJetBrainsAnnotations()
.allowAccessModification(allowAccessModification)
.noMinification()
.setMinApi(parameters.getRuntime())
diff --git a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
index e90a8b6..cd17827 100644
--- a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinReflectionLibTest.java
@@ -52,6 +52,7 @@
.addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrains()
.apply(consumer)
.compile();
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
index 7b3fd69..b335d4c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/ProcessKotlinStdlibTest.java
@@ -37,13 +37,12 @@
this.parameters = parameters;
}
- private void test(Collection<String> rules, boolean expectInvalidFoo) throws Exception {
- test(rules, expectInvalidFoo, null);
+ private void test(Collection<String> rules) throws Exception {
+ test(rules, null);
}
private void test(
Collection<String> rules,
- boolean expectInvalidDebugInfo,
ThrowableConsumer<R8FullTestBuilder> consumer)
throws Exception {
testForR8(parameters.getBackend())
@@ -52,25 +51,25 @@
.addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.apply(consumer)
.compile();
}
@Test
public void testAsIs() throws Exception {
- test(ImmutableList.of("-dontshrink", "-dontoptimize", "-dontobfuscate"), true);
+ test(ImmutableList.of("-dontshrink", "-dontoptimize", "-dontobfuscate"));
}
@Test
public void testDontShrinkAndDontOptimize() throws Exception {
- test(ImmutableList.of("-dontshrink", "-dontoptimize"), true);
+ test(ImmutableList.of("-dontshrink", "-dontoptimize"));
}
@Test
public void testDontShrinkAndDontOptimizeDifferently() throws Exception {
test(
ImmutableList.of("-keep,allowobfuscation class **.*Exception*"),
- true,
tb -> {
tb.noTreeShaking();
tb.addOptionsModification(
@@ -85,29 +84,28 @@
@Test
public void testDontShrinkAndDontObfuscate() throws Exception {
- test(ImmutableList.of("-dontshrink", "-dontobfuscate"), true);
+ test(ImmutableList.of("-dontshrink", "-dontobfuscate"));
}
@Test
public void testDontShrink() throws Exception {
- test(ImmutableList.of("-dontshrink"), true);
+ test(ImmutableList.of("-dontshrink"));
}
@Test
public void testDontShrinkDifferently() throws Exception {
test(
ImmutableList.of("-keep,allowobfuscation class **.*Exception*"),
- true,
tb -> tb.noTreeShaking());
}
@Test
public void testDontOptimize() throws Exception {
- test(ImmutableList.of("-dontoptimize"), false);
+ test(ImmutableList.of("-dontoptimize"));
}
@Test
public void testDontObfuscate() throws Exception {
- test(ImmutableList.of("-dontobfuscate"), false);
+ test(ImmutableList.of("-dontobfuscate"));
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java b/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
index 9ae5aed..f15fce0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
+++ b/src/test/java/com/android/tools/r8/kotlin/coroutines/KotlinxCoroutinesTestRunner.java
@@ -80,10 +80,15 @@
.addKeepAllAttributes()
// The BASE_LIBRARY contains proguard rules that do not match.
.allowUnusedProguardConfigurationRules()
- .addKeepRules(
- "-dontwarn reactor.blockhound.integration.BlockHoundIntegration",
- "-dontwarn org.junit.runners.model.Statement",
- "-dontwarn org.junit.rules.TestRule")
+ .addDontWarnKotlinx()
+ .addDontWarn(
+ "edu.umd.cs.findbugs.annotations.SuppressFBWarnings",
+ "reactor.blockhound.BlockHound$Builder",
+ "reactor.blockhound.integration.BlockHoundIntegration",
+ "org.junit.rules.TestRule",
+ "org.junit.runner.Description",
+ "org.junit.runners.model.Statement",
+ "org.junit.runners.model.TestTimedOutException")
.compile()
.inspect(inspector -> assertEqualMetadata(new CodeInspector(BASE_LIBRARY), inspector))
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
index b9baae8..5f52b83 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KStyleKotlinLambdaMergingWithEnumUnboxingTest.java
@@ -55,6 +55,7 @@
.addHorizontallyMergedLambdaClassesInspector(
inspector -> inspector.assertMerged(Lambda1.class, Lambda2.class))
.addEnumUnboxingInspector(inspector -> inspector.assertUnboxed(EnumUnboxingCandidate.class))
+ .addDontWarnJetBrainsAnnotations()
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
index 1b6d4c0..22d66d3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
@@ -57,6 +57,7 @@
.addLibraryFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addProgramFiles(ktClasses)
.addKeepMainRule("**.B143165163Kt")
+ .addDontWarnJetBrainsAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.addRunClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
@@ -80,6 +81,7 @@
.addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addProgramFiles(ktClasses)
.addKeepMainRule("**.B143165163Kt")
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
index e7c4762..42e5bd8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingDebugTest.java
@@ -45,6 +45,7 @@
.setMode(CompilationMode.DEBUG)
.addProgramFiles(compiledJars.getForConfiguration(kotlinc, KotlinTargetVersion.JAVA_6))
.addProgramFiles(getJavaJarFile(FOLDER))
+ .addDontWarnJetBrainsAnnotations()
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(MAIN_CLASS)
.allowDiagnosticWarningMessages()
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
index 0dd8a62..ca609ec 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b148525512/B148525512.java
@@ -139,6 +139,7 @@
.setProgramConsumer(new ArchiveConsumer(featureCode, false))
.build())
.allowDiagnosticWarningMessages()
+ .addDontWarnJetBrainsAnnotations()
.compile()
.assertAllWarningMessagesMatch(
equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
index 57cdae7..2538c24 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaGroupGCLimitTest.java
@@ -94,6 +94,7 @@
inspector.assertNoClassesMerged();
}
})
+ .addDontWarnJetBrainsAnnotations()
.compile();
Path path = compileResult.writeToZip();
compileResult
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
index c261c25..251880f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b159688129/LambdaSplitByCodeCorrectnessTest.java
@@ -71,6 +71,7 @@
options -> options.horizontalClassMergerOptions().disableKotlinLambdaMerging())
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(PKG_NAME + ".SimpleKt")
+ .addDontWarnJetBrainsAnnotations()
.applyIf(
splitGroup,
b ->
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
index 31b489a..b4fd614 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataPrimitiveTypeRewriteTest.java
@@ -86,6 +86,7 @@
.addKeepAllClassesRuleWithAllowObfuscation()
.addKeepRules("-keep class " + PKG_LIB + ".LibKt { *; }")
.addKeepRules("-keep class kotlin.Metadata { *; }")
+ .addDontWarnJetBrainsAnnotations()
.applyIf(keepUnit, b -> b.addKeepRules("-keep class kotlin.Unit { *; }"))
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.allowDiagnosticWarningMessages()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
index ea9ed33..405cbcb 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAllowAccessModificationTest.java
@@ -104,7 +104,6 @@
.addKeepRules("-keepclassmembers,allowaccessmodification class **.Lib$Comp { *; }")
.addKeepRules("-keep,allowaccessmodification,allowobfuscation class **.Lib$Comp { *; }")
.addKeepRules("-keep,allowaccessmodification,allowobfuscation class **.LibKt { *; }")
- .addKeepRules("-allowaccessmodification")
.addApplyMapping(
StringUtils.lines(
PKG_LIB + ".Lib -> " + PKG_LIB + ".LibReference:",
@@ -115,6 +114,9 @@
" void staticPrivate() -> staticPrivateReference",
" void staticInternal() -> staticInternalReference"))
.addKeepRuntimeVisibleAnnotations()
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlin()
+ .allowAccessModification()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
index 428103f..f08e2d3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnnotationTest.java
@@ -121,6 +121,8 @@
ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS,
ProguardKeepAttributes.RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS,
ProguardKeepAttributes.RUNTIME_VISIBLE_TYPE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlin()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
index 0ff40ff..45cf55a 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteAnonymousTest.java
@@ -76,6 +76,7 @@
ProguardKeepAttributes.SIGNATURE,
ProguardKeepAttributes.INNER_CLASSES,
ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
index 2c2ae83..4e7d224 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteBoxedTypesTest.java
@@ -101,6 +101,7 @@
ProguardKeepAttributes.SIGNATURE,
ProguardKeepAttributes.INNER_CLASSES,
ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
@@ -157,6 +158,7 @@
ProguardKeepAttributes.SIGNATURE,
ProguardKeepAttributes.INNER_CLASSES,
ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.writeToZip();
Path main =
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
index 56fd483..94aacab 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineAnonFunctionTest.java
@@ -68,6 +68,8 @@
.addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAllAttributes()
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlin()
.compile()
.writeToZip();
Path output =
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
index b8c5ac2..f538a45 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteCrossinlineConcreteFunctionTest.java
@@ -68,6 +68,8 @@
.addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAllAttributes()
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlin()
.compile()
.writeToZip();
Path output =
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
index d71248e..b43f846 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDelegatedPropertyTest.java
@@ -71,6 +71,8 @@
.addProgramFiles(jars.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlin()
.compile()
.inspect(
inspector ->
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
index 15112f6..2ccbb3a 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDependentKeep.java
@@ -51,6 +51,7 @@
.addKeepKotlinMetadata()
.addKeepRules(StringUtils.joinLines("-if class *.Metadata", "-keep class <1>.io.** { *; }"))
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect);
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
index fb4dab9..feca0f8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteDoNotEmitValuesIfEmpty.java
@@ -53,6 +53,7 @@
.addKeepAllClassesRule()
.addKeepKotlinMetadata()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectEmptyValuesAreNotPresent);
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
index ecaea79..90badba 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteFlexibleUpperBoundTest.java
@@ -88,6 +88,7 @@
ProguardKeepAttributes.SIGNATURE,
ProguardKeepAttributes.INNER_CLASSES,
ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
index 09d3af7..056719b 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInClasspathTypeTest.java
@@ -94,6 +94,7 @@
// to be called with Kotlin syntax from other kotlin code.
.addKeepRules("-keep class **.ImplKt { <methods>; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectRenamed)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
index d025713..2059f24 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInCompanionTest.java
@@ -93,6 +93,7 @@
// To keep ...$Companion structure
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(codeInspector -> inspect(codeInspector, true))
.writeToZip();
@@ -135,6 +136,7 @@
// To keep ...$Companion structure
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(codeInspector -> inspect(codeInspector, false))
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
index ac363d4..8a5a520 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionFunctionTest.java
@@ -92,6 +92,7 @@
.addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectMerged)
.writeToZip();
@@ -146,6 +147,7 @@
.addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectRenamed)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
index 327ec34..084acb0 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInExtensionPropertyTest.java
@@ -88,6 +88,7 @@
// to be called with Kotlin syntax from other kotlin code.
.addKeepRules("-keep class **.BKt { <methods>; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectMerged)
.writeToZip();
@@ -151,6 +152,7 @@
// to be called with Kotlin syntax from other kotlin code.
.addKeepRules("-keep class **.BKt { <methods>; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectRenamed)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
index 91ed797..cd55724 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
@@ -86,6 +86,7 @@
// Keep the BKt method, which will be called from other kotlin code.
.addKeepRules("-keep class **.BKt { <methods>; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectMerged)
.writeToZip();
@@ -147,6 +148,7 @@
// Keep the BKt method, which will be called from other kotlin code.
.addKeepRules("-keep class **.BKt { <methods>; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectRenamed)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
index c9210a1..b63d162 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithDefaultValueTest.java
@@ -87,6 +87,7 @@
.addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
index a65c4b9..cae6b9e 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionWithVarargTest.java
@@ -89,6 +89,7 @@
.addKeepAttributes(ProguardKeepAttributes.SIGNATURE)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
index e635091..e10d738 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInLibraryTypeTest.java
@@ -87,7 +87,6 @@
Path out =
testForR8(parameters.getBackend())
// Intentionally not providing baseLibJar as lib file nor classpath file.
- .addClasspathFiles()
.addProgramFiles(
extLibJarMap.getForConfiguration(kotlinc, targetVersion),
appJarMap.getForConfiguration(kotlinc, targetVersion))
@@ -97,6 +96,9 @@
// Keep the main entry.
.addKeepMainRule(main)
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarn(PKG + ".**")
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlin()
.allowDiagnosticWarningMessages()
// -dontoptimize so that basic code structure is kept.
.noOptimization()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
index 8adeb48..e9c1a44 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
@@ -91,6 +91,7 @@
.addKeepRules("-keep class **.UtilKt")
.addKeepRules("-keepclassmembers class * { ** comma*Join*(...); }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectMerged)
.writeToZip();
@@ -135,6 +136,7 @@
// Keep yet rename joinOf*(String).
.addKeepRules("-keepclassmembers,allowobfuscation class * { ** joinOf*(...); }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectRenamed)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
index 8bb4603..78e5307 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInNestedClassTest.java
@@ -84,6 +84,7 @@
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.addKeepAttributes(ProguardKeepAttributes.INNER_CLASSES)
.addKeepAttributes(ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
index a2a85c3..e2c1191 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInParameterTypeTest.java
@@ -78,6 +78,7 @@
// Keep Itf, but allow minification.
.addKeepRules("-keep,allowobfuscation class **.Itf")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
index d012f10..15ee754 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTest.java
@@ -84,6 +84,7 @@
.addKeepRules("-keep class **.Person { <init>(...); }")
.addKeepRules("-keepclassmembers class **.Person { *** get*(); }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectGetterOnly)
.writeToZip();
@@ -179,6 +180,7 @@
// Keep LibKt extension methods
.addKeepRules("-keep class **.LibKt { <methods>; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectSetterOnly)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
index 9641f64..3d16307 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInPropertyTypeTest.java
@@ -76,6 +76,7 @@
// Keep non-private members of Impl
.addKeepRules("-keep public class **.Impl { !private *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
index a4a3a68..d6d8fc9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInRenamedTypeTest.java
@@ -68,6 +68,7 @@
.addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
.addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect);
}
@@ -81,6 +82,7 @@
.addProgramFiles(inputJarMap.getForConfiguration(kotlinc, targetVersion))
.addKeepRules(OBFUSCATE_RENAMED, KEEP_KEPT)
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect);
}
@@ -97,6 +99,7 @@
.addKeepKotlinMetadata()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.allowDiagnosticWarningMessages()
+ .addDontWarnJetBrainsAnnotations()
.compile()
.assertWarningMessageThatMatches(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
// TODO(b/155536535): Enable this assert.
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
index 9783f3b..6f2a2b1 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInReturnTypeTest.java
@@ -78,6 +78,7 @@
// Keep Itf, but allow minification.
.addKeepRules("-keep,allowobfuscation class **.Itf")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
index f33fc30..db927a8 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassNestedTest.java
@@ -77,6 +77,7 @@
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.addKeepAttributes(
ProguardKeepAttributes.INNER_CLASSES, ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.writeToZip();
Path output =
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
index 2dbbc48..008851a 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSealedClassTest.java
@@ -87,6 +87,7 @@
// Keep the factory object and utils
.addKeepRules("-keep class **.ExprFactory { *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectValid)
.writeToZip();
@@ -152,6 +153,7 @@
// Keep the extension function
.addKeepRules("-keep class **.LibKt { <methods>; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectInvalid)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
index 9b0da43..b4cf3e6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInSuperTypeTest.java
@@ -79,6 +79,7 @@
// Keep non-private members except for ones in `internal` definitions.
.addKeepRules("-keep public class !**.internal.**, * { !private *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectMerged)
.writeToZip();
@@ -126,6 +127,7 @@
// Keep `internal` definitions, but allow minification.
.addKeepRules("-keep,allowobfuscation class **.internal.** { *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspectRenamed)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
index edade6e..7725e83 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
@@ -129,6 +129,7 @@
ProguardKeepAttributes.SIGNATURE,
ProguardKeepAttributes.INNER_CLASSES,
ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
index 788abf2..45f153f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeArgumentsTest.java
@@ -133,6 +133,7 @@
ProguardKeepAttributes.SIGNATURE,
ProguardKeepAttributes.INNER_CLASSES,
ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
index 133dd37..641edce 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInlinePropertyTest.java
@@ -81,6 +81,7 @@
ProguardKeepAttributes.SIGNATURE,
ProguardKeepAttributes.INNER_CLASSES,
ProguardKeepAttributes.ENCLOSING_METHOD)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
index 83b8e62..e4e2705 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteJvmStaticTest.java
@@ -89,6 +89,8 @@
.addProgramFiles(kotlincLibJar.getForConfiguration(kotlinc, targetVersion))
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlin()
.compile()
.inspect(this::inspect)
.writeToZip();
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
index 40c7573..51f5fc9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepPathTest.java
@@ -60,6 +60,7 @@
.applyIf(keepMetadata, TestShrinkerBuilder::addKeepKotlinMetadata)
.addKeepRuntimeVisibleAnnotations()
.allowDiagnosticWarningMessages()
+ .addDontWarnJetBrainsAnnotations()
.compile()
.assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
.inspect(inspector -> inspect(inspector, keepMetadata));
@@ -72,6 +73,7 @@
.addClasspathFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
.addKeepRules("-keep class " + LIB_CLASS_NAME)
.addKeepRuntimeVisibleAnnotations()
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(inspector -> inspect(inspector, true));
}
@@ -84,6 +86,7 @@
.addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.addKeepRules("-keep class " + LIB_CLASS_NAME)
.addKeepRuntimeVisibleAnnotations()
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(inspector -> inspect(inspector, true));
}
@@ -94,6 +97,8 @@
.addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepRules("-keep class " + LIB_CLASS_NAME)
.addKeepRuntimeVisibleAnnotations()
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlin()
.compile()
.inspect(inspector -> inspect(inspector, true));
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
index 8c681bd..74159a6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteKeepTest.java
@@ -47,6 +47,7 @@
.addKeepKotlinMetadata()
.addKeepRules("-keep class kotlin.io.** { *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect);
}
@@ -59,6 +60,7 @@
.addKeepRules("-keep class kotlin.io.** { *; }")
.addKeepRules("-if class *", "-keep class kotlin.Metadata { *; }")
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(this::inspect);
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
index 3e62729..0b65ec3 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePassThroughTest.java
@@ -44,6 +44,7 @@
.addKeepAllClassesRule()
.addKeepKotlinMetadata()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(
inspector ->
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
index 39793cf..427c87d 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewritePrunedObjectsTest.java
@@ -75,6 +75,8 @@
.addProgramFiles(libJars.getForConfiguration(kotlinc, targetVersion))
.addKeepRules("-keep class " + PKG_LIB + ".Sub { <init>(); *** kept(); }")
.addKeepRuntimeVisibleAnnotations()
+ .addDontWarnJetBrainsAnnotations()
+ .addDontWarnKotlinMetadata()
.noMinification()
.compile()
.inspect(this::checkPruned)
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
index 168cbc5..1a2cd73 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
@@ -61,6 +61,7 @@
.addKeepMainRule(mainClassName)
.addKeepKotlinMetadata()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.setMinApi(parameters.getApiLevel())
.compile()
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
index 9cd2614..e23ac8f 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataVersionNumberBumpTest.java
@@ -56,6 +56,7 @@
.setMinApi(parameters.getApiLevel())
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(inspector -> inspectMetadataVersion(inspector, "1.4.0"));
}
@@ -68,6 +69,7 @@
.setMinApi(parameters.getApiLevel())
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(inspector -> inspectMetadataVersion(inspector, "1.4.0"));
}
@@ -80,6 +82,7 @@
.setMinApi(parameters.getApiLevel())
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.compile()
.inspect(inspector -> inspectMetadataVersion(inspector, "1.4.2"));
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java b/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
index d7eeae4..8b2b027 100644
--- a/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/optimize/switches/KotlinEnumSwitchTest.java
@@ -46,6 +46,7 @@
options.enableEnumValueOptimization = enableSwitchMapRemoval;
options.enableEnumSwitchMapRemoval = enableSwitchMapRemoval;
})
+ .addDontWarnJetBrainsAnnotations()
.setMinApi(parameters.getRuntime())
.noMinification()
.compile()
diff --git a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
index 53b9d9b..ac7eb23 100644
--- a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
@@ -96,6 +96,7 @@
.addKeepAllClassesRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.allowDiagnosticWarningMessages()
+ .addDontWarnJetBrains()
.compile()
.writeToZip(foo.toPath())
.assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
diff --git a/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java b/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
index 6b70ca2..b115bb7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/sealed/SealedClassTest.java
@@ -76,6 +76,7 @@
.allowAccessModification()
.allowDiagnosticWarningMessages(parameters.isCfRuntime())
.addKeepMainRule(MAIN)
+ .addDontWarnJetBrainsAnnotations()
.compileWithExpectedDiagnostics(
diagnostics ->
diagnostics.assertAllWarningsMatch(
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
index cf2aeeb..172005c 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexTracingTest.java
@@ -210,7 +210,11 @@
Paths.get(EXAMPLE_SRC_DIR, "multidex", "main-dex-rules.txt"),
Paths.get(EXAMPLE_O_SRC_DIR, "multidex004", "ref-list-1.txt"),
Paths.get(EXAMPLE_O_SRC_DIR, "multidex004", "ref-list-1.txt"),
- AndroidApiLevel.I);
+ AndroidApiLevel.I,
+ builder ->
+ builder
+ .addDontWarnCompilerSynthesizedAnnotations()
+ .addOptionsModification(options -> options.enableInlining = false));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/maindexlist/warnings/MainDexWarningsTest.java b/src/test/java/com/android/tools/r8/maindexlist/warnings/MainDexWarningsTest.java
index 4f5e54a..22bad85 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/warnings/MainDexWarningsTest.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/warnings/MainDexWarningsTest.java
@@ -57,6 +57,7 @@
.addKeepMainRule(mainClass)
// Include main dex rule for class Static.
.addMainDexClassRules(Main.class, Static.class)
+ .enableForceInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::classStaticGone)
@@ -69,9 +70,11 @@
.setMinApi(AndroidApiLevel.K)
.addProgramClasses(testClassesWithoutStatic)
.addKeepMainRule(mainClass)
+ .addDontWarn(Static.class)
// Include explicit main dex entry for class Static.
.addMainDexListClasses(Static.class)
.allowDiagnosticWarningMessages()
+ .enableForceInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::classStaticGone)
@@ -91,7 +94,9 @@
.addMainDexListClasses(Main.class, Static.class)
// Include main dex rule for class Static2.
.addMainDexClassRules(Static2.class)
+ .addDontWarn(Static.class)
.allowDiagnosticWarningMessages()
+ .enableForceInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::classStaticGone)
diff --git a/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java b/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
index 837459c..8dd68fc 100644
--- a/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/naming/EnumMinificationKotlinTest.java
@@ -64,6 +64,7 @@
.addProgramFiles(getJavaJarFile(FOLDER))
.addKeepMainRule(MAIN_CLASS_NAME)
.addKeepClassRulesWithAllowObfuscation(ENUM_CLASS_NAME)
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.minification(minify)
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java b/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
index 0ab866f..165d0f7 100644
--- a/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
+++ b/src/test/java/com/android/tools/r8/naming/FieldNamingObfuscationDictionaryTest.java
@@ -99,6 +99,7 @@
.addInnerClasses(FieldNamingObfuscationDictionaryTest.class)
.addKeepRules("-overloadaggressively", "-obfuscationdictionary " + dictionary.toString())
.addKeepMainRule(Runner.class)
+ .enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java b/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
index ebd7420..7ec2589 100644
--- a/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/InterfaceConstructorRenamingTest.java
@@ -6,7 +6,6 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import com.android.tools.r8.ArchiveClassFileProvider;
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -16,10 +15,8 @@
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
-import com.google.common.collect.ImmutableSet;
import java.io.IOException;
import java.util.Collections;
-import java.util.concurrent.ExecutionException;
import java.util.function.Function;
import org.junit.ClassRule;
import org.junit.Test;
@@ -44,17 +41,11 @@
@ClassRule public static TemporaryFolder staticTemp = ToolHelper.getTemporaryFolderForTest();
private static R8TestCompileResult compile(Backend backend)
- throws com.android.tools.r8.CompilationFailedException, IOException, ExecutionException {
+ throws com.android.tools.r8.CompilationFailedException, IOException {
R8TestCompileResult compileResult =
testForR8(staticTemp, backend)
.addProgramClasses(TestInterface.class, TestClass.class)
.addKeepMainRule(TestClass.class)
- .addLibraryProvider(
- new ArchiveClassFileProvider(
- ToolHelper.getJava8RuntimeJar(),
- name ->
- ImmutableSet.of("java/lang/Object", "java/lang/System")
- .contains(name.replace(".class", ""))))
.setMinApi(AndroidApiLevel.B)
.compile()
.assertNoMessages();
diff --git a/src/test/java/com/android/tools/r8/naming/IntersectionLambdaTest.java b/src/test/java/com/android/tools/r8/naming/IntersectionLambdaTest.java
index efb5d35..5b8dc11 100644
--- a/src/test/java/com/android/tools/r8/naming/IntersectionLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/naming/IntersectionLambdaTest.java
@@ -51,7 +51,6 @@
.assertSuccessWithOutputLines(EXPECTED);
}
- @FunctionalInterface
@NoVerticalClassMerging
public interface I {
void foo();
diff --git a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
index 70a9cb2..d257b32 100644
--- a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
@@ -88,6 +88,7 @@
.addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
.addProgramFiles(getJavaJarFile(FOLDER))
.addKeepMainRule(mainClassName)
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.minification(minification)
.compile()
@@ -149,6 +150,7 @@
"-" + NoHorizontalClassMergingRule.RULE_NAME + " class **." + targetClassName,
"-" + NoStaticClassMergingRule.RULE_NAME + " class **." + targetClassName,
"-neverinline class **." + targetClassName + " { <methods>; }"))
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.minification(minification)
.compile()
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingDesugarLambdaTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingDesugarLambdaTest.java
index 0d0af87..9db718e 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingDesugarLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingDesugarLambdaTest.java
@@ -104,7 +104,6 @@
}
}
- @FunctionalInterface
public interface I {
void doStuff();
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInnerClassesPreserveTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInnerClassesPreserveTest.java
index 6d61f51..2f7c01c 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInnerClassesPreserveTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInnerClassesPreserveTest.java
@@ -26,7 +26,7 @@
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().build();
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
public ApplyMappingInnerClassesPreserveTest(TestParameters parameters) {
@@ -41,7 +41,7 @@
.addProgramClassesAndInnerClasses(InnerLibraryClass.class)
.addKeepAllClassesRuleWithAllowObfuscation()
.addKeepClassAndMembersRulesWithAllowObfuscation(InnerLibraryClass.class)
- .setMinApi(parameters.getRuntime())
+ .setMinApi(parameters.getApiLevel())
.compile();
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(ProgramClassWithSimpleLibraryReference.class)
@@ -49,7 +49,7 @@
.addKeepMainRule(ProgramClassWithSimpleLibraryReference.class)
.addApplyMapping(libraryCompileResult.getProguardMap())
.addKeepAttributes("EnclosingMethod", "InnerClasses")
- .setMinApi(parameters.getRuntime())
+ .setMinApi(parameters.getApiLevel())
.noTreeShaking()
.compile()
.addRunClasspathFiles(libraryCompileResult.writeToZip())
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInterfaceClInitTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInterfaceClInitTest.java
index 6887f59..de95714 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInterfaceClInitTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingInterfaceClInitTest.java
@@ -86,7 +86,6 @@
void foo();
}
- @NeverClassInline
public static class Main implements TestInterface {
public static void main(String[] args) {
@@ -94,7 +93,6 @@
}
@Override
- @NeverInline
public void foo() {
System.out.println("Hello World!");
}
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingMultipleInterfacesTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingMultipleInterfacesTest.java
index b56464e..af6c004 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingMultipleInterfacesTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/ApplyMappingMultipleInterfacesTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.naming.applymapping;
import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -46,7 +45,6 @@
public static class ImplementsI2I3 implements I2, I3 {
@Override
- @NeverInline
public String foo(String bar) {
System.out.print("Hello" + bar);
return bar;
@@ -55,7 +53,6 @@
public static class ImplementsI3 implements I3 {
@Override
- @NeverInline
public String foo(String bar) {
System.out.print("Goodbye");
return bar;
@@ -84,7 +81,7 @@
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().build();
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
public ApplyMappingMultipleInterfacesTest(TestParameters parameters) {
@@ -98,19 +95,24 @@
testForR8(parameters.getBackend())
.addProgramClasses(I2Minified.class, I3Minified.class)
.addKeepAllClassesRule()
- .setMinApi(parameters.getRuntime())
+ .setMinApi(parameters.getApiLevel())
.compile();
testForR8(parameters.getBackend())
.addClasspathClasses(I2.class, I3.class)
.addProgramClasses(MainForImplements.class, ImplementsI2I3.class, ImplementsI3.class)
.addKeepMainRule(MainForImplements.class)
.addApplyMapping(
- I2.class.getTypeName() + " -> " + I2Minified.class.getTypeName() + ":\n" +
- " java.lang.String foo(java.lang.String) -> a\n" +
- I3.class.getTypeName() + " -> " + I3Minified.class.getTypeName() + ":\n" +
- " java.lang.String foo(java.lang.String) -> a"
- )
- .setMinApi(parameters.getRuntime())
+ I2.class.getTypeName()
+ + " -> "
+ + I2Minified.class.getTypeName()
+ + ":\n"
+ + " java.lang.String foo(java.lang.String) -> a\n"
+ + I3.class.getTypeName()
+ + " -> "
+ + I3Minified.class.getTypeName()
+ + ":\n"
+ + " java.lang.String foo(java.lang.String) -> a")
+ .setMinApi(parameters.getApiLevel())
.compile()
.addRunClasspathFiles(libraryResult.writeToZip())
.run(parameters.getRuntime(), MainForImplements.class)
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/shared/InnerLibraryClass.java b/src/test/java/com/android/tools/r8/naming/applymapping/shared/InnerLibraryClass.java
index 1e751d1..8cfa59b 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/shared/InnerLibraryClass.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/shared/InnerLibraryClass.java
@@ -4,12 +4,9 @@
package com.android.tools.r8.naming.applymapping.shared;
-import com.android.tools.r8.NeverInline;
-
public class InnerLibraryClass {
public static class LibraryClass {
- @NeverInline
public void foo() {
System.out.println("LibraryClass.foo()");
}
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/shared/ProgramClassWithSimpleLibraryReference.java b/src/test/java/com/android/tools/r8/naming/applymapping/shared/ProgramClassWithSimpleLibraryReference.java
index 42b7907..a42654f 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/shared/ProgramClassWithSimpleLibraryReference.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/shared/ProgramClassWithSimpleLibraryReference.java
@@ -12,7 +12,6 @@
public static class SubLibraryClass extends LibraryClass {
@Override
- @NeverInline
public void foo() {
System.out.println("SubLibraryClass.foo()");
super.foo();
diff --git a/src/test/java/com/android/tools/r8/naming/b126592786/B126592786.java b/src/test/java/com/android/tools/r8/naming/b126592786/B126592786.java
index de81c15..b2614a3 100644
--- a/src/test/java/com/android/tools/r8/naming/b126592786/B126592786.java
+++ b/src/test/java/com/android/tools/r8/naming/b126592786/B126592786.java
@@ -44,7 +44,7 @@
Class<?> mainClass = genericTypeLive ? MainGenericTypeLive.class : MainGenericTypeNotLive.class;
testForR8(backend)
.minification(minify)
- .addProgramClasses(GetClassUtil.class, A.class, GenericType.class, mainClass)
+ .addProgramClasses(GetClassUtil.class, A.class, GenericType.class, mainClass, Marker.class)
.addKeepMainRule(mainClass)
.addKeepRules(
"-keep class " + GetClassUtil.class.getTypeName() + " {",
diff --git a/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java b/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
index ef791d3..69f0148 100644
--- a/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
+++ b/src/test/java/com/android/tools/r8/naming/b139991218/TestRunner.java
@@ -64,6 +64,7 @@
options.testing.validInliningReasons = ImmutableSet.of(Reason.FORCE);
options.enableClassInlining = false;
})
+ .addDontWarnJetBrainsAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutput(StringUtils.lines("11", "12"))
diff --git a/src/test/java/com/android/tools/r8/naming/methodparameters/MethodParametersTest.java b/src/test/java/com/android/tools/r8/naming/methodparameters/MethodParametersTest.java
index 30e72d7..a8e337e 100644
--- a/src/test/java/com/android/tools/r8/naming/methodparameters/MethodParametersTest.java
+++ b/src/test/java/com/android/tools/r8/naming/methodparameters/MethodParametersTest.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.R8TestRunResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
@@ -58,7 +59,10 @@
.addKeepClassAndMembersRulesWithAllowObfuscation(MethodParametersTest.class)
.addKeepMainRule(MethodParametersTest.class)
.addKeepRules(keepMethodParameters ? "-keepattributes MethodParameters" : "")
- .setMinApi(AndroidApiLevel.L)
+ .setMinApi(keepMethodParameters ? AndroidApiLevel.O : AndroidApiLevel.L)
+ // java.lang.reflect.Parameter was introduced in API level 26 (O).
+ .addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.O))
+ .compile()
.run(parameters.getRuntime(), MethodParametersTest.class);
if (keepMethodParameters) {
checkOutputContainsAll(runResult.getStdOut());
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
index 6ae3a6f..2836f61 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/DesugarLambdaRetraceTest.java
@@ -144,7 +144,6 @@
}
// Custom consumer functional interface, as java.util.function.Consumer is not present on Android.
-@FunctionalInterface
interface ConsumerDesugarLambdaRetraceTest<T> {
void accept(T value);
}
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
index 2ffe206..344a716 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/InliningRetraceTest.java
@@ -84,7 +84,9 @@
@Override
public void configure(R8TestBuilder<?> builder) {
- builder.applyIf(mode == CompilationMode.RELEASE, R8TestBuilder::enableForceInliningAnnotations);
+ builder
+ .addForceInliningAnnotations()
+ .applyIf(mode == CompilationMode.RELEASE, R8TestBuilder::enableForceInliningAnnotations);
}
@Override
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
index a527d93..458cb07 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarLambdaRetraceTest.java
@@ -166,7 +166,6 @@
}
// Custom consumer functional interface, as java.util.function.Consumer is not present on Android.
-@FunctionalInterface
interface ConsumerDesugarLambdaRetraceTest<T> {
void accept(T value);
}
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
index 2034f5d..47240a5 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/DesugarStaticInterfaceMethodsRetraceTest.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.NeverInline;
+import com.android.tools.r8.R8TestBuilder;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.BooleanUtils;
import com.google.common.collect.ImmutableList;
@@ -33,6 +34,11 @@
}
@Override
+ public void configure(R8TestBuilder builder) {
+ builder.enableInliningAnnotations();
+ }
+
+ @Override
public Collection<Class<?>> getClasses() {
return ImmutableList.of(
getMainClass(), InterfaceWithStaticMethod1.class, InterfaceWithStaticMethod2.class);
diff --git a/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java b/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
index e94483f..62c4de9 100644
--- a/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
+++ b/src/test/java/com/android/tools/r8/naming/retraceproguard/RetraceTestBase.java
@@ -48,12 +48,12 @@
public void runTest(List<String> keepRules, BiConsumer<StackTrace, StackTrace> checker)
throws Exception {
-
R8TestRunResult result =
(compat ? testForR8Compat(backend) : testForR8(backend))
.setMode(mode)
.enableProguardTestOptions()
.addProgramClasses(getClasses())
+ .addForceInliningAnnotations()
.addKeepMainRule(getMainClass())
.addKeepRules(keepRules)
.apply(this::configure)
diff --git a/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java b/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
index 1151d20..ced781f 100644
--- a/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
+++ b/src/test/java/com/android/tools/r8/regress/b63935662/Regress63935662.java
@@ -8,6 +8,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
@@ -21,7 +22,10 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimesAndApiLevels().build();
+ return getTestParameters()
+ .withAllRuntimes()
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.N)
+ .build();
}
public Regress63935662(TestParameters parameters) {
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
index e548bcf..c8a47ca 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithInitClassTest.java
@@ -49,6 +49,7 @@
.addInnerClasses(getClass())
.addClassObfuscationDictionary("a")
.addKeepMainRule(TestClass.class)
+ .addMemberValuePropagationAnnotations()
.apply(this::configureRepackaging)
.enableMemberValuePropagationAnnotations(enableMemberValuePropagationAnnotations)
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateFieldTypeTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateFieldTypeTest.java
index 9dd90f3..543dbf8 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateFieldTypeTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateFieldTypeTest.java
@@ -63,7 +63,6 @@
public static class IneligibleForRepackaging {
- @NeverPropagateValue
private static NonPublicKeptClass FIELD =
System.currentTimeMillis() > 0 ? new PublicSubClass() : null;
diff --git a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
index 2319ca4..7190c3f 100644
--- a/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
+++ b/src/test/java/com/android/tools/r8/repackage/testclasses/repackagetest/AccessPackagePrivateMethodOnKeptClassIndirect.java
@@ -7,7 +7,6 @@
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.NoHorizontalClassMerging;
import com.android.tools.r8.NoStaticClassMerging;
-import com.android.tools.r8.NoVerticalClassMerging;
@NoHorizontalClassMerging
@NoStaticClassMerging
@@ -18,7 +17,8 @@
Helper.test();
}
- @NoVerticalClassMerging
+ @NoHorizontalClassMerging
+ @NoStaticClassMerging
public static class Helper {
@NeverInline
diff --git a/src/test/java/com/android/tools/r8/resolution/InvokeDefaultMethodViaStaticTest.java b/src/test/java/com/android/tools/r8/resolution/InvokeDefaultMethodViaStaticTest.java
index 2080b42..37f328e 100644
--- a/src/test/java/com/android/tools/r8/resolution/InvokeDefaultMethodViaStaticTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/InvokeDefaultMethodViaStaticTest.java
@@ -6,7 +6,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.TestRunResult;
import com.android.tools.r8.resolution.invokestaticinterfacedefault.InterfaceDump;
import com.android.tools.r8.resolution.invokestaticinterfacedefault.MainDump;
import com.google.common.collect.ImmutableList;
@@ -35,34 +34,20 @@
@Test
public void testReference() throws Exception {
- TestRunResult<?> result =
- testForRuntime(parameters)
- .addProgramClassFileData(CLASSES)
- .run(parameters.getRuntime(), "Main");
- if (parameters.isDexRuntime()
- && parameters.getApiLevel().isLessThan(apiLevelWithDefaultInterfaceMethodsSupport())) {
- // TODO(b/167535447): Desugaring should preserve the error.
- result.assertFailureWithErrorThatThrows(NoSuchMethodError.class);
- } else {
- result.assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
- }
+ testForRuntime(parameters)
+ .addProgramClassFileData(CLASSES)
+ .run(parameters.getRuntime(), "Main")
+ .assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
}
@Test
public void testR8() throws Exception {
- TestRunResult<?> result =
- testForR8(parameters.getBackend())
- .addProgramClassFileData(CLASSES)
- .addKeepMainRule("Main")
- .setMinApi(parameters.getApiLevel())
- .addOptionsModification(o -> o.testing.allowInvokeErrors = true)
- .run(parameters.getRuntime(), "Main");
- if (parameters.isDexRuntime()
- && parameters.getApiLevel().isLessThan(apiLevelWithDefaultInterfaceMethodsSupport())) {
- // TODO(b/167535447): Desugaring should preserve the error.
- result.assertFailureWithErrorThatThrows(NoClassDefFoundError.class);
- } else {
- result.assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
- }
+ testForR8(parameters.getBackend())
+ .addProgramClassFileData(CLASSES)
+ .addKeepMainRule("Main")
+ .setMinApi(parameters.getApiLevel())
+ .addOptionsModification(o -> o.testing.allowInvokeErrors = true)
+ .run(parameters.getRuntime(), "Main")
+ .assertFailureWithErrorThatThrows(IncompatibleClassChangeError.class);
}
}
diff --git a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessWithIntermediateTest.java b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessWithIntermediateTest.java
index 364014c..fef2265 100644
--- a/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessWithIntermediateTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/access/NestInvokeSpecialInterfaceMethodAccessWithIntermediateTest.java
@@ -171,6 +171,7 @@
.addProgramClassFileData(getTransformedClasses())
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(Main.class)
+ .addDontWarnCompanionClasses()
.run(parameters.getRuntime(), Main.class)
.apply(result -> checkExpectedResult(result, true));
}
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
index 3215f17..8f800f6 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodAsOverrideWithLambdaTest.java
@@ -93,7 +93,6 @@
.assertSuccessWithOutputLines(EXPECTED);
}
- @FunctionalInterface
@NoVerticalClassMerging
public interface I {
void foo();
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
index 77fa9d8..169c255 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultMethodLambdaTest.java
@@ -89,7 +89,6 @@
.assertSuccessWithOutputLines(EXPECTED);
}
- @FunctionalInterface
@NoVerticalClassMerging
public interface I {
void foo();
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
index 70a350f..16c1401 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/DefaultWithoutTopTest.java
@@ -86,6 +86,9 @@
.addProgramClasses(I.class, J.class, Main.class)
.addProgramClassFileData(setAImplementsIAndJ())
.addKeepMainRule(Main.class)
+ .enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
+ .enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(EXPECTED);
@@ -131,6 +134,9 @@
.addProgramClasses(I.class, J.class, K.class, Main.class)
.addProgramClassFileData(setAimplementsIandK())
.addKeepMainRule(Main.class)
+ .enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
+ .enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java b/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
index 5422f9b..958e785 100644
--- a/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/interfacetargets/LambdaMultipleInterfacesTest.java
@@ -90,7 +90,6 @@
.assertSuccessWithOutputLines(EXPECTED);
}
- @FunctionalInterface
@NoVerticalClassMerging
public interface I {
void foo();
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
index 0daaa44..1e23ae3 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/DefaultWithoutTopTest.java
@@ -86,6 +86,9 @@
.addProgramClasses(I.class, J.class, Main.class)
.addProgramClassFileData(setAImplementsIAndJ())
.addKeepMainRule(Main.class)
+ .enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
+ .enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
index e5904db..00f9b0b 100644
--- a/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/resolution/virtualtargets/PackagePrivateFinalOverrideTest.java
@@ -11,8 +11,6 @@
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.CompilationFailedException;
-import com.android.tools.r8.NeverClassInline;
-import com.android.tools.r8.NeverInline;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -101,6 +99,7 @@
testForR8(parameters.getBackend())
.addProgramClasses(MyViewModel.class, Main.class, ViewModel.class, ViewModelRunner.class)
.addKeepMainRule(Main.class)
+ .enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(EXPECTED);
@@ -146,6 +145,7 @@
.addProgramClasses(MyViewModel.class, ViewModel.class, ViewModelRunner.class)
.addProgramClassFileData(getModifiedMainWithIllegalInvokeToViewModelClear())
.addKeepMainRule(Main.class)
+ .enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
.assertFailureWithErrorThatThrows(IllegalAccessError.class);
@@ -198,6 +198,7 @@
.addProgramClasses(MyViewModel.class, ViewModel.class, Main.class)
.addProgramClassFileData(getModifiedViewModelRunnerWithDirectMyViewModelTarget())
.addKeepMainRule(Main.class)
+ .enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(AMBIGUOUS_EXPECTED_OUTPUT);
@@ -238,10 +239,8 @@
.transform();
}
- @NeverClassInline
public static class MyViewModel extends ViewModel {
- @NeverInline
public void clear() {
System.out.println("MyViewModel.clear()");
}
diff --git a/src/test/java/com/android/tools/r8/retrace/InlineWithoutNullCheckTest.java b/src/test/java/com/android/tools/r8/retrace/InlineWithoutNullCheckTest.java
index 3cabc0e..6973f6b 100644
--- a/src/test/java/com/android/tools/r8/retrace/InlineWithoutNullCheckTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/InlineWithoutNullCheckTest.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.AlwaysInline;
import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.NeverPropagateValue;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -110,6 +109,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(InlineWithoutNullCheckTest.class)
.addKeepMainRule(TestClassForInlineMethod.class)
+ .enableAlwaysInliningAnnotations()
.enableInliningAnnotations()
.addKeepAttributes(ProguardKeepAttributes.SOURCE_FILE)
.setMinApi(parameters.getApiLevel())
@@ -137,6 +137,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(InlineWithoutNullCheckTest.class)
.addKeepMainRule(TestClassForInlineField.class)
+ .enableAlwaysInliningAnnotations()
.enableInliningAnnotations()
.addKeepAttributes(ProguardKeepAttributes.SOURCE_FILE)
.setMinApi(parameters.getApiLevel())
@@ -165,6 +166,7 @@
testForR8(parameters.getBackend())
.addInnerClasses(InlineWithoutNullCheckTest.class)
.addKeepMainRule(TestClassForInlineStaticField.class)
+ .enableAlwaysInliningAnnotations()
.enableInliningAnnotations()
.addKeepAttributes(ProguardKeepAttributes.SOURCE_FILE)
.setMinApi(parameters.getApiLevel())
@@ -232,7 +234,7 @@
}
static class A {
- @NeverPropagateValue Result result;
+ Result result;
A(Result result) {
this.result = result;
@@ -260,8 +262,8 @@
}
static class Result {
- @NeverPropagateValue int x = 1;
- @NeverPropagateValue static int y = 1;
+ int x = 1;
+ static int y = 1;
@AlwaysInline
int methodWhichAccessInstanceMethod() {
diff --git a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
index 274b990..a715864 100644
--- a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionInSameFileRetraceTests.java
@@ -91,6 +91,7 @@
testForR8(parameters.getBackend())
.addProgramFiles(compilationResults.getForConfiguration(kotlinc, targetVersion))
.addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addDontWarnJetBrainsAnnotations()
.addKeepAttributes("SourceFile", "LineNumberTable")
.setMode(CompilationMode.RELEASE)
.addKeepMainRule(MAIN)
diff --git a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
index d22a979..e018cdd 100644
--- a/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/KotlinInlineFunctionRetraceTest.java
@@ -109,6 +109,7 @@
.allowDiagnosticWarningMessages()
.setMode(CompilationMode.RELEASE)
.addKeepMainRule(main)
+ .addDontWarnJetBrainsAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
@@ -139,6 +140,7 @@
.allowDiagnosticWarningMessages()
.setMode(CompilationMode.RELEASE)
.addKeepMainRule(main)
+ .addDontWarnJetBrainsAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
@@ -172,6 +174,7 @@
.allowDiagnosticWarningMessages()
.setMode(CompilationMode.RELEASE)
.addKeepMainRule(main)
+ .addDontWarnJetBrainsAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
@@ -204,6 +207,7 @@
.allowDiagnosticWarningMessages()
.setMode(CompilationMode.RELEASE)
.addKeepMainRule(main)
+ .addDontWarnJetBrainsAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.assertAllWarningMessagesMatch(equalTo("Resource 'META-INF/MANIFEST.MF' already exists."))
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumInvalidValuesLengthTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumInvalidValuesLengthTest.java
index ead99d1..2636944 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumInvalidValuesLengthTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumInvalidValuesLengthTest.java
@@ -36,6 +36,7 @@
.addKeepMainRule(EnumInvalidValuesLengthTest.Main.class)
.addProgramClasses(EnumInvalidValuesLengthTest.Main.class)
.addProgramClassFileData(transformValues(MyEnum.class))
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.run(parameters.getRuntime(), EnumInvalidValuesLengthTest.Main.class)
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
index ae4947a..7733b23 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
@@ -57,6 +57,7 @@
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(Ordinals.class)
.addKeepMainRule(Ordinals.class)
+ .enableForceInliningAnnotations()
.enableInliningAnnotations()
.enableSideEffectAnnotations()
.addOptionsModification(this::configure)
@@ -105,6 +106,7 @@
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(Names.class)
.addKeepMainRule(Names.class)
+ .enableForceInliningAnnotations()
.enableInliningAnnotations()
.enableSideEffectAnnotations()
.addOptionsModification(this::configure)
@@ -150,6 +152,7 @@
testForR8(parameters.getBackend())
.addProgramClassesAndInnerClasses(ToStrings.class)
.addKeepMainRule(ToStrings.class)
+ .enableForceInliningAnnotations()
.enableInliningAnnotations()
.enableSideEffectAnnotations()
.addOptionsModification(this::configure)
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumSideEffect.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumSideEffect.java
index a0e59b3..2d1b018 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumSideEffect.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumSideEffect.java
@@ -39,6 +39,7 @@
.addKeepMainRule(Main.class)
.enableInliningAnnotations()
.addInnerClasses(EnumSideEffect.class)
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.run(parameters.getRuntime(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassTest.java
index ee99ea1..5bcfdb8 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassTest.java
@@ -5,7 +5,6 @@
package com.android.tools.r8.rewrite.serviceloaders;
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -55,10 +54,11 @@
AppServices.SERVICE_DIRECTORY_NAME + Service.class.getTypeName(),
Origin.unknown()))
.addOptionsModification(o -> o.dataResourceConsumer = dataResourceConsumer)
+ .addDontWarn(ServiceImpl.class)
.allowDiagnosticWarningMessages()
.setMinApi(parameters.getApiLevel())
.compile()
- .inspectDiagnosticMessages(this::inspectDiagnosticMessages)
+ .inspectDiagnosticMessages(this::inspectDiagnosticMessagesWithDontWarn)
.addRunClasspathClasses(Service.class, ServiceImpl.class)
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithEmptyOutput();
@@ -80,26 +80,39 @@
AppServices.SERVICE_DIRECTORY_NAME + Service.class.getTypeName(),
Origin.unknown()))
.run()
- .inspectDiagnosticMessages(this::inspectDiagnosticMessages);
+ .inspectDiagnosticMessages(this::inspectDiagnosticMessagesWithoutDontWarn);
}
- private void inspectDiagnosticMessages(TestDiagnosticMessages inspector) {
- inspector.assertWarningsCount(2);
- inspector.assertAllWarningsMatch(
- diagnosticMessage(
- anyOf(
+ private void inspectDiagnosticMessagesWithDontWarn(TestDiagnosticMessages diagnostics) {
+ diagnostics
+ .assertOnlyWarnings()
+ .assertWarningsMatch(
+ diagnosticMessage(
containsString(
"Unexpected reference to missing service class: "
+ AppServices.SERVICE_DIRECTORY_NAME
+ Service.class.getTypeName()
- + "."),
+ + ".")));
+ }
+
+ private void inspectDiagnosticMessagesWithoutDontWarn(TestDiagnosticMessages inspector) {
+ inspector
+ .assertOnlyWarnings()
+ .assertWarningsMatch(
+ diagnosticMessage(
+ containsString(
+ "Unexpected reference to missing service class: "
+ + AppServices.SERVICE_DIRECTORY_NAME
+ + Service.class.getTypeName()
+ + ".")),
+ diagnosticMessage(
containsString(
"Unexpected reference to missing service implementation class in "
+ AppServices.SERVICE_DIRECTORY_NAME
+ Service.class.getTypeName()
+ ": "
+ ServiceImpl.class.getTypeName()
- + "."))));
+ + ".")));
}
private void inspectResource(List<String> contents) {
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassWithFeatureTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassWithFeatureTest.java
index f36c122..be5dfb6 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassWithFeatureTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceClassWithFeatureTest.java
@@ -38,7 +38,7 @@
.addProgramClasses(TestClass.class, ServiceImpl.class)
.addKeepMainRule(TestClass.class)
.addKeepClassAndMembersRules(FeatureClass.class)
- .addKeepRules("-dontwarn " + Service.class.getTypeName())
+ .addDontWarn(Service.class.getTypeName())
.addDataEntryResources(
DataEntryResource.fromBytes(
StringUtils.lines("java.lang.Object").getBytes(),
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassTest.java
index 9039c50..ca17780 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassTest.java
@@ -4,15 +4,12 @@
package com.android.tools.r8.rewrite.serviceloaders;
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import com.android.tools.r8.DataEntryResource;
-import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
@@ -59,6 +56,7 @@
R8TestCompileResult compileResult =
testForR8(parameters.getBackend())
.addProgramClasses(TestClass.class, Service.class)
+ .addDontWarn(ServiceImpl.class)
.addKeepMainRule(TestClass.class)
.addKeepClassAndMembersRulesWithAllowObfuscation(Service.class)
.addDataEntryResources(
@@ -72,22 +70,8 @@
new DataResourceConsumerForTesting(options.dataResourceConsumer));
options.dataResourceConsumer = dataResourceConsumer.get();
})
- .allowDiagnosticWarningMessages()
.setMinApi(parameters.getApiLevel())
- .compile()
- .inspectDiagnosticMessages(
- inspector -> {
- inspector.assertWarningsCount(1);
- inspector.assertAllWarningsMatch(
- diagnosticMessage(
- containsString(
- "Unexpected reference to missing service implementation class in "
- + AppServices.SERVICE_DIRECTORY_NAME
- + Service.class.getTypeName()
- + ": "
- + ServiceImpl.class.getTypeName()
- + ".")));
- });
+ .compile();
CodeInspector inspector = compileResult.inspector();
ClassSubject serviceClassSubject = inspector.clazz(Service.class);
@@ -171,7 +155,6 @@
public static class ServiceImpl implements Service {
@Override
- @NeverInline
public void greet() {
System.out.println("Hello world!");
}
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassWithFeatureTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassWithFeatureTest.java
index b3f120c..a3aea84 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassWithFeatureTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/MissingServiceImplementationClassWithFeatureTest.java
@@ -4,8 +4,6 @@
package com.android.tools.r8.rewrite.serviceloaders;
-import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
-import static org.hamcrest.CoreMatchers.containsString;
import com.android.tools.r8.DataEntryResource;
import com.android.tools.r8.TestBase;
@@ -40,6 +38,7 @@
public void testR8() throws Exception {
testForR8(parameters.getBackend())
.addProgramClasses(TestClass.class, Service.class)
+ .addDontWarn("MissingClass")
.addKeepMainRule(TestClass.class)
.addKeepClassAndMembersRules(FeatureClass.class)
.addDataEntryResources(
@@ -48,20 +47,8 @@
AppServices.SERVICE_DIRECTORY_NAME + Service.class.getTypeName(),
Origin.unknown()))
.addFeatureSplit(FeatureClass.class)
- .allowDiagnosticWarningMessages()
.setMinApi(parameters.getApiLevel())
- .compile()
- .inspectDiagnosticMessages(
- inspector -> {
- inspector.assertWarningsCount(1);
- inspector.assertAllWarningsMatch(
- diagnosticMessage(
- containsString(
- "Unexpected reference to missing service implementation class in "
- + AppServices.SERVICE_DIRECTORY_NAME
- + Service.class.getTypeName()
- + ": MissingClass.")));
- });
+ .compile();
}
static class TestClass {
diff --git a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/ServiceWithoutResourceFileAtCompileTimeTest.java b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/ServiceWithoutResourceFileAtCompileTimeTest.java
index 1ea55b8..9f5eada 100644
--- a/src/test/java/com/android/tools/r8/rewrite/serviceloaders/ServiceWithoutResourceFileAtCompileTimeTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/serviceloaders/ServiceWithoutResourceFileAtCompileTimeTest.java
@@ -69,6 +69,7 @@
.addClasspathClasses(Service.class)
.addKeepAllClassesRule()
.addApplyMapping(compileResult.getProguardMap())
+ .enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.addRunClasspathFiles(
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index b5aba75..4b924d5 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -73,6 +73,9 @@
testForR8(Backend.CF)
.addProgramFiles(R8_JAR)
.addKeepRules("-keep class * { @" + PRESENT_ANNOTATION + " *; }")
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
+ .addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
.compileWithExpectedDiagnostics(
diagnostics ->
diagnostics.assertErrorsMatch(diagnosticException(AssertionError.class)));
@@ -85,6 +88,9 @@
.addProgramFiles(R8_JAR)
.addKeepRules(
"-keep class *", "-keepclassmembers class * { @" + PRESENT_ANNOTATION + " *; }")
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
+ .addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
.compile();
}
@@ -103,6 +109,9 @@
testForR8(Backend.CF)
.addProgramFiles(R8_JAR)
.addKeepRules("-keepclasseswithmembers class * { @" + PRESENT_ANNOTATION + " *** *(...); }")
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
+ .addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
.compile()
.inspect(
inspector -> {
@@ -192,6 +201,8 @@
// TODO(b/132318609): Remove keep annotation once fixed.
.addKeepClassRules(PRESENT_ANNOTATION)
.addKeepRules("-keepclassmembers class * { @" + PRESENT_ANNOTATION + " *** *(...); }")
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
.compile()
.graphInspector();
@@ -208,6 +219,8 @@
+ "-keepclassmembers class <1> { @"
+ PRESENT_ANNOTATION
+ " *** *(...); }")
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
.compile()
.graphInspector();
assertRetainedClassesEqual(referenceInspector, ifThenKeepClassMembersInspector, false, false);
@@ -225,6 +238,8 @@
+ "-keepclasseswithmembers class <1> { @"
+ PRESENT_ANNOTATION
+ " *** *(...); }")
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
.compile()
.graphInspector();
assertRetainedClassesEqual(
@@ -245,6 +260,8 @@
+ "-keep class <1> { @"
+ PRESENT_ANNOTATION
+ " *** <2>(...); }")
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
.compile()
.graphInspector();
// TODO(b/159418523): Should the reference be equal to the result with the conditional rule?
diff --git a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
index 7d68070..331eb12 100644
--- a/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/LibraryMethodOverrideInLambdaMarkingTest.java
@@ -87,14 +87,12 @@
}
}
- @FunctionalInterface
@NoVerticalClassMerging
interface I {
Iterator<Object> iterator();
}
- @FunctionalInterface
@NoVerticalClassMerging
interface J extends Iterable<Object> {
diff --git a/src/test/java/com/android/tools/r8/shaking/MissingInterfaceTest.java b/src/test/java/com/android/tools/r8/shaking/MissingInterfaceTest.java
index 7254ee6..617676f 100644
--- a/src/test/java/com/android/tools/r8/shaking/MissingInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/MissingInterfaceTest.java
@@ -35,11 +35,10 @@
public void test_missingInterface() throws Exception {
testForR8(parameters.getBackend())
.addProgramClasses(TestClassForB112849320.class)
+ .addDontWarn(GoingToBeMissed.class)
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(TestClassForB112849320.class)
.addOptionsModification(options -> options.enableInlining = false)
- .allowDiagnosticWarningMessages(
- parameters.isCfRuntime() || !parameters.canUseDefaultAndStaticInterfaceMethods())
.compile()
.addRunClasspathFiles(
buildOnDexRuntime(
diff --git a/src/test/java/com/android/tools/r8/shaking/PreserveDesugaredLambdaTest.java b/src/test/java/com/android/tools/r8/shaking/PreserveDesugaredLambdaTest.java
index c2f8041..74b7c8a 100644
--- a/src/test/java/com/android/tools/r8/shaking/PreserveDesugaredLambdaTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/PreserveDesugaredLambdaTest.java
@@ -13,7 +13,6 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.utils.AndroidApiLevel;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import org.junit.Test;
@@ -68,8 +67,7 @@
.addClasspathClasses(Interface.class)
.addLibraryFiles(TestBase.runtimeJar(parameters.getBackend()))
.addKeepAllClassesRule()
- .allowDiagnosticWarningMessages(
- parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.N))
+ .addDontWarn(A.class)
.setMinApi(parameters.getApiLevel())
.compile()
.addRunClasspathFiles(libraryCompileResult.writeToZip())
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
index 3a58245..2f1a112 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
@@ -152,6 +152,24 @@
BiConsumer<CodeInspector, CodeInspector> dexComparator,
List<String> keepRulesFiles,
Consumer<InternalOptions> optionsConsumer,
+ ThrowableConsumer<R8FullTestBuilder> testBuilderConsumer)
+ throws Exception {
+ runTest(
+ inspection,
+ outputComparator,
+ dexComparator,
+ keepRulesFiles,
+ optionsConsumer,
+ testBuilderConsumer,
+ null);
+ }
+
+ protected void runTest(
+ ThrowingConsumer<CodeInspector, Exception> inspection,
+ BiConsumer<String, String> outputComparator,
+ BiConsumer<CodeInspector, CodeInspector> dexComparator,
+ List<String> keepRulesFiles,
+ Consumer<InternalOptions> optionsConsumer,
ThrowableConsumer<R8FullTestBuilder> testBuilderConsumer,
DiagnosticsConsumer diagnosticsConsumer)
throws Exception {
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationShakingBehaviorTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationShakingBehaviorTest.java
index 484fb10..9c98c6e 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationShakingBehaviorTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/AnnotationShakingBehaviorTest.java
@@ -91,6 +91,8 @@
.addKeepMainRule(MainWithNewB.class)
.addKeepClassAndMembersRules(Factory.class)
.addKeepAttributes("*Annotation*")
+ .enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), MainWithNewB.class)
.assertSuccessWithOutputLines("Hello World!")
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/ProgramAnnotationRemovalTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/ProgramAnnotationRemovalTest.java
index 3396686..13fbb3e 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/ProgramAnnotationRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/ProgramAnnotationRemovalTest.java
@@ -49,6 +49,7 @@
.addInnerClasses(ProgramAnnotationRemovalTest.class)
.addKeepMainRule(TestClass.class)
.addKeepAttributes("RuntimeVisibleAnnotations")
+ .enableInliningAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.run(parameters.getRuntime(), TestClass.class);
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java b/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
index 9c358e8..bc55c55 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
@@ -106,6 +106,7 @@
.addKeepMainRule(MAIN_CLASS_NAME)
.addKeepRules(KEEP_ANNOTATIONS)
.addKeepRules("-keep @interface " + ANNOTATION_NAME + " {", " *;", "}")
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.minification(minify)
.setMinApi(parameters.getApiLevel())
@@ -145,6 +146,7 @@
"-keep,allowobfuscation @interface " + ANNOTATION_NAME + " {",
" java.lang.String *f2();",
"}")
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.minification(minify)
.setMinApi(parameters.getApiLevel())
@@ -181,6 +183,7 @@
.addProgramFiles(getJavaJarFile(FOLDER))
.addKeepMainRule(MAIN_CLASS_NAME)
.addKeepRules(KEEP_ANNOTATIONS)
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.minification(minify)
.setMinApi(parameters.getApiLevel())
@@ -216,6 +219,7 @@
.addProgramFiles(compiledJars.getForConfiguration(kotlinc, targetVersion))
.addProgramFiles(getJavaJarFile(FOLDER))
.addKeepMainRule(MAIN_CLASS_NAME)
+ .addDontWarnJetBrainsAnnotations()
.allowDiagnosticWarningMessages()
.minification(minify)
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/shaking/annotations/b137392797/B137392797.java b/src/test/java/com/android/tools/r8/shaking/annotations/b137392797/B137392797.java
index 3b9c067..1112ccd 100644
--- a/src/test/java/com/android/tools/r8/shaking/annotations/b137392797/B137392797.java
+++ b/src/test/java/com/android/tools/r8/shaking/annotations/b137392797/B137392797.java
@@ -5,13 +5,11 @@
package com.android.tools.r8.shaking.annotations.b137392797;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -64,16 +62,14 @@
classWireFieldLabel(),
classTest(defaultEnumValueInAnnotation))
.addProgramClasses(TestClass.class)
+ .addDontWarnKotlin()
+ .addDontWarnJetBrainsAnnotations()
.addKeepClassAndMembersRules(
"com.squareup.wire.WireField", "com.squareup.demo.myapplication.Test")
.addKeepMainRule(TestClass.class)
.addKeepAttributes("*Annotation*")
- .allowDiagnosticWarningMessages(
- parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.N))
.setMinApi(parameters.getApiLevel())
.compile()
- .assertAllWarningMessagesMatch(
- containsString("required for default or static interface methods desugaring"))
.inspect(this::checkEnumUses)
.run(parameters.getRuntime(), TestClass.class, "com.squareup.demo.myapplication.Test")
.assertSuccessWithOutputLines(
diff --git a/src/test/java/com/android/tools/r8/shaking/assumevalues/SynthesizedRulesFromApiLevelTest.java b/src/test/java/com/android/tools/r8/shaking/assumevalues/SynthesizedRulesFromApiLevelTest.java
index 0d9fa5e..b2f0964 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumevalues/SynthesizedRulesFromApiLevelTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumevalues/SynthesizedRulesFromApiLevelTest.java
@@ -53,12 +53,12 @@
}
// Simple mock implementation of class android.os.Build$VERSION with just the SDK_INT field.
- private Path mockAndroidRuntimeLibrary(int sdkInt) throws Exception {
+ private Path mockAndroidRuntimeLibrary(AndroidApiLevel apiLevel) throws Exception {
JasminBuilder builder = new JasminBuilder();
ClassBuilder classBuilder;
classBuilder = builder.addClass("android.os.Build$VERSION");
- classBuilder.addStaticFinalField("SDK_INT", "I", Integer.toString(sdkInt));
+ classBuilder.addStaticFinalField("SDK_INT", "I", Integer.toString(apiLevel.getLevel()));
classBuilder = builder.addClass("android.os.Native");
classBuilder.addStaticMethod("method", ImmutableList.of(), "V",
@@ -71,13 +71,12 @@
return writeToJar(builder);
}
- private Path buildMockAndroidRuntimeLibrary(AndroidApiLevel apiLevel) throws Exception {
+ private Path buildMockAndroidRuntimeLibrary(Path mockAndroidRuntimeLibrary) throws Exception {
// Build the mock library containing android.os.Build.VERSION with D8.
Path library = temp.newFolder().toPath().resolve("library.jar");
D8.run(
- D8Command
- .builder()
- .addProgramFiles(mockAndroidRuntimeLibrary(apiLevel.getLevel()))
+ D8Command.builder()
+ .addProgramFiles(mockAndroidRuntimeLibrary)
.setOutput(library, OutputMode.DexIndexed)
.build());
return library;
@@ -164,9 +163,11 @@
throws Exception {
assertTrue(runtimeApiLevel.getLevel() >= buildApiLevel.getLevel());
if (backend == Backend.DEX) {
+ Path androidRuntimeLibraryMock = mockAndroidRuntimeLibrary(runtimeApiLevel);
testForR8(backend)
.setMinApi(buildApiLevel)
.addProgramFiles(buildApp(nativeApiLevel))
+ .addClasspathFiles(androidRuntimeLibraryMock)
.enableProguardTestOptions()
.addKeepRules("-neverinline class " + compatLibraryClassName + " { *; }")
.addKeepMainRule(mainClassName)
@@ -177,20 +178,21 @@
syntheticProguardRules ->
checkSynthesizedRuleExpectation(syntheticProguardRules, synthesizedRule))
.inspect(inspector)
- .addRunClasspathFiles(ImmutableList.of(buildMockAndroidRuntimeLibrary(runtimeApiLevel)))
+ .addRunClasspathFiles(buildMockAndroidRuntimeLibrary(androidRuntimeLibraryMock))
.run(mainClassName)
.assertSuccessWithOutput(expectedOutput);
} else {
assert backend == Backend.CF;
+ Path androidRuntimeLibraryMock = mockAndroidRuntimeLibrary(AndroidApiLevel.D);
testForR8(backend)
.addProgramFiles(buildApp(nativeApiLevel))
.addKeepMainRule(mainClassName)
.addKeepRules(additionalKeepRules)
+ .addDontWarn("android.os.Build$VERSION", "android.os.Native")
.apply(configuration)
.compile()
.inspectSyntheticProguardRules(this::noSynthesizedRules)
- .addRunClasspathFiles(
- ImmutableList.of(mockAndroidRuntimeLibrary(AndroidApiLevel.D.getLevel())))
+ .addRunClasspathFiles(androidRuntimeLibraryMock)
.run(mainClassName)
.assertSuccessWithOutput(expectedResultForCompat(AndroidApiLevel.D));
}
diff --git a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
index 1caf4f2..a913463 100644
--- a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesDotsTest.java
@@ -47,10 +47,10 @@
@Test
public void testProguard() throws ExecutionException, CompilationFailedException, IOException {
testForProguard()
- .addProgramClassesAndInnerClasses(Main.class)
+ .addInnerClasses(getClass())
.addKeepAllClassesRule()
.addKeepAttributes(keepAttributes)
- .addKeepRules("-dontwarn com.android.tools.r8.shaking.attributes.*")
+ .addDontWarn(KeepAttributesDotsTest.class)
.run(TestRuntime.getCheckedInJdk9(), Main.class)
.assertSuccessWithOutputLines("Hello World!")
.inspect(this::inspect);
@@ -59,7 +59,7 @@
@Test
public void testR8() throws IOException, CompilationFailedException, ExecutionException {
testForR8(Backend.CF)
- .addProgramClassesAndInnerClasses(Main.class)
+ .addInnerClasses(getClass())
.addKeepAttributes(keepAttributes)
.addKeepAllClassesRule()
.run(TestRuntime.getCheckedInJdk9(), Main.class)
diff --git a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
index f298046..a314e96 100644
--- a/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/attributes/KeepAttributesTest.java
@@ -27,11 +27,11 @@
@RunWith(Parameterized.class)
public class KeepAttributesTest extends TestBase {
- private static final Class CLASS = TestKeepAttributes.class;
+ private static final Class<?> CLASS = TestKeepAttributes.class;
@Parameters(name = "{0}")
public static TestParametersCollection parameters() {
- return getTestParameters().withAllRuntimes().build();
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
private final TestParameters parameters;
@@ -111,7 +111,8 @@
.addProgramClassesAndInnerClasses(CLASS)
.addKeepAllClassesRule()
.addKeepRules(keepRules)
- .setMinApi(parameters.getRuntime())
+ .enableSideEffectAnnotations()
+ .setMinApi(parameters.getApiLevel())
.run(parameters.getRuntime(), CLASS)
.inspector()
.clazz(CLASS)
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventEntity.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventEntity.java
new file mode 100644
index 0000000..0f92507
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventEntity.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, 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.shaking.b134858535;
+
+public class EventEntity {}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java
index df725af..4836ae1 100644
--- a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java
@@ -68,29 +68,33 @@
{
AnnotationVisitor annotationVisitor1 = annotationVisitor0.visitArray("d2");
annotationVisitor1.visit(null, "<anonymous>");
- annotationVisitor1.visit(null, "Lio/reactivex/Flowable;");
+ annotationVisitor1.visit(null, "Lcom/android/tools/r8/shaking/b134858535/Flowable;");
annotationVisitor1.visit(null, "Lkotlin/Pair;");
- annotationVisitor1.visit(null, "Lcom/permutive/android/event/db/model/EventEntity;");
+ annotationVisitor1.visit(null, "Lcom/android/tools/r8/shaking/b134858535/EventEntity;");
annotationVisitor1.visit(null, "kotlin.jvm.PlatformType");
annotationVisitor1.visit(
- null, "Lcom/permutive/android/event/api/model/TrackBatchEventResponse;");
+ null, "Lcom/android/tools/r8/shaking/b134858535/TrackBatchEventResponse;");
annotationVisitor1.visit(null, "<name for destructuring parameter 0>");
annotationVisitor1.visit(null, "");
- annotationVisitor1.visit(null, "Lcom/permutive/android/config/api/model/SdkConfiguration;");
+ annotationVisitor1.visit(
+ null, "Lcom/android/tools/r8/shaking/b134858535/SdkConfiguration;");
annotationVisitor1.visit(null, "apply");
annotationVisitor1.visitEnd();
}
annotationVisitor0.visitEnd();
}
classWriter.visitInnerClass(
- "com/permutive/android/event/EventPublisher$b", null, null, ACC_FINAL | ACC_STATIC);
+ "com/android/tools/r8/shaking/b134858535/EventPublisher$b",
+ null,
+ null,
+ ACC_FINAL | ACC_STATIC);
{
fieldVisitor =
classWriter.visitField(
ACC_FINAL | ACC_SYNTHETIC,
"a",
- "Lcom/permutive/android/event/EventPublisher;",
+ "Lcom/android/tools/r8/shaking/b134858535/EventPublisher;",
null,
null);
fieldVisitor.visitEnd();
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java
index 8bde97b..6f9c298 100644
--- a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java
@@ -4,32 +4,62 @@
package com.android.tools.r8.shaking.b134858535;
+import static com.android.tools.r8.ToolHelper.getKotlinCompilers;
import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.KotlinCompilerTool.KotlinCompiler;
import com.android.tools.r8.TestBase;
-import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
+import java.util.List;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+@RunWith(Parameterized.class)
public class EventPublisherTest extends TestBase {
+ private final KotlinCompiler kotlinc;
+ private final TestParameters parameters;
+
+ @Parameters(name = "{1}, {0}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getKotlinCompilers(),
+ TestBase.getTestParameters().withDexRuntimes().withAllApiLevels().build());
+ }
+
+ public EventPublisherTest(KotlinCompiler kotlinc, TestParameters parameters) {
+ this.kotlinc = kotlinc;
+ this.parameters = parameters;
+ }
+
+ @Test
+ public void testPrivateMethodsInLambdaClass() throws CompilationFailedException {
+ // This test only tests if the dump can be compiled without errors.
+ testForR8(parameters.getBackend())
+ .addProgramClasses(
+ Main.class,
+ Interface.class,
+ EventEntity.class,
+ Flowable.class,
+ SdkConfiguration.class,
+ TrackBatchEventResponse.class)
+ .addProgramClassFileData(EventPublisher$bDump.dump())
+ .addProgramFiles(ToolHelper.getKotlinStdlibJar(kotlinc))
+ .addKeepClassRules(Interface.class)
+ .addKeepMainRule(Main.class)
+ .setMinApi(parameters.getApiLevel())
+ .addHorizontallyMergedLambdaClassesInspector(
+ inspector -> inspector.assertClassNotMerged(EventPublisher$b.class))
+ .compile();
+ }
+
public static class Main {
public static void main(String[] args) {
new EventPublisher$b().apply("foo");
}
}
-
- @Test
- public void testPrivateMethodsInLambdaClass() throws CompilationFailedException {
- // This test only tests if the dump can be compiled without errors.
- testForR8(Backend.DEX)
- .addProgramClasses(Main.class, Interface.class)
- .addProgramClassFileData(EventPublisher$bDump.dump())
- .addKeepClassRules(Interface.class)
- .addKeepMainRule(Main.class)
- .setMinApi(AndroidApiLevel.L)
- .addHorizontallyMergedLambdaClassesInspector(
- inspector -> inspector.assertClassNotMerged(EventPublisher$b.class))
- .compile();
- }
}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/Flowable.java b/src/test/java/com/android/tools/r8/shaking/b134858535/Flowable.java
new file mode 100644
index 0000000..928744f
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/Flowable.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, 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.shaking.b134858535;
+
+public class Flowable {}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/SdkConfiguration.java b/src/test/java/com/android/tools/r8/shaking/b134858535/SdkConfiguration.java
new file mode 100644
index 0000000..39f22e3
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/SdkConfiguration.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, 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.shaking.b134858535;
+
+public class SdkConfiguration {}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/TrackBatchEventResponse.java b/src/test/java/com/android/tools/r8/shaking/b134858535/TrackBatchEventResponse.java
new file mode 100644
index 0000000..ae8dfb6
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/TrackBatchEventResponse.java
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, 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.shaking.b134858535;
+
+public class TrackBatchEventResponse {}
diff --git a/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java b/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
index 32a861a..0a54cf8 100644
--- a/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
@@ -44,7 +44,10 @@
throws Exception {
testForR8(parameters.getBackend())
.addProgramClasses(
- InterfaceWithDefaultMethods.class, ClassImplementingInterface.class, TestClass.class)
+ InterfaceWithDefaultMethods.class,
+ ClassImplementingInterface.class,
+ OtherClassImplementingInterface.class,
+ TestClass.class)
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(TestClass.class)
.addKeepRules(additionalKeepRules)
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
index b30a14d..15e18bd 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
@@ -9,6 +9,7 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.shaking.TreeShakingTest;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
@@ -25,7 +26,13 @@
@Parameters(name = "mode:{0}-{1} minify:{2}")
public static List<Object[]> data() {
- return defaultTreeShakingParameters();
+ return buildParameters(
+ Frontend.values(),
+ getTestParameters()
+ .withAllRuntimes()
+ .withApiLevelsStartingAtIncluding(AndroidApiLevel.K)
+ .build(),
+ MinifyMode.values());
}
public TreeShaking12Test(Frontend frontend, TestParameters parameters, MinifyMode minify) {
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
index dd1b4bc..4e53505 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
@@ -14,9 +14,11 @@
import static org.junit.Assume.assumeTrue;
import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.R8CompatTestBuilder;
import com.android.tools.r8.R8TestCompileResult;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ThrowableConsumer;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.shaking.ProguardKeepAttributes;
@@ -68,12 +70,21 @@
}
private void test(Class<?> mainClass, Class<?> mentionedClass) throws Exception {
+ test(mainClass, mentionedClass, null);
+ }
+
+ private void test(
+ Class<?> mainClass,
+ Class<?> mentionedClass,
+ ThrowableConsumer<R8CompatTestBuilder> configuration)
+ throws Exception {
CodeInspector inspector =
testForR8Compat(parameters.getBackend(), forceProguardCompatibility)
.noMinification()
.allowAccessModification()
.addProgramClasses(mainClass, mentionedClass)
.addKeepMainRule(mainClass)
+ .apply(configuration)
.setMinApi(parameters.getApiLevel())
.compile()
.inspector();
@@ -86,7 +97,12 @@
@Test
public void testKeepDefaultInitializer() throws Exception {
- test(TestMain.class, TestMain.MentionedClass.class);
+ test(
+ TestMain.class,
+ TestMain.MentionedClass.class,
+ testBuilder ->
+ testBuilder.addProgramClasses(
+ TestMain.MentionedClassWithAnnotation.class, TestAnnotation.class));
}
@Test
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java
index 908297c..cc1a987 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithFieldValuePropagationTest.java
@@ -23,7 +23,7 @@
@Parameterized.Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withAllRuntimes().build();
+ return getTestParameters().withAllRuntimesAndApiLevels().build();
}
public IfWithFieldValuePropagationTest(TestParameters parameters) {
@@ -48,8 +48,9 @@
.addRunClasspathFiles(
testForR8(parameters.getBackend())
.addProgramClasses(Library.class)
+ .addClasspathClasses(Layout.class)
.addKeepAllClassesRule()
- .setMinApi(parameters.getRuntime())
+ .setMinApi(parameters.getApiLevel())
.compile()
.writeToZip())
.run(parameters.getRuntime(), TestClass.class)
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java
index f795067..e377809 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/membervaluepropagation/IfWithMethodValuePropagationTest.java
@@ -48,6 +48,7 @@
.addRunClasspathFiles(
testForR8(parameters.getBackend())
.addProgramClasses(Library.class)
+ .addClasspathClasses(Layout.class)
.addKeepAllClassesRule()
.setMinApi(parameters.getRuntime())
.compile()
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
index 7ea419c..6b01b51 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
@@ -11,6 +11,7 @@
import static org.junit.Assert.assertNotEquals;
import com.android.tools.r8.NeverClassInline;
+import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
@@ -78,6 +79,11 @@
}
@Override
+ public void configure(R8FullTestBuilder builder) {
+ builder.enableNeverClassInliningAnnotations();
+ }
+
+ @Override
public Class<?> getTestClass() {
return TestClass.class;
}
diff --git a/src/test/java/com/android/tools/r8/shaking/interfaces/RedundantImplementsClauseTest.java b/src/test/java/com/android/tools/r8/shaking/interfaces/RedundantImplementsClauseTest.java
index 1d559b7..fae800c 100644
--- a/src/test/java/com/android/tools/r8/shaking/interfaces/RedundantImplementsClauseTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/interfaces/RedundantImplementsClauseTest.java
@@ -43,6 +43,7 @@
.addKeepMainRule(TestClass.class)
.enableInliningAnnotations()
.enableNeverClassInliningAnnotations()
+ .enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
.compile()
.inspect(this::inspect)
diff --git a/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java b/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
index 888b231..4740853 100644
--- a/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
@@ -173,6 +173,9 @@
.addInnerClasses(KeepParameterNamesTest.class)
.addKeepMainRule(TestClass.class)
.addKeepRules("-keep class " + Api.class.getTypeName() + "{ api*(...); }")
+ .enableInliningAnnotations()
+ .enableNeverClassInliningAnnotations()
+ .enableUnusedArgumentAnnotations()
.minification(enableMinification)
.apply(this::configureKeepParameterNames)
.compile()
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedClassTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedClassTestRunner.java
index 47659e2..3f3c43e 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedClassTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedClassTestRunner.java
@@ -46,7 +46,9 @@
.enableGraphInspector()
.enableInliningAnnotations()
.addProgramClasses(CLASS)
+ .addKeepAnnotation()
.addKeepRules("-keep @com.android.tools.r8.Keep class * { public *; }")
+ .addInliningAnnotations()
.run(CLASS)
.assertSuccessWithOutput(EXPECTED)
.graphInspector();
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedMethodTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedMethodTestRunner.java
index 2f3fea1..a5fb706 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedMethodTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByAnnotatedMethodTestRunner.java
@@ -62,6 +62,7 @@
.enableGraphInspector()
.enableInliningAnnotations()
.addProgramClasses(CLASSES)
+ .addKeepAnnotation()
.addKeepMainRule(CLASS)
.addKeepRules(keepAnnotatedMethodsRule, keepClassesOfAnnotatedMethodsRule)
.run(CLASS)
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByFieldReflectionTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByFieldReflectionTestRunner.java
index a43e42c..02d8481 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByFieldReflectionTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByFieldReflectionTestRunner.java
@@ -30,16 +30,17 @@
private static final Class<?> CLASS = KeptByFieldReflectionTest.class;
private static final Collection<Class<?>> CLASSES = Arrays.asList(CLASS);
+ private static final String TYPE_NAME = CLASS.getTypeName();
private final String EXPECTED_STDOUT = StringUtils.lines("got foo: 42");
private final String EXPECTED_WHYAREYOUKEEPING =
StringUtils.lines(
- "int com.android.tools.r8.shaking.keptgraph.KeptByFieldReflectionTest.foo",
+ "int " + TYPE_NAME + ".foo",
"|- is reflected from:",
- "| void com.android.tools.r8.shaking.keptgraph.KeptByFieldReflectionTest.main(java.lang.String[])",
+ "| void " + TYPE_NAME + ".main(java.lang.String[])",
"|- is referenced in keep rule:",
- "| -keep class com.android.tools.r8.shaking.keptgraph.KeptByFieldReflectionTest { public static void main(java.lang.String[]); }");
+ "| -keep class " + TYPE_NAME + " { public static void main(java.lang.String[]); }");
private final Backend backend;
@@ -67,6 +68,7 @@
testForR8(backend)
.enableGraphInspector(consumer)
.addProgramClasses(CLASSES)
+ .addKeepAnnotation()
.addKeepMainRule(CLASS)
.run(CLASS)
.assertSuccessWithOutput(EXPECTED_STDOUT)
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByMethodReflectionTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByMethodReflectionTestRunner.java
index c8afcdc..be0fcff 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByMethodReflectionTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByMethodReflectionTestRunner.java
@@ -28,16 +28,17 @@
private static final Class<?> CLASS = KeptByMethodReflectionTest.class;
private static final Collection<Class<?>> CLASSES = Arrays.asList(CLASS);
+ private static final String TYPE_NAME = CLASS.getTypeName();
private final String EXPECTED_STDOUT = StringUtils.lines("called foo");
private final String EXPECTED_WHYAREYOUKEEPING =
StringUtils.lines(
- "void com.android.tools.r8.shaking.keptgraph.KeptByMethodReflectionTest.foo()",
+ "void " + TYPE_NAME + ".foo()",
"|- is reflected from:",
- "| void com.android.tools.r8.shaking.keptgraph.KeptByMethodReflectionTest.main(java.lang.String[])",
+ "| void " + TYPE_NAME + ".main(java.lang.String[])",
"|- is referenced in keep rule:",
- "| -keep class com.android.tools.r8.shaking.keptgraph.KeptByMethodReflectionTest { public static void main(java.lang.String[]); }");
+ "| -keep class " + TYPE_NAME + " { public static void main(java.lang.String[]); }");
private final Backend backend;
@@ -64,6 +65,7 @@
testForR8(backend)
.enableGraphInspector(consumer)
.addProgramClasses(CLASSES)
+ .addKeepAnnotation()
.addKeepMainRule(CLASS)
.run(CLASS)
.assertSuccessWithOutput(EXPECTED_STDOUT)
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByTwoRulesTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByTwoRulesTestRunner.java
index 5623924..042679f 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByTwoRulesTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptByTwoRulesTestRunner.java
@@ -54,6 +54,7 @@
testForR8(backend)
.enableGraphInspector()
.addProgramClasses(CLASSES)
+ .addKeepAnnotation()
.addKeepRules(keepPublicRule, keepFooRule)
.run(CLASS)
.assertSuccessWithOutput(EXPECTED)
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptViaClassInitializerTestRunner.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptViaClassInitializerTestRunner.java
index 436c030..230c0cf 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptViaClassInitializerTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptViaClassInitializerTestRunner.java
@@ -112,6 +112,7 @@
.addProgramClassesAndInnerClasses(Main.class, A.class, T.class)
.addKeepMethodRules(mainMethod)
.enableMemberValuePropagationAnnotations()
+ .enableNeverClassInliningAnnotations()
.setMinApi(AndroidApiLevel.N)
.apply(
b -> {
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
index 94bdbf1..4dbb21e 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
@@ -47,6 +47,8 @@
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
.addKeepRuleFiles(MAIN_KEEP)
.addKeepRules(WHY_ARE_YOU_KEEPING_ALL)
+ .addDontWarnGoogle()
+ .addDontWarnJavax()
.collectStdout()
.compile()
.assertStdoutThatMatches(containsString("referenced in keep rule"))
diff --git a/src/test/java/com/android/tools/r8/shaking/proxy/MockitoTest.java b/src/test/java/com/android/tools/r8/shaking/proxy/MockitoTest.java
index cea851e..6f868fc 100644
--- a/src/test/java/com/android/tools/r8/shaking/proxy/MockitoTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/proxy/MockitoTest.java
@@ -5,14 +5,12 @@
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static com.android.tools.r8.utils.codeinspector.Matchers.isPresentAndNotRenamed;
-import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -53,13 +51,10 @@
testForR8(parameters.getBackend())
.addProgramFiles(MOCKITO_INTERFACE_JAR)
.addKeepRuleFiles(flagToKeepTestRunner)
- .allowDiagnosticWarningMessages(
- parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.N))
+ .addDontWarn("org.junit.**", "org.mockito.**")
.minification(minify)
.setMinApi(parameters.getApiLevel())
.compile()
- .assertAllWarningMessagesMatch(
- containsString("required for default or static interface methods desugaring"))
.inspector();
ClassSubject itf = inspector.clazz(M_I);
assertThat(itf, isPresent());
@@ -75,13 +70,10 @@
testForR8(parameters.getBackend())
.addProgramFiles(MOCKITO_INTERFACE_JAR)
.addKeepRuleFiles(flagToKeepInterfaceConditionally)
- .allowDiagnosticWarningMessages(
- parameters.isDexRuntime() && parameters.getApiLevel().isLessThan(AndroidApiLevel.N))
+ .addDontWarn("org.junit.**", "org.mockito.**")
.minification(minify)
.setMinApi(parameters.getApiLevel())
.compile()
- .assertAllWarningMessagesMatch(
- containsString("required for default or static interface methods desugaring"))
.inspector();
ClassSubject itf = inspector.clazz(M_I);
assertThat(itf, isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/testrules/C.java b/src/test/java/com/android/tools/r8/shaking/testrules/C.java
index f402864..497c218 100644
--- a/src/test/java/com/android/tools/r8/shaking/testrules/C.java
+++ b/src/test/java/com/android/tools/r8/shaking/testrules/C.java
@@ -4,14 +4,12 @@
package com.android.tools.r8.shaking.testrules;
-import com.android.tools.r8.AssumeMayHaveSideEffects;
import com.android.tools.r8.NeverInline;
public class C {
private static int i;
- @AssumeMayHaveSideEffects
@NeverInline
public static int x() {
return i;
diff --git a/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java b/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
index d4e5972..b669c95 100644
--- a/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
@@ -42,6 +42,7 @@
return testForR8(parameters.getBackend())
.addProgramClasses(Main.class, A.class, B.class, C.class)
.addKeepRules(proguardConfiguration)
+ .enableInliningAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.enableNoStaticClassMergingAnnotations()
.enableProguardTestOptions()
diff --git a/src/test/java/com/android/tools/r8/shaking/whyareyoukeeping/WhyAreYouKeepingTest.java b/src/test/java/com/android/tools/r8/shaking/whyareyoukeeping/WhyAreYouKeepingTest.java
index eeb280b..477e1f3 100644
--- a/src/test/java/com/android/tools/r8/shaking/whyareyoukeeping/WhyAreYouKeepingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/whyareyoukeeping/WhyAreYouKeepingTest.java
@@ -79,6 +79,7 @@
.addKeepRules("-whyareyoukeeping class " + A.class.getTypeName())
// Redirect the compilers stdout to intercept the '-whyareyoukeeping' output
.collectStdout()
+ .addInliningAnnotations()
.compile()
.assertStdoutThatMatches(equalTo(expected));
}
@@ -90,6 +91,7 @@
.addProgramClasses(A.class)
.addKeepMethodRules(Reference.methodFromMethod(A.class.getMethod("foo")))
.setKeptGraphConsumer(graphConsumer)
+ .addInliningAnnotations()
.compile();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -139,13 +141,13 @@
.allowUnusedProguardConfigurationRules()
// Redirect the compilers stdout to intercept the '-whyareyoukeeping' output
.collectStdout()
+ .addInliningAnnotations()
.compile()
.assertNoStdout();
}
@Test
public void testNonExistentMethodWhyAreYouKeepingViaProguardConfig() throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
String aName = A.class.getTypeName();
testForR8(backend)
.addProgramClasses(A.class)
@@ -153,6 +155,7 @@
.addKeepRules("-whyareyoukeeping class " + aName + " { nonExistentMethod(); }")
// Redirect the compilers stdout to intercept the '-whyareyoukeeping' output
.collectStdout()
+ .addInliningAnnotations()
.compile()
.assertStdoutThatMatches(not(equalTo("")));
}
diff --git a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
index fb0785e..e5a8027 100644
--- a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
+++ b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
@@ -31,9 +31,8 @@
public class ConstantFoldingTest extends SmaliTestBase {
- @FunctionalInterface
public interface TriConsumer<T, U, V> {
- public void accept(T t, U u, V v);
+ void accept(T t, U u, V v);
}
private class SmaliBuilderWithCheckers {