xref: /aosp_15_r20/tools/metalava/metalava-model/src/main/java/com/android/tools/metalava/model/DelegatedVisitor.kt (revision 115816f9299ab6ddd6b9673b81f34e707f6bacab)
1 /*
2  * Copyright (C) 2024 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 com.android.tools.metalava.model
18 
19 /**
20  * A special visitor interface suitable for use with code that traverses a [Codebase] and which
21  * wants to delegate the visiting of the [Item]s to another class.
22  */
23 interface DelegatedVisitor {
24     /**
25      * If `true` then a nested class is visited while visiting the containing class, otherwise
26      * nested classes are visited after visiting the containing class. A class is being visited
27      * between calls to [visitClass] and [afterVisitClass].
28      *
29      * Defaults to `false` simply because most implementations do not need to preserve class
30      * nesting.
31      */
32     val requiresClassNesting: Boolean
33         get() = false
34 
visitCodebasenull35     fun visitCodebase(codebase: Codebase) {}
36 
afterVisitCodebasenull37     fun afterVisitCodebase(codebase: Codebase) {}
38 
visitPackagenull39     fun visitPackage(pkg: PackageItem) {}
40 
afterVisitPackagenull41     fun afterVisitPackage(pkg: PackageItem) {}
42 
visitClassnull43     fun visitClass(cls: ClassItem) {}
44 
afterVisitClassnull45     fun afterVisitClass(cls: ClassItem) {}
46 
visitConstructornull47     fun visitConstructor(constructor: ConstructorItem) {}
48 
visitFieldnull49     fun visitField(field: FieldItem) {}
50 
visitMethodnull51     fun visitMethod(method: MethodItem) {}
52 
visitPropertynull53     fun visitProperty(property: PropertyItem) {}
54 }
55