1 /* 2 * Copyright 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.room.solver.query.result 18 19 import androidx.room.ext.CommonTypeNames 20 import androidx.room.ext.L 21 import androidx.room.ext.T 22 import androidx.room.ext.typeName 23 import androidx.room.solver.CodeGenScope 24 import com.squareup.javapoet.ParameterizedTypeName 25 26 /** 27 * Wraps a row adapter when there is only 1 item in the result, and the result's outer type is 28 * {@link java.util.Optional}. 29 * 30 * <p>n.b. this will only be useful if the project uses Java 8. 31 */ 32 class OptionalQueryResultAdapter(private val resultAdapter: SingleEntityQueryResultAdapter) 33 : QueryResultAdapter(resultAdapter.rowAdapter) { 34 val type = resultAdapter.rowAdapter?.out convertnull35 override fun convert( 36 outVarName: String, cursorVarName: String, scope: CodeGenScope) { 37 scope.builder().apply { 38 val valueVarName = scope.getTmpVar("_value") 39 resultAdapter.convert(valueVarName, cursorVarName, scope) 40 addStatement( 41 "final $T $L = $T.ofNullable($L)", 42 ParameterizedTypeName.get(CommonTypeNames.OPTIONAL, type?.typeName()), 43 outVarName, 44 CommonTypeNames.OPTIONAL, 45 valueVarName) 46 } 47 } 48 } 49