[go: nahoru, domu]

Minor refactors: Add nullness checks.
Test: minor refactor, existing test passes.

Change-Id: I8df70d315ab91adfca03e7429b669eee29670b58
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
index ec6723c..01cb197 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
@@ -600,7 +600,8 @@
             }
 
             boolean contentsChanged = true;
-            if (existBefore && existAfter && contentBefore.equals(contentAfter)) {
+            if (contentBefore != null
+                    && contentBefore.equals(contentAfter)) {
                 contentsChanged = false;
             }
 
@@ -993,7 +994,7 @@
         } finally {
             mReadWriteLock.writeLock().unlock();
 
-            if (logger != null) {
+            if (pStatsBuilder != null && logger != null) {
                 long totalEndTimeMillis = SystemClock.elapsedRealtime();
                 pStatsBuilder.setTotalLatencyMillis(
                         (int) (totalEndTimeMillis - totalStartTimeMillis));
@@ -1112,7 +1113,8 @@
             DocumentProto.Builder documentBuilder = documentProto.toBuilder();
             removePrefixesFromDocument(documentBuilder);
             String prefix = createPrefix(packageName, databaseName);
-            Map<String, SchemaTypeConfigProto> schemaTypeMap = mSchemaMapLocked.get(prefix);
+            Map<String, SchemaTypeConfigProto> schemaTypeMap =
+                    Preconditions.checkNotNull(mSchemaMapLocked.get(prefix));
             return GenericDocumentToProtoConverter.toGenericDocument(documentBuilder.build(),
                     prefix, schemaTypeMap);
         } finally {
@@ -1153,7 +1155,8 @@
             // The schema type map cannot be null at this point. It could only be null if no
             // schema had ever been set for that prefix. Given we have retrieved a document from
             // the index, we know a schema had to have been set.
-            Map<String, SchemaTypeConfigProto> schemaTypeMap = mSchemaMapLocked.get(prefix);
+            Map<String, SchemaTypeConfigProto> schemaTypeMap =
+                    Preconditions.checkNotNull(mSchemaMapLocked.get(prefix));
             return GenericDocumentToProtoConverter.toGenericDocument(documentBuilder.build(),
                     prefix, schemaTypeMap);
         } finally {
@@ -1250,7 +1253,7 @@
             if (!filterPackageNames.isEmpty() && !filterPackageNames.contains(packageName)) {
                 // Client wanted to query over some packages that weren't its own. This isn't
                 // allowed through local query so we can return early with no results.
-                if (logger != null) {
+                if (sStatsBuilder != null && logger != null) {
                     sStatsBuilder.setStatusCode(AppSearchResult.RESULT_SECURITY_ERROR);
                 }
                 return new SearchResultPage(Bundle.EMPTY);
@@ -1274,7 +1277,7 @@
             return searchResultPage;
         } finally {
             mReadWriteLock.readLock().unlock();
-            if (logger != null) {
+            if (sStatsBuilder != null && logger != null) {
                 sStatsBuilder.setTotalLatencyMillis(
                         (int) (SystemClock.elapsedRealtime() - totalLatencyStartMillis));
                 logger.logStats(sStatsBuilder.build());
@@ -1353,7 +1356,7 @@
         } finally {
             mReadWriteLock.readLock().unlock();
 
-            if (logger != null) {
+            if (sStatsBuilder != null && logger != null) {
                 sStatsBuilder.setTotalLatencyMillis(
                         (int) (SystemClock.elapsedRealtime() - totalLatencyStartMillis));
                 logger.logStats(sStatsBuilder.build());
@@ -1560,7 +1563,9 @@
                 // Since the new token is 0, this is the last page. We should remove the old token
                 // from our cache since it no longer refers to this query.
                 synchronized (mNextPageTokensLocked) {
-                    mNextPageTokensLocked.get(packageName).remove(nextPageToken);
+                    Set<Long> nextPageTokensForPackage =
+                            Preconditions.checkNotNull(mNextPageTokensLocked.get(packageName));
+                    nextPageTokensForPackage.remove(nextPageToken);
                 }
             }
             long rewriteSearchResultLatencyStartMillis = SystemClock.elapsedRealtime();
@@ -2196,8 +2201,11 @@
                     for (String databaseName : databaseNames) {
                         String removedPrefix = createPrefix(packageName, databaseName);
                         Map<String, SchemaTypeConfigProto> removedSchemas =
-                                mSchemaMapLocked.remove(removedPrefix);
-                        mVisibilityStoreLocked.removeVisibility(removedSchemas.keySet());
+                                Preconditions.checkNotNull(mSchemaMapLocked.remove(removedPrefix));
+                        if (mVisibilityStoreLocked != null) {
+                            mVisibilityStoreLocked.removeVisibility(removedSchemas.keySet());
+                        }
+
                         mNamespaceMapLocked.remove(removedPrefix);
                     }
                 }
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/GenericDocumentToProtoConverter.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/GenericDocumentToProtoConverter.java
index a139d3b..c6731d1 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/GenericDocumentToProtoConverter.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/GenericDocumentToProtoConverter.java
@@ -184,8 +184,9 @@
                 documentBuilder.setPropertyDocument(name, values);
             } else {
                 // TODO(b/184966497): Optimize by caching PropertyConfigProto
-                setEmptyProperty(name, documentBuilder,
-                        schemaTypeMap.get(prefixedSchemaType));
+                SchemaTypeConfigProto schema =
+                        Preconditions.checkNotNull(schemaTypeMap.get(prefixedSchemaType));
+                setEmptyProperty(name, documentBuilder, schema);
             }
         }
         return documentBuilder.build();
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchResultToProtoConverter.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchResultToProtoConverter.java
index de42623..e985c52 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchResultToProtoConverter.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchResultToProtoConverter.java
@@ -28,6 +28,7 @@
 import androidx.appsearch.app.SearchResult;
 import androidx.appsearch.app.SearchResultPage;
 import androidx.appsearch.exceptions.AppSearchException;
+import androidx.core.util.Preconditions;
 
 import com.google.android.icing.proto.DocumentProto;
 import com.google.android.icing.proto.SchemaTypeConfigProto;
@@ -88,7 +89,8 @@
 
         DocumentProto.Builder documentBuilder = proto.getDocument().toBuilder();
         String prefix = removePrefixesFromDocument(documentBuilder);
-        Map<String, SchemaTypeConfigProto> schemaTypeMap = schemaMap.get(prefix);
+        Map<String, SchemaTypeConfigProto> schemaTypeMap =
+                Preconditions.checkNotNull(schemaMap.get(prefix));
         GenericDocument document =
                 GenericDocumentToProtoConverter.toGenericDocument(documentBuilder, prefix,
                         schemaTypeMap);
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java
index 537fd81..e3be791 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java
@@ -95,7 +95,7 @@
      */
     @NonNull
     String[] getPackageNames() {
-        return getPropertyStringArray(PACKAGE_NAME_PROPERTY);
+        return Preconditions.checkNotNull(getPropertyStringArray(PACKAGE_NAME_PROPERTY));
     }
 
     /**
@@ -105,7 +105,7 @@
      */
     @NonNull
     byte[][] getSha256Certs() {
-        return getPropertyBytesArray(SHA_256_CERT_PROPERTY);
+        return Preconditions.checkNotNull(getPropertyBytesArray(SHA_256_CERT_PROPERTY));
     }
 
     /**
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java
index edff437..bf1b987 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java
@@ -29,6 +29,7 @@
 import androidx.appsearch.localstorage.AppSearchImpl;
 import androidx.appsearch.localstorage.util.PrefixUtil;
 import androidx.collection.ArrayMap;
+import androidx.core.util.Preconditions;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -203,15 +204,19 @@
                     .getPropertyDocumentArray(DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY);
             if (deprecatedPackageDocuments != null) {
                 for (GenericDocument deprecatedPackageDocument : deprecatedPackageDocuments) {
-                    String prefixedSchemaType = deprecatedPackageDocument
-                            .getPropertyString(DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY);
-                    VisibilityDocumentV1.Builder visibilityBuilder = getOrCreateBuilder(
-                            documentBuilderMap, prefixedSchemaType);
-                    visibilityBuilder.addVisibleToPackage(new PackageIdentifier(
+                    String prefixedSchemaType = Preconditions.checkNotNull(
                             deprecatedPackageDocument.getPropertyString(
-                                    DEPRECATED_PACKAGE_NAME_PROPERTY),
+                            DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY));
+                    VisibilityDocumentV1.Builder visibilityBuilder =
+                            getOrCreateBuilder(documentBuilderMap, prefixedSchemaType);
+                    String packageName = Preconditions.checkNotNull(
+                            deprecatedPackageDocument.getPropertyString(
+                                DEPRECATED_PACKAGE_NAME_PROPERTY));
+                    byte[] sha256Cert = Preconditions.checkNotNull(
                             deprecatedPackageDocument.getPropertyBytes(
-                                    DEPRECATED_SHA_256_CERT_PROPERTY)));
+                                DEPRECATED_SHA_256_CERT_PROPERTY));
+                    visibilityBuilder.addVisibleToPackage(
+                            new PackageIdentifier(packageName, sha256Cert));
                 }
             }
         }