# AsmClassVisitorFactory

# AsmClassVisitorFactory

<br />

```
interface AsmClassVisitorFactory<ParametersT : InstrumentationParameters?>
```

<br />

*** ** * ** ***

A factory to create class visitor objects to instrument classes.

The implementation of this interface must be an abstract class where the[parameters](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#parameters())and[instrumentationContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#instrumentationContext())are left unimplemented. The class must have an empty constructor which will be used to construct the factory object.

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                                                                                        ### Public functions                                                                                                                                                                                                                                                                                                                                                                                                                                                        ||
|------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [ClassVisitor](https://asm.ow2.io/javadoc/org/objectweb/asm/ClassVisitor.html)     | [createClassVisitor](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor))`(` ` classContext: `[ClassContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/ClassContext)`?,` ` nextClassVisitor: `[ClassVisitor](https://asm.ow2.io/javadoc/org/objectweb/asm/ClassVisitor.html)`?` `)` Creates a class visitor object that will visit a class with the given[classContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor)). |
| [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [isInstrumentable](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#isInstrumentable(com.android.build.api.instrumentation.ClassData))`(classData: `[ClassData](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/ClassData)`?)` Whether the factory wants to instrument the class with the given[classData](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#isInstrumentable(com.android.build.api.instrumentation.ClassData)).                                                                                                                                                                                                           |

|                                                                                                                                                                                                               ### Public properties                                                                                                                                                                                                                ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [InstrumentationContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/InstrumentationContext) | [instrumentationContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#instrumentationContext()) Contains parameters to help instantiate the visitor objects.                                                     |
| [Property](https://docs.gradle.org/current/javadoc/org/gradle/api/provider/Property.html)`<ParametersT>`                                            | [parameters](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#parameters()) The parameters that will be instantiated, configured using the given config when registering the visitor, and injected on instantiation. |

## Public functions

### createClassVisitor

```
fun createClassVisitor(
    classContext: ClassContext?,
    nextClassVisitor: ClassVisitor?
): ClassVisitor
```

Creates a class visitor object that will visit a class with the given[classContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor)). The returned class visitor must delegate its calls to[nextClassVisitor](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor)). If at this point the factory is not interested in instrumenting the class with given[classContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor)), then return[nextClassVisitor](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor)).

The given[classContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor))contains static information about the classes before starting the instrumentation process. Any changes in interfaces or superclasses for the class with the given[classContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor))or for any other class in its classpath by a previous visitor will not be reflected in the[classContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor))object.

[classContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor))can also be used to get the data for classes that are in the runtime classpath of the class being visited.

This method must handle asynchronous calls.  

|                                                                                                                                                                             Parameters                                                                                                                                                                             ||
|----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `classContext: `[ClassContext](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/ClassContext)`?` | contains information about the class that will be instrumented by the returned class visitor.                                                                                                                  |
| `nextClassVisitor: `[ClassVisitor](https://asm.ow2.io/javadoc/org/objectweb/asm/ClassVisitor.html)`?`                                              | the[ClassVisitor](https://asm.ow2.io/javadoc/org/objectweb/asm/ClassVisitor.html)to which the created[ClassVisitor](https://asm.ow2.io/javadoc/org/objectweb/asm/ClassVisitor.html)must delegate method calls. |

### isInstrumentable

```
fun isInstrumentable(classData: ClassData?): Boolean
```

Whether the factory wants to instrument the class with the given[classData](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#isInstrumentable(com.android.build.api.instrumentation.ClassData)).

If returned true,[createClassVisitor](https://developer.android.com/reference/tools/gradle-api/7.2/com/android/build/api/instrumentation/AsmClassVisitorFactory#createClassVisitor(com.android.build.api.instrumentation.ClassContext,org.objectweb.asm.ClassVisitor))will be called and the returned class visitor will visit the class.

This method must handle asynchronous calls.

## Public properties

### instrumentationContext

```
val instrumentationContext: InstrumentationContext
```

Contains parameters to help instantiate the visitor objects.

This field must be left unimplemented.  

### parameters

```
val parameters: Property<ParametersT>
```

The parameters that will be instantiated, configured using the given config when registering the visitor, and injected on instantiation.

This field must be left unimplemented.