Conversion of related Suggestion.java files in AOSP QuickSearchBox App to Kotlin

Converted several related Suggestion files to Kotlin. All warnings were resolved, -Werror flag turned on, and code was built successfully against Kotlin 1.7. Converted files were formatted using ktfmt and imports were optimized. On conversion, many variables and return types were made nullable to maintain logic implemented in Java code.

Bug: 239665416

Test: manual testing with bramble device, unit tests ran with atest QuickSearchBoxTests with result:
Summary (Test executed with 1 devices.)
-------
arm64-v8a QuickSearchBoxTests: Passed: 50, Failed: 0, Ignored: 0, Assumption Failed: 0,

All tests passed!

Change-Id: Iea43c949f963ce45f5d79a4ca6fd32b02681e31e
diff --git a/Android.bp b/Android.bp
index 9e2d905..f671f31 100644
--- a/Android.bp
+++ b/Android.bp
@@ -33,16 +33,21 @@
       "src/**/quicksearchbox/google/GoogleSuggestClient.java",
       "src/**/quicksearchbox/google/GoogleSuggestionProvider.java",
       "src/**/quicksearchbox/google/SearchBaseUrlHelper.java",
-      "src/**/quicksearchbox/Suggestion.java",
-      "src/**/quicksearchbox/SuggestionCursor.java",
-      "src/**/quicksearchbox/SuggestionCursorProvider.java",
-      "src/**/quicksearchbox/Source.java",
-      "src/**/quicksearchbox/SourceResult.java",
-      "src/**/quicksearchbox/AbstractSource.java",
       "src/**/quicksearchbox/AbstractInternalSource.java",
+      "src/**/quicksearchbox/AbstractSource.java",
       "src/**/quicksearchbox/AbstractSuggestionCursorWrapper.java",
       "src/**/quicksearchbox/AbstractSuggestionExtras.java",
       "src/**/quicksearchbox/AbstractSuggestionWrapper.java",
+      "src/**/quicksearchbox/CursorBackedSuggestionExtras.java",
+      "src/**/quicksearchbox/Source.java",
+      "src/**/quicksearchbox/SourceResult.java",
+      "src/**/quicksearchbox/Suggestion.java",
+      "src/**/quicksearchbox/SuggestionCursor.java",
+      "src/**/quicksearchbox/SuggestionCursorProvider.java",
+      "src/**/quicksearchbox/SuggestionCursorBackedCursor.java",
+      "src/**/quicksearchbox/SuggestionCursorWrapper.java",
+      "src/**/quicksearchbox/SuggestionData.java",
+      "src/**/quicksearchbox/SuggestionExtras.java",
     ],
     static_libs: [
             "guava",
@@ -55,6 +60,8 @@
     optimize: {
         proguard_flags_files: ["proguard.flags"],
     },
+
+    kotlincflags: ["-Werror"],
 }
 
 android_app {
diff --git a/src/com/android/quicksearchbox/AbstractSuggestionExtras.kt b/src/com/android/quicksearchbox/AbstractSuggestionExtras.kt
index 3ee8acc..93d0cc7 100644
--- a/src/com/android/quicksearchbox/AbstractSuggestionExtras.kt
+++ b/src/com/android/quicksearchbox/AbstractSuggestionExtras.kt
@@ -16,26 +16,26 @@
 package com.android.quicksearchbox
 
 import org.json.JSONException
-
-import kotlin.collections.Collection
-import java.util.HashSet
+import kotlin.collections.HashSet
 
 /**
  * Abstract SuggestionExtras supporting flattening to JSON.
  */
 abstract class AbstractSuggestionExtras protected constructor(private val mMore: SuggestionExtras?) :
     SuggestionExtras {
-    override fun getExtraColumnNames(): Collection<String> {
-        val columns: HashSet<String> = HashSet<String>()
-        columns.addAll(doGetExtraColumnNames())
-        if (mMore != null) {
-            columns.addAll(mMore.extraColumnNames)
+    @get:Override
+    override val extraColumnNames: Collection<String>
+        get() {
+            val columns: HashSet<String> = HashSet<String>()
+            columns.addAll(doGetExtraColumnNames())
+            if (mMore != null) {
+                columns.addAll(mMore.extraColumnNames)
+            }
+            return columns
         }
-        return columns
-    }
 
     protected abstract fun doGetExtraColumnNames(): Collection<String>
-    override fun getExtra(columnName: String): String {
+    override fun getExtra(columnName: String?): String? {
         var extra = doGetExtra(columnName)
         if (extra == null && mMore != null) {
             extra = mMore.getExtra(columnName)
@@ -43,7 +43,7 @@
         return extra
     }
 
-    protected abstract fun doGetExtra(columnName: String): String
+    protected abstract fun doGetExtra(columnName: String?): String?
 
     @Throws(JSONException::class)
     override fun toJsonString(): String? {
diff --git a/src/com/android/quicksearchbox/CursorBackedSuggestionExtras.kt b/src/com/android/quicksearchbox/CursorBackedSuggestionExtras.kt
index 121ea6c..47b3558 100644
--- a/src/com/android/quicksearchbox/CursorBackedSuggestionExtras.kt
+++ b/src/com/android/quicksearchbox/CursorBackedSuggestionExtras.kt
@@ -17,16 +17,15 @@
 
 import android.database.Cursor
 import android.util.Log
-import java.util.ArrayList
-import java.util.Arrays
-import java.util.HashSet
-import java.util.List
+import kotlin.collections.ArrayList
+import kotlin.collections.HashSet
+import kotlin.Array
 
 /**
  * SuggestionExtras taking values from the extra columns in a suggestion cursor.
  */
 class CursorBackedSuggestionExtras private constructor(
-    cursor: Cursor,
+    cursor: Cursor?,
     position: Int,
     extraColumns: List<String>
 ) : AbstractSuggestionExtras(null) {
@@ -35,7 +34,7 @@
         private val DEFAULT_COLUMNS: HashSet<String> = HashSet<String>()
         @JvmStatic
         fun createExtrasIfNecessary(cursor: Cursor?, position: Int): CursorBackedSuggestionExtras? {
-            val extraColumns: List<String> =
+            val extraColumns: List<String>? =
                 CursorBackedSuggestionExtras.Companion.getExtraColumns(cursor)
             return if (extraColumns != null) {
                 CursorBackedSuggestionExtras(cursor, position, extraColumns)
@@ -45,9 +44,9 @@
         }
 
         @JvmStatic
-        fun getCursorColumns(cursor: Cursor): Array<String>? {
+        fun getCursorColumns(cursor: Cursor?): Array<String>? {
             return try {
-                cursor.getColumnNames()
+                cursor?.getColumnNames()
             } catch (ex: RuntimeException) {
                 // all operations on cross-process cursors can throw random exceptions
                 Log.e(CursorBackedSuggestionExtras.Companion.TAG, "getColumnNames() failed, ", ex)
@@ -56,11 +55,13 @@
         }
 
         fun cursorContainsExtras(cursor: Cursor?): Boolean {
-            val columns: Array<String> =
+            val columns: Array<String>? =
                 CursorBackedSuggestionExtras.Companion.getCursorColumns(cursor)
-            for (cursorColumn in columns) {
-                if (!CursorBackedSuggestionExtras.Companion.DEFAULT_COLUMNS.contains(cursorColumn)) {
-                    return true
+            if (columns != null) {
+                for (cursorColumn in columns) {
+                    if (!CursorBackedSuggestionExtras.Companion.DEFAULT_COLUMNS.contains(cursorColumn)) {
+                        return true
+                    }
                 }
             }
             return false
@@ -71,11 +72,11 @@
             val columns: Array<String> =
                 CursorBackedSuggestionExtras.Companion.getCursorColumns(cursor)
                     ?: return null
-            var extraColumns: List<String>? = null
+            var extraColumns: ArrayList<String>? = null
             for (cursorColumn in columns) {
                 if (!CursorBackedSuggestionExtras.Companion.DEFAULT_COLUMNS.contains(cursorColumn)) {
                     if (extraColumns == null) {
-                        extraColumns = ArrayList<String>()
+                        extraColumns = arrayListOf<String>()
                     }
                     extraColumns.add(cursorColumn)
                 }
@@ -85,21 +86,19 @@
 
         init {
             CursorBackedSuggestionExtras.Companion.DEFAULT_COLUMNS.addAll(
-                Arrays.asList(
-                    SuggestionCursorBackedCursor.COLUMNS
-                )
+                SuggestionCursorBackedCursor.COLUMNS.asList()
             )
         }
     }
 
-    private val mCursor: Cursor
+    private val mCursor: Cursor?
     private val mCursorPosition: Int
     private val mExtraColumns: List<String>
     @Override
-    override fun doGetExtra(columnName: String): String {
+    override fun doGetExtra(columnName: String?): String? {
         return try {
-            mCursor.moveToPosition(mCursorPosition)
-            val columnIdx: Int = mCursor.getColumnIndex(columnName)
+            mCursor?.moveToPosition(mCursorPosition)
+            val columnIdx: Int = mCursor!!.getColumnIndex(columnName)
             if (columnIdx < 0) null else mCursor.getString(columnIdx)
         } catch (ex: RuntimeException) {
             // all operations on cross-process cursors can throw random exceptions
diff --git a/src/com/android/quicksearchbox/SuggestionCursor.kt b/src/com/android/quicksearchbox/SuggestionCursor.kt
index 13ceb93..29ca995 100644
--- a/src/com/android/quicksearchbox/SuggestionCursor.kt
+++ b/src/com/android/quicksearchbox/SuggestionCursor.kt
@@ -79,5 +79,5 @@
     /**
      * Return the extra columns present in this cursor, or null if none exist.
      */
-    val extraColumns: Collection<String?>?
+    val extraColumns: Collection<String>?
 }
\ No newline at end of file
diff --git a/src/com/android/quicksearchbox/SuggestionCursorBackedCursor.kt b/src/com/android/quicksearchbox/SuggestionCursorBackedCursor.kt
index c498aa8..af1279d 100644
--- a/src/com/android/quicksearchbox/SuggestionCursorBackedCursor.kt
+++ b/src/com/android/quicksearchbox/SuggestionCursorBackedCursor.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -18,62 +18,58 @@
 import android.app.SearchManager
 import android.database.AbstractCursor
 import android.database.CursorIndexOutOfBoundsException
-import java.util.ArrayList
-import java.util.Arrays
+import kotlin.collections.ArrayList
 
-class SuggestionCursorBackedCursor(private val mCursor: SuggestionCursor) :
+class SuggestionCursorBackedCursor(private val mCursor: SuggestionCursor?) :
     AbstractCursor() {
     private var mExtraColumns: ArrayList<String>? = null
+
     @Override
-    fun close() {
+    override fun close() {
         super.close()
-        mCursor.close()
+        mCursor?.close()
     }
 
-    @get:Override
-    val columnNames: Array<String>
-        get() {
-            val extraColumns: Collection<String> = mCursor.getExtraColumns()
-            return if (extraColumns != null) {
-                val allColumns: ArrayList<String> = ArrayList<String>(
-                    COLUMNS.size +
-                            extraColumns.size()
-                )
-                mExtraColumns = ArrayList<String>(extraColumns)
-                allColumns.addAll(Arrays.asList(COLUMNS))
-                allColumns.addAll(mExtraColumns)
-                allColumns.toArray(arrayOfNulls<String>(allColumns.size()))
-            } else {
-                COLUMNS
-            }
+    @Override
+    override fun getColumnNames(): Array<String> {
+        val extraColumns: Collection<String>? = mCursor?.extraColumns
+        return if (extraColumns != null) {
+            val allColumns: ArrayList<String> = ArrayList<String>(
+                COLUMNS.size +
+                        extraColumns.size
+            )
+            mExtraColumns = ArrayList<String>(extraColumns)
+            allColumns.addAll(COLUMNS.asList())
+            mExtraColumns?.let { allColumns.addAll(it) }
+            allColumns.toArray(arrayOfNulls<String>(allColumns.size))
+        } else {
+            COLUMNS
         }
+    }
 
-    @get:Override
-    val count: Int
-        get() = mCursor.getCount()
+    @Override
+    override fun getCount(): Int {
+        return mCursor!!.count
+    }
 
-    private fun get(): Suggestion {
-        mCursor.moveTo(getPosition())
+    private fun get(): SuggestionCursor? {
+        mCursor?.moveTo(position)
         return mCursor
     }
 
     private fun getExtra(columnIdx: Int): String? {
         val extraColumn = columnIdx - COLUMNS.size
-        val extras: SuggestionExtras = get().getExtras()
-        return if (extras != null) {
-            extras.getExtra(mExtraColumns.get(extraColumn))
-        } else {
-            null
-        }
+        val extras: SuggestionExtras? = get()?.extras
+        return extras?.getExtra(mExtraColumns!!.get(extraColumn))
     }
 
     @Override
-    fun getInt(column: Int): Int {
+    override fun getInt(column: Int): Int {
         return if (column == COLUMN_INDEX_ID) {
-            getPosition()
+            position
         } else {
             try {
-                Integer.valueOf(getString(column))
+                getString(column)!!.toInt()
             } catch (e: NumberFormatException) {
                 0
             }
@@ -81,22 +77,22 @@
     }
 
     @Override
-    fun getString(column: Int): String? {
+    override fun getString(column: Int): String? {
         return if (column < COLUMNS.size) {
             when (column) {
-                COLUMN_INDEX_ID -> String.valueOf(getPosition())
-                COLUMN_INDEX_TEXT1 -> get().getSuggestionText1()
-                COLUMN_INDEX_TEXT2 -> get().getSuggestionText2()
-                COLUMN_INDEX_TEXT2_URL -> get().getSuggestionText2Url()
-                COLUMN_INDEX_ICON1 -> get().getSuggestionIcon1()
-                COLUMN_INDEX_ICON2 -> get().getSuggestionIcon2()
-                COLUMN_INDEX_INTENT_ACTION -> get().getSuggestionIntentAction()
-                COLUMN_INDEX_INTENT_DATA -> get().getSuggestionIntentDataString()
-                COLUMN_INDEX_INTENT_EXTRA_DATA -> get().getSuggestionIntentExtraData()
-                COLUMN_INDEX_QUERY -> get().getSuggestionQuery()
-                COLUMN_INDEX_FORMAT -> get().getSuggestionFormat()
-                COLUMN_INDEX_SHORTCUT_ID -> get().getShortcutId()
-                COLUMN_INDEX_SPINNER_WHILE_REFRESHING -> String.valueOf(get().isSpinnerWhileRefreshing())
+                COLUMN_INDEX_ID -> position.toString()
+                COLUMN_INDEX_TEXT1 -> get()?.suggestionText1
+                COLUMN_INDEX_TEXT2 -> get()?.suggestionText2
+                COLUMN_INDEX_TEXT2_URL -> get()?.suggestionText2Url
+                COLUMN_INDEX_ICON1 -> get()?.suggestionIcon1
+                COLUMN_INDEX_ICON2 -> get()?.suggestionIcon2
+                COLUMN_INDEX_INTENT_ACTION -> get()?.suggestionIntentAction
+                COLUMN_INDEX_INTENT_DATA -> get()?.suggestionIntentDataString
+                COLUMN_INDEX_INTENT_EXTRA_DATA -> get()?.suggestionIntentExtraData
+                COLUMN_INDEX_QUERY -> get()?.suggestionQuery
+                COLUMN_INDEX_FORMAT -> get()?.suggestionFormat
+                COLUMN_INDEX_SHORTCUT_ID -> get()?.shortcutId
+                COLUMN_INDEX_SPINNER_WHILE_REFRESHING -> get()?.isSpinnerWhileRefreshing.toString()
                 else -> throw CursorIndexOutOfBoundsException(
                     "Requested column " + column
                             + " of " + COLUMNS.size
@@ -108,43 +104,43 @@
     }
 
     @Override
-    fun getLong(column: Int): Long {
+    override fun getLong(column: Int): Long {
         return try {
-            Long.valueOf(getString(column))
+            getString(column)!!.toLong()
         } catch (e: NumberFormatException) {
             0
         }
     }
 
     @Override
-    fun isNull(column: Int): Boolean {
+    override fun isNull(column: Int): Boolean {
         return getString(column) == null
     }
 
     @Override
-    fun getShort(column: Int): Short {
+    override fun getShort(column: Int): Short {
         return try {
-            Short.valueOf(getString(column))
+            getString(column)!!.toShort()
         } catch (e: NumberFormatException) {
             0
         }
     }
 
     @Override
-    fun getDouble(column: Int): Double {
+    override fun getDouble(column: Int): Double {
         return try {
-            Double.valueOf(getString(column))
+            getString(column)!!.toDouble()
         } catch (e: NumberFormatException) {
-            0
+            0.0
         }
     }
 
     @Override
-    fun getFloat(column: Int): Float {
+    override fun getFloat(column: Int): Float {
         return try {
-            Float.valueOf(getString(column))
+            getString(column)!!.toFloat()
         } catch (e: NumberFormatException) {
-            0
+            0.0F
         }
     }
 
diff --git a/src/com/android/quicksearchbox/SuggestionCursorWrapper.kt b/src/com/android/quicksearchbox/SuggestionCursorWrapper.kt
index df0003e..58b0466 100644
--- a/src/com/android/quicksearchbox/SuggestionCursorWrapper.kt
+++ b/src/com/android/quicksearchbox/SuggestionCursorWrapper.kt
@@ -20,7 +20,7 @@
 /**
  * A suggestion cursor that delegates all methods to another SuggestionCursor.
  */
-open class SuggestionCursorWrapper(userQuery: String?, private val mCursor: SuggestionCursor) :
+open class SuggestionCursorWrapper(userQuery: String?, private val mCursor: SuggestionCursor?) :
     AbstractSuggestionCursorWrapper(userQuery!!) {
     override fun close() {
         if (mCursor != null) {
@@ -29,9 +29,9 @@
     }
 
     override val count: Int
-        get() = if (mCursor == null) 0 else mCursor.getCount()
+        get() = if (mCursor == null) 0 else mCursor.count
     override val position: Int
-        get() = if (mCursor == null) 0 else mCursor.getPosition()
+        get() = if (mCursor == null) 0 else mCursor.position
 
     override fun moveTo(pos: Int) {
         if (mCursor != null) {
@@ -43,13 +43,13 @@
         return mCursor?.moveToNext() ?: false
     }
 
-    override fun registerDataSetObserver(observer: DataSetObserver) {
+    override fun registerDataSetObserver(observer: DataSetObserver?) {
         if (mCursor != null) {
             mCursor.registerDataSetObserver(observer)
         }
     }
 
-    override fun unregisterDataSetObserver(observer: DataSetObserver) {
+    override fun unregisterDataSetObserver(observer: DataSetObserver?) {
         if (mCursor != null) {
             mCursor.unregisterDataSetObserver(observer)
         }
@@ -57,10 +57,10 @@
 
     @Override
     override fun current(): SuggestionCursor {
-        return mCursor
+        return mCursor!!
     }
 
-    override val extraColumns: Collection<String>
-        get() = mCursor.getExtraColumns()
+    override val extraColumns: Collection<String>?
+        get() = mCursor?.extraColumns
 
 }
\ No newline at end of file
diff --git a/src/com/android/quicksearchbox/SuggestionData.kt b/src/com/android/quicksearchbox/SuggestionData.kt
index 0408b68..bc9b5f2 100644
--- a/src/com/android/quicksearchbox/SuggestionData.kt
+++ b/src/com/android/quicksearchbox/SuggestionData.kt
@@ -23,7 +23,7 @@
  * Holds data for each suggest item including the display data and how to launch the result.
  * Used for passing from the provider to the suggest cursor.
  */
-class SuggestionData(override val suggestionSource: Source) : Suggestion {
+class SuggestionData(override val suggestionSource: Source?) : Suggestion {
     private var mFormat: String? = null
     private var mText1: String? = null
     private var mText2: String? = null
@@ -58,10 +58,10 @@
         get() = mIcon2!!
     override val shortcutId: String
         get() = mShortcutId!!
-    override val suggestionIntentAction: String
-        get() = if (mIntentAction != null) mIntentAction else suggestionSource.getDefaultIntentAction()
-    override val suggestionIntentComponent: ComponentName
-        get() = suggestionSource.getIntentComponent()
+    override val suggestionIntentAction: String?
+        get() = mIntentAction ?: suggestionSource?.defaultIntentAction
+    override val suggestionIntentComponent: ComponentName?
+        get() = suggestionSource?.intentComponent
     override val suggestionIntentDataString: String
         get() = mIntentData!!
     override val suggestionIntentExtraData: String
@@ -184,48 +184,48 @@
     }
 
     @Override
-    override fun equals(obj: Object?): Boolean {
-        if (this === obj) return true
-        if (obj == null) return false
-        if (getClass() !== obj.getClass()) return false
-        val other = obj as SuggestionData
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other == null) return false
+        if (this::class !== other::class) return false
+        val suggestionData = other as SuggestionData
         if (mFormat == null) {
-            if (other.mFormat != null) return false
-        } else if (!mFormat.equals(other.mFormat)) return false
+            if (suggestionData.mFormat != null) return false
+        } else if (!mFormat.equals(suggestionData.mFormat)) return false
         if (mIcon1 == null) {
-            if (other.mIcon1 != null) return false
-        } else if (!mIcon1.equals(other.mIcon1)) return false
+            if (suggestionData.mIcon1 != null) return false
+        } else if (!mIcon1.equals(suggestionData.mIcon1)) return false
         if (mIcon2 == null) {
-            if (other.mIcon2 != null) return false
-        } else if (!mIcon2.equals(other.mIcon2)) return false
+            if (suggestionData.mIcon2 != null) return false
+        } else if (!mIcon2.equals(suggestionData.mIcon2)) return false
         if (mIntentAction == null) {
-            if (other.mIntentAction != null) return false
-        } else if (!mIntentAction.equals(other.mIntentAction)) return false
+            if (suggestionData.mIntentAction != null) return false
+        } else if (!mIntentAction.equals(suggestionData.mIntentAction)) return false
         if (mIntentData == null) {
-            if (other.mIntentData != null) return false
-        } else if (!mIntentData.equals(other.mIntentData)) return false
+            if (suggestionData.mIntentData != null) return false
+        } else if (!mIntentData.equals(suggestionData.mIntentData)) return false
         if (intentExtraData == null) {
-            if (other.intentExtraData != null) return false
-        } else if (!intentExtraData.equals(other.intentExtraData)) return false
+            if (suggestionData.intentExtraData != null) return false
+        } else if (!intentExtraData.equals(suggestionData.intentExtraData)) return false
         if (mLogType == null) {
-            if (other.mLogType != null) return false
-        } else if (!mLogType.equals(other.mLogType)) return false
+            if (suggestionData.mLogType != null) return false
+        } else if (!mLogType.equals(suggestionData.mLogType)) return false
         if (mShortcutId == null) {
-            if (other.mShortcutId != null) return false
-        } else if (!mShortcutId.equals(other.mShortcutId)) return false
+            if (suggestionData.mShortcutId != null) return false
+        } else if (!mShortcutId.equals(suggestionData.mShortcutId)) return false
         if (suggestionSource == null) {
-            if (other.suggestionSource != null) return false
-        } else if (!suggestionSource.equals(other.suggestionSource)) return false
-        if (isSpinnerWhileRefreshing != other.isSpinnerWhileRefreshing) return false
+            if (suggestionData.suggestionSource != null) return false
+        } else if (!suggestionSource.equals(suggestionData.suggestionSource)) return false
+        if (isSpinnerWhileRefreshing != suggestionData.isSpinnerWhileRefreshing) return false
         if (mSuggestionQuery == null) {
-            if (other.mSuggestionQuery != null) return false
-        } else if (!mSuggestionQuery.equals(other.mSuggestionQuery)) return false
+            if (suggestionData.mSuggestionQuery != null) return false
+        } else if (!mSuggestionQuery.equals(suggestionData.mSuggestionQuery)) return false
         if (mText1 == null) {
-            if (other.mText1 != null) return false
-        } else if (!mText1.equals(other.mText1)) return false
+            if (suggestionData.mText1 != null) return false
+        } else if (!mText1.equals(suggestionData.mText1)) return false
         if (mText2 == null) {
-            if (other.mText2 != null) return false
-        } else if (!mText2.equals(other.mText2)) return false
+            if (suggestionData.mText2 != null) return false
+        } else if (!mText2.equals(suggestionData.mText2)) return false
         return true
     }
 
@@ -236,7 +236,7 @@
     @Override
     override fun toString(): String {
         val builder: StringBuilder = StringBuilder("SuggestionData(")
-        appendField(builder, "source", suggestionSource.getName())
+        appendField(builder, "source", suggestionSource!!.name)
         appendField(builder, "text1", mText1)
         appendField(builder, "intentAction", mIntentAction)
         appendField(builder, "intentData", mIntentData)
diff --git a/src/com/android/quicksearchbox/SuggestionExtras.kt b/src/com/android/quicksearchbox/SuggestionExtras.kt
index 1e8d714..c95edf2 100644
--- a/src/com/android/quicksearchbox/SuggestionExtras.kt
+++ b/src/com/android/quicksearchbox/SuggestionExtras.kt
@@ -24,7 +24,7 @@
     /**
      * Return the names of custom columns present in these extras.
      */
-    val extraColumnNames: Collection<String?>?
+    val extraColumnNames: Collection<String>
 
     /**
      * @param columnName The column to get a value from.
diff --git a/src/com/android/quicksearchbox/google/SearchBaseUrlHelper.kt b/src/com/android/quicksearchbox/google/SearchBaseUrlHelper.kt
index 34871e2..54e7c9a 100644
--- a/src/com/android/quicksearchbox/google/SearchBaseUrlHelper.kt
+++ b/src/com/android/quicksearchbox/google/SearchBaseUrlHelper.kt
@@ -15,21 +15,17 @@
  */
 package com.android.quicksearchbox.google
 
+import android.content.Context
+import android.content.SharedPreferences
+import android.util.Log
 import com.android.quicksearchbox.R
 import com.android.quicksearchbox.SearchSettings
 import com.android.quicksearchbox.SearchSettingsImpl
 import com.android.quicksearchbox.util.HttpHelper
-
-import android.content.Context
-import android.content.SharedPreferences
-import android.text.TextUtils
-import android.util.Log
-
-import java.util.Locale
-
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.async
+import java.util.Locale
 
 
 /**
@@ -85,7 +81,7 @@
      */
     val searchDomain: String?
         get() {
-            var domain: String = mSearchSettings.searchBaseDomain
+            var domain: String? = mSearchSettings.searchBaseDomain
             if (domain == null) {
                 if (SearchBaseUrlHelper.Companion.DBG) {
                     Log.w(