diff options
author | Ian Zerny <zerny@google.com> | 2017-10-26 13:36:14 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-10-26 13:36:14 +0000 |
commit | bc8be4d8a8438ebd0be73fe655e160e22da3be9d (patch) | |
tree | bf673bdf67ec542a3a59977056ae396b172e7443 /src/test/java/com/android | |
parent | 4d22d2d18bab390754a423972ffc2a7b47fbde79 (diff) | |
parent | f76614b69a9a5cdf865087797546add35401ab07 (diff) | |
download | r8-bc8be4d8a8438ebd0be73fe655e160e22da3be9d.tar.gz |
Merge "Define distinct access-flag types for classes, methods and fields."
Diffstat (limited to 'src/test/java/com/android')
6 files changed, 50 insertions, 87 deletions
diff --git a/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java b/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java index 98f107102..e3e9ea0e3 100644 --- a/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java +++ b/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java @@ -12,12 +12,12 @@ import com.android.tools.r8.code.IfNe; import com.android.tools.r8.code.IfNez; import com.android.tools.r8.code.Instruction; import com.android.tools.r8.code.ReturnVoid; -import com.android.tools.r8.graph.DexAccessFlags; import com.android.tools.r8.graph.DexCode; import com.android.tools.r8.graph.DexCode.Try; import com.android.tools.r8.graph.DexEncodedMethod; import com.android.tools.r8.graph.DexItemFactory; import com.android.tools.r8.graph.DexString; +import com.android.tools.r8.graph.MethodAccessFlags; import com.android.tools.r8.naming.NamingLens; import java.util.ArrayList; import java.util.List; @@ -99,8 +99,7 @@ public class JumboStringProcessing { null, null, null); - DexAccessFlags flags = new DexAccessFlags(0); - flags.setPublic(); + MethodAccessFlags flags = MethodAccessFlags.fromSharedAccessFlags(Constants.ACC_PUBLIC, false); DexEncodedMethod method = new DexEncodedMethod(null, flags, null, null, code); new JumboStringRewriter(method, string, factory).rewrite(); return method.getCode().asDexCode(); diff --git a/src/test/java/com/android/tools/r8/dex/SharedClassWritingTest.java b/src/test/java/com/android/tools/r8/dex/SharedClassWritingTest.java index add8637e1..e0d97b189 100644 --- a/src/test/java/com/android/tools/r8/dex/SharedClassWritingTest.java +++ b/src/test/java/com/android/tools/r8/dex/SharedClassWritingTest.java @@ -8,7 +8,7 @@ import com.android.tools.r8.code.Instruction; import com.android.tools.r8.code.ReturnVoid; import com.android.tools.r8.errors.DexOverflowException; import com.android.tools.r8.errors.Unreachable; -import com.android.tools.r8.graph.DexAccessFlags; +import com.android.tools.r8.graph.ClassAccessFlags; import com.android.tools.r8.graph.DexAnnotationSet; import com.android.tools.r8.graph.DexAnnotationSetRefList; import com.android.tools.r8.graph.DexApplication; @@ -23,6 +23,7 @@ import com.android.tools.r8.graph.DexString; import com.android.tools.r8.graph.DexType; import com.android.tools.r8.graph.DexTypeList; import com.android.tools.r8.graph.DirectMappedDexApplication; +import com.android.tools.r8.graph.MethodAccessFlags; import com.android.tools.r8.naming.NamingLens; import com.android.tools.r8.utils.DescriptorUtils; import com.android.tools.r8.utils.IgnoreContentsOutputSink; @@ -72,10 +73,13 @@ public class SharedClassWritingTest { instructions[stringCount] = new ReturnVoid(); DexCode code = new DexCode(1, 0, 0, instructions, new Try[0], new TryHandler[0], null, strings[startOffset + stringCount - 1]); - return new DexEncodedMethod(dexItemFactory - .createMethod(holder, dexItemFactory.createProto(dexItemFactory.voidType), "theMethod"), - new DexAccessFlags(Constants.ACC_PUBLIC), DexAnnotationSet.empty(), - DexAnnotationSetRefList.empty(), code); + return new DexEncodedMethod( + dexItemFactory.createMethod( + holder, dexItemFactory.createProto(dexItemFactory.voidType), "theMethod"), + MethodAccessFlags.fromSharedAccessFlags(Constants.ACC_PUBLIC, false), + DexAnnotationSet.empty(), + DexAnnotationSetRefList.empty(), + code); } private DexProgramClass makeClass(String name, int stringCount, int startOffset, @@ -86,7 +90,7 @@ public class SharedClassWritingTest { type, null, null, - new DexAccessFlags(Constants.ACC_PUBLIC), + ClassAccessFlags.fromSharedAccessFlags(Constants.ACC_PUBLIC), dexItemFactory.objectType, DexTypeList.empty(), null, @@ -94,7 +98,7 @@ public class SharedClassWritingTest { DexEncodedField.EMPTY_ARRAY, DexEncodedField.EMPTY_ARRAY, DexEncodedMethod.EMPTY_ARRAY, - new DexEncodedMethod[]{makeMethod(type, stringCount, startOffset)}, + new DexEncodedMethod[] {makeMethod(type, stringCount, startOffset)}, synthesizedFrom); } diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java index a358e26fc..29299960d 100644 --- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java +++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java @@ -21,10 +21,9 @@ import com.android.tools.r8.dex.Constants; import com.android.tools.r8.errors.CompilationError; import com.android.tools.r8.errors.DexOverflowException; import com.android.tools.r8.errors.Unreachable; -import com.android.tools.r8.graph.AppInfoWithSubtyping; +import com.android.tools.r8.graph.ClassAccessFlags; import com.android.tools.r8.graph.Code; import com.android.tools.r8.graph.DebugLocalInfo; -import com.android.tools.r8.graph.DexAccessFlags; import com.android.tools.r8.graph.DexAnnotationSet; import com.android.tools.r8.graph.DexAnnotationSetRefList; import com.android.tools.r8.graph.DexApplication; @@ -36,6 +35,7 @@ import com.android.tools.r8.graph.DexString; import com.android.tools.r8.graph.DexType; import com.android.tools.r8.graph.DexTypeList; import com.android.tools.r8.graph.DirectMappedDexApplication; +import com.android.tools.r8.graph.MethodAccessFlags; import com.android.tools.r8.ir.code.CatchHandlers; import com.android.tools.r8.ir.code.IRCode; import com.android.tools.r8.ir.code.Position; @@ -577,7 +577,7 @@ public class MainDexListTests extends TestBase { DexType type = factory.createType(desc); DexEncodedMethod[] directMethods = new DexEncodedMethod[methodCount]; for (int i = 0; i < methodCount; i++) { - DexAccessFlags access = new DexAccessFlags(); + MethodAccessFlags access = MethodAccessFlags.fromSharedAccessFlags(0, false); access.setPublic(); access.setStatic(); Code code = new SynthesizedCode(new ReturnVoidCode()); @@ -602,7 +602,7 @@ public class MainDexListTests extends TestBase { type, null, null, - new DexAccessFlags(), + ClassAccessFlags.fromSharedAccessFlags(0), factory.objectType, DexTypeList.empty(), null, diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java index 6dc19aa5a..d119423d8 100644 --- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java +++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java @@ -14,8 +14,10 @@ import static org.junit.Assert.fail; import com.android.tools.r8.DiagnosticsHandler; import com.android.tools.r8.TestBase; import com.android.tools.r8.ToolHelper; -import com.android.tools.r8.graph.DexAccessFlags; +import com.android.tools.r8.graph.ClassAccessFlags; import com.android.tools.r8.graph.DexItemFactory; +import com.android.tools.r8.graph.FieldAccessFlags; +import com.android.tools.r8.graph.MethodAccessFlags; import com.android.tools.r8.utils.DefaultDiagnosticsHandler; import com.android.tools.r8.utils.FileUtils; import com.android.tools.r8.utils.InternalOptions.PackageObfuscationMode; @@ -224,33 +226,39 @@ public class ProguardConfigurationParserTest extends TestBase { List<ProguardConfigurationRule> rules = parser.getConfig().getRules(); assertEquals(1, rules.size()); ProguardConfigurationRule rule = rules.get(0); - DexAccessFlags publicAndFinalFlags = new DexAccessFlags(0); + ClassAccessFlags publicAndFinalFlags = ClassAccessFlags.fromSharedAccessFlags(0); publicAndFinalFlags.setPublic(); publicAndFinalFlags.setFinal(); - assertTrue(rule.getClassAccessFlags().containsNoneOf(publicAndFinalFlags)); - assertTrue(rule.getNegatedClassAccessFlags().containsAllOf(publicAndFinalFlags)); - DexAccessFlags abstractFlags = new DexAccessFlags(0); + assertTrue(rule.getClassAccessFlags().containsNone(publicAndFinalFlags)); + assertTrue(rule.getNegatedClassAccessFlags().containsAll(publicAndFinalFlags)); + ClassAccessFlags abstractFlags = ClassAccessFlags.fromSharedAccessFlags(0); abstractFlags.setAbstract(); - assertTrue(rule.getClassAccessFlags().containsAllOf(abstractFlags)); - assertTrue(rule.getNegatedClassAccessFlags().containsNoneOf(abstractFlags)); + assertTrue(rule.getClassAccessFlags().containsAll(abstractFlags)); + assertTrue(rule.getNegatedClassAccessFlags().containsNone(abstractFlags)); for (ProguardMemberRule member : rule.getMemberRules()) { if (member.getRuleType() == ProguardMemberType.ALL_FIELDS) { - DexAccessFlags publicFlags = new DexAccessFlags(0); - publicAndFinalFlags.setPublic(); - assertTrue(member.getAccessFlags().containsAllOf(publicFlags)); - assertTrue(member.getNegatedAccessFlags().containsNoneOf(publicFlags)); - DexAccessFlags staticFlags = new DexAccessFlags(0); + FieldAccessFlags publicFlags = FieldAccessFlags.fromSharedAccessFlags(0); + publicFlags.setPublic(); + assertTrue(member.getAccessFlags().containsAll(publicFlags)); + assertTrue(member.getNegatedAccessFlags().containsNone(publicFlags)); + FieldAccessFlags staticFlags = FieldAccessFlags.fromSharedAccessFlags(0); staticFlags.setStatic(); - assertTrue(member.getAccessFlags().containsNoneOf(staticFlags)); - assertTrue(member.getNegatedAccessFlags().containsAllOf(staticFlags)); + assertTrue(member.getAccessFlags().containsNone(staticFlags)); + assertTrue(member.getNegatedAccessFlags().containsAll(staticFlags)); } else { assertTrue(member.getRuleType() == ProguardMemberType.ALL_METHODS); - DexAccessFlags publicProtectedVolatileFlags = new DexAccessFlags(0); - publicProtectedVolatileFlags.setPublic(); - publicProtectedVolatileFlags.setProtected(); - publicProtectedVolatileFlags.setVolatile(); - assertTrue(member.getAccessFlags().containsNoneOf(publicProtectedVolatileFlags)); - assertTrue(member.getNegatedAccessFlags().containsAllOf(publicProtectedVolatileFlags)); + + MethodAccessFlags publicNativeFlags = MethodAccessFlags.fromSharedAccessFlags(0, false); + publicNativeFlags.setPublic(); + publicNativeFlags.setNative(); + assertTrue(member.getAccessFlags().containsAll(publicNativeFlags)); + assertFalse(member.getNegatedAccessFlags().containsNone(publicNativeFlags)); + + MethodAccessFlags protectedNativeFlags = MethodAccessFlags.fromSharedAccessFlags(0, false); + protectedNativeFlags.setProtected(); + protectedNativeFlags.setNative(); + assertTrue(member.getAccessFlags().containsAll(protectedNativeFlags)); + assertFalse(member.getNegatedAccessFlags().containsNone(protectedNativeFlags)); } } } 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 b285ac060..32cfb1493 100644 --- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java +++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java @@ -9,8 +9,6 @@ import com.android.tools.r8.CompilationException; import com.android.tools.r8.R8Command; import com.android.tools.r8.ToolHelper; import com.android.tools.r8.ToolHelper.ArtCommandBuilder; -import com.android.tools.r8.dex.Constants; -import com.android.tools.r8.graph.DexAccessFlags; import com.android.tools.r8.naming.MemberNaming.FieldSignature; import com.android.tools.r8.naming.MemberNaming.MethodSignature; import com.android.tools.r8.utils.AndroidApp; @@ -196,14 +194,13 @@ public class TreeShakingTest { private static void hasNoPrivateMethods(DexInspector inspector) { inspector.forAllClasses(clazz -> clazz.forAllMethods( - method -> Assert.assertTrue(method.hasNone(new DexAccessFlags(Constants.ACC_PRIVATE))) - )); + method -> Assert.assertTrue(!method.getMethod().accessFlags.isPrivate()))); } private static void hasNoPublicMethodsButPrivate(DexInspector inspector) { inspector.forAllClasses(clazz -> clazz.forAllMethods(method -> { if (!method.isStatic() && !method.isFinal()) { - Assert.assertTrue(method.hasNone(new DexAccessFlags(Constants.ACC_PUBLIC))); + Assert.assertTrue(!method.getMethod().accessFlags.isPublic()); } })); Assert.assertTrue(inspector.clazz("shaking6.Superclass") @@ -255,7 +252,7 @@ public class TreeShakingTest { private static void shaking7HasOnlyPublicFields(DexInspector inspector) { inspector.forAllClasses(clazz -> { clazz.forAllFields(field -> { - Assert.assertTrue(field.hasAll(new DexAccessFlags(Constants.ACC_PUBLIC))); + Assert.assertTrue(field.getField().accessFlags.isPublic()); }); }); ClassSubject subclass = inspector.clazz("shaking7.Subclass"); @@ -283,7 +280,7 @@ public class TreeShakingTest { private static void shaking7HasOnlyPublicFieldsNamedTheDoubleField(DexInspector inspector) { inspector.forAllClasses(clazz -> { clazz.forAllFields(field -> { - Assert.assertTrue(field.hasAll(new DexAccessFlags(Constants.ACC_PUBLIC))); + Assert.assertTrue(field.getField().accessFlags.isPublic()); }); }); ClassSubject subclass = inspector.clazz("shaking7.Subclass"); @@ -297,7 +294,7 @@ public class TreeShakingTest { private static void shaking7HasOnlyPublicFieldsNamedTheIntField(DexInspector inspector) { inspector.forAllClasses(clazz -> { clazz.forAllFields(field -> { - Assert.assertTrue(field.hasAll(new DexAccessFlags(Constants.ACC_PUBLIC))); + Assert.assertTrue(field.getField().accessFlags.isPublic()); }); }); ClassSubject subclass = inspector.clazz("shaking7.Subclass"); diff --git a/src/test/java/com/android/tools/r8/utils/DexInspector.java b/src/test/java/com/android/tools/r8/utils/DexInspector.java index 612043efe..e70f6f7f6 100644 --- a/src/test/java/com/android/tools/r8/utils/DexInspector.java +++ b/src/test/java/com/android/tools/r8/utils/DexInspector.java @@ -43,7 +43,6 @@ import com.android.tools.r8.code.SputObject; import com.android.tools.r8.code.SputShort; import com.android.tools.r8.code.SputWide; import com.android.tools.r8.dex.ApplicationReader; -import com.android.tools.r8.graph.DexAccessFlags; import com.android.tools.r8.graph.DexAnnotation; import com.android.tools.r8.graph.DexApplication; import com.android.tools.r8.graph.DexClass; @@ -503,10 +502,6 @@ public class DexInspector { public abstract class MemberSubject extends Subject { - public abstract boolean hasAll(DexAccessFlags flags); - - public abstract boolean hasNone(DexAccessFlags flags); - public abstract boolean isStatic(); public abstract boolean isFinal(); @@ -551,16 +546,6 @@ public class DexInspector { } @Override - public boolean hasAll(DexAccessFlags flags) { - return false; - } - - @Override - public boolean hasNone(DexAccessFlags flags) { - return true; - } - - @Override public boolean isStatic() { return false; } @@ -622,16 +607,6 @@ public class DexInspector { } @Override - public boolean hasAll(DexAccessFlags flags) { - return dexMethod.accessFlags.containsAllOf(flags); - } - - @Override - public boolean hasNone(DexAccessFlags flags) { - return dexMethod.accessFlags.containsNoneOf(flags); - } - - @Override public boolean isStatic() { return dexMethod.accessFlags.isStatic(); } @@ -704,16 +679,6 @@ public class DexInspector { public class AbsentFieldSubject extends FieldSubject { @Override - public boolean hasAll(DexAccessFlags flags) { - return false; - } - - @Override - public boolean hasNone(DexAccessFlags flags) { - return true; - } - - @Override public boolean isStatic() { return false; } @@ -770,16 +735,6 @@ public class DexInspector { } @Override - public boolean hasAll(DexAccessFlags flags) { - return dexField.accessFlags.containsAllOf(flags); - } - - @Override - public boolean hasNone(DexAccessFlags flags) { - return dexField.accessFlags.containsNoneOf(flags); - } - - @Override public boolean isStatic() { return dexField.accessFlags.isStatic(); } |