Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6acbca3a authored by Kweku Adams's avatar Kweku Adams
Browse files

Rename ProtoInputStream.isNextField to nextField.

ProtoInputStream.isNextField() skips over the current field to read the
next tag. This side effect means that calling isNextField prevents the
caller from reading the field it was just on. The "is" prefix makes it
easy to assume that the method has no side effects. Renaming to
nextField(long) with a parameter should help make it clear that the call
is as dangerous as calling nextField().

Fixes: 137294060
Test: atest android.app.usage.UsageStatsTest
Test: atest android.app.usage.cts.UsageStatsTest
Test: atest com.android.server.usage.UsageStatsDatabaseTest
Test: atest ProtoInputStreamTests
Change-Id: Ibfb8ef741f27a211f076dc0b715b64acbfc0696a
parent 3f8cdda0
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -253,12 +253,14 @@ public final class ProtoInputStream extends ProtoStream {
    }

    /**
     * Attempt to guess the next field. If there is a match, the field data will be ready to read.
     * If there is no match, nextField will need to be called to get the field number
     * Reads the tag of the next field from the stream. If previous field value was not read, its
     * data will be skipped over. If {@code fieldId} matches the next field ID, the field data will
     * be ready to read. If it does not match, {@link #nextField()} or {@link #nextField(long)} will
     * need to be called again before the field data can be read.
     *
     * @return true if fieldId matches the next field, false if not
     */
    public boolean isNextField(long fieldId) throws IOException {
    public boolean nextField(long fieldId) throws IOException {
        if (nextField() == (int) fieldId) {
            return true;
        }
+5 −5
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ final class UsageStatsProto {

        final long token = proto.start(IntervalStatsProto.STRINGPOOL);
        List<String> stringPool;
        if (proto.isNextField(IntervalStatsProto.StringPool.SIZE)) {
        if (proto.nextField(IntervalStatsProto.StringPool.SIZE)) {
            stringPool = new ArrayList(proto.readInt(IntervalStatsProto.StringPool.SIZE));
        } else {
            stringPool = new ArrayList();
@@ -66,12 +66,12 @@ final class UsageStatsProto {

        final long token = proto.start(fieldId);
        UsageStats stats;
        if (proto.isNextField(IntervalStatsProto.UsageStats.PACKAGE_INDEX)) {
        if (proto.nextField(IntervalStatsProto.UsageStats.PACKAGE_INDEX)) {
            // Fast path reading the package name index. Most cases this should work since it is
            // written first
            stats = statsOut.getOrCreateUsageStats(
                    stringPool.get(proto.readInt(IntervalStatsProto.UsageStats.PACKAGE_INDEX) - 1));
        } else if (proto.isNextField(IntervalStatsProto.UsageStats.PACKAGE)) {
        } else if (proto.nextField(IntervalStatsProto.UsageStats.PACKAGE)) {
            // No package index, try package name instead
            stats = statsOut.getOrCreateUsageStats(
                    proto.readString(IntervalStatsProto.UsageStats.PACKAGE));
@@ -177,7 +177,7 @@ final class UsageStatsProto {
        }
        String action = null;
        ArrayMap<String, Integer> counts;
        if (proto.isNextField(IntervalStatsProto.UsageStats.ChooserAction.NAME)) {
        if (proto.nextField(IntervalStatsProto.UsageStats.ChooserAction.NAME)) {
            // Fast path reading the action name. Most cases this should work since it is written
            // first
            action = proto.readString(IntervalStatsProto.UsageStats.ChooserAction.NAME);
@@ -244,7 +244,7 @@ final class UsageStatsProto {
        boolean configActive = false;
        final Configuration config = new Configuration();
        ConfigurationStats configStats;
        if (proto.isNextField(IntervalStatsProto.Configuration.CONFIG)) {
        if (proto.nextField(IntervalStatsProto.Configuration.CONFIG)) {
            // Fast path reading the configuration. Most cases this should work since it is
            // written first
            config.readFromProto(proto, IntervalStatsProto.Configuration.CONFIG);
+12 −12
Original line number Diff line number Diff line
@@ -384,55 +384,55 @@ public class ProtoInputStreamBoolTest extends TestCase {
        };

        ProtoInputStream pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readFloat(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readDouble(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readInt(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readLong(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readBytes(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readString(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }
+12 −12
Original line number Diff line number Diff line
@@ -306,55 +306,55 @@ public class ProtoInputStreamBytesTest extends TestCase {
        };

        ProtoInputStream pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readFloat(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readDouble(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readInt(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readLong(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readBoolean(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readString(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }
+12 −12
Original line number Diff line number Diff line
@@ -611,55 +611,55 @@ public class ProtoInputStreamDoubleTest extends TestCase {
        };

        ProtoInputStream pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readFloat(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readBoolean(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readInt(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readLong(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readBytes(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }

        pi = new ProtoInputStream(protobuf);
        pi.isNextField(fieldId1);
        pi.nextField();
        try {
            pi.readString(fieldId1);
            fail("Should have throw IllegalArgumentException");
            fail("Should have thrown IllegalArgumentException");
        } catch (IllegalArgumentException iae) {
            // good
        }
Loading