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));
}
}
}