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 }