1 /* 2 * Copyright 2025 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.appfunctions.compiler 18 19 import androidx.appfunctions.compiler.core.ProcessingException 20 21 /** Represents the compiler option for [AppFunctionCompiler] */ 22 class AppFunctionCompilerOptions 23 private constructor( 24 /** Indicates whether aggregation should run or not. */ 25 val aggregateAppFunctions: Boolean, 26 ) { 27 companion object { 28 private const val AGGREGATE_APP_FUNCTIONS_OPTION_KEY = "appfunctions:aggregateAppFunctions" 29 fromnull30 fun from(options: Map<String, String>): AppFunctionCompilerOptions { 31 return AppFunctionCompilerOptions( 32 aggregateAppFunctions = getAggregateAppFunctionsOption(options) 33 ) 34 } 35 getAggregateAppFunctionsOptionnull36 private fun getAggregateAppFunctionsOption(options: Map<String, String>): Boolean { 37 return try { 38 options[AGGREGATE_APP_FUNCTIONS_OPTION_KEY]?.toBooleanStrict() ?: false 39 } catch (e: Exception) { 40 throw ProcessingException( 41 message = 42 "Compiler option appfunctions:aggregateAppFunctions should be either " + 43 "`true` or `false`", 44 symbol = null, 45 throwable = e, 46 ) 47 } 48 } 49 } 50 } 51