1 /*
2  * Copyright (C) 2023 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 package com.android.hoststubgen.filters
17 
18 import com.android.hoststubgen.addLists
19 
20 class DefaultHookInjectingFilter(
21     defaultClassLoadHook: String?,
22     defaultMethodCallHook: String?,
23     fallback: OutputFilter
24 ) : DelegatingFilter(fallback) {
25     /**
26      * Create a List containing a single element [e], if e != null. Otherwise, returns
27      * an empty list.
28      */
toSingleListnull29     private fun toSingleList(e: String?): List<String> {
30         if (e == null) {
31             return emptyList()
32         }
33         return listOf(e)
34     }
35 
36     private val defaultClassLoadHookAsList: List<String> = toSingleList(defaultClassLoadHook)
37     private val defaultMethodCallHookAsList: List<String> = toSingleList(defaultMethodCallHook)
38 
getClassLoadHooksnull39     override fun getClassLoadHooks(className: String): List<String> {
40         return addLists(super.getClassLoadHooks(className), defaultClassLoadHookAsList)
41     }
42 
getMethodCallHooksnull43     override fun getMethodCallHooks(
44         className: String,
45         methodName: String,
46         descriptor: String
47     ): List<String> {
48         return addLists(
49             super.getMethodCallHooks(className, methodName, descriptor),
50             defaultMethodCallHookAsList,
51             )
52     }
53 }