Class KeepInstanceDetector

  • All Implemented Interfaces:
    com.android.tools.lint.detector.api.Detector.UastScanner , com.android.tools.lint.detector.api.FileScanner , com.android.tools.lint.detector.api.SourceCodeScanner

    
    public final class KeepInstanceDetector
    extends Detector implements Detector.UastScanner
                        

    Flags when a factory/constructor-like call that yields a type with observable or long-lived state is used inline and not kept (stored or returned).

    WRONG: SomeType(config).state.collect { ... } // call on a temporary instance SomeType(config) // created and discarded

    OK: val obj = SomeType(config); obj.state.collect { ... } return SomeType(config)

    Configure one or more interface/class FQNs via lint.xml:

    <issue id="NotKeepingInstance"> <option name="keepInstanceOf" value="com.example.SomeType, io.getstream.video.android.core.StreamClient"/> </issue>

    Matching is by assignability: the call's expression type (or resolved return type) must be the same as or a subtype/implementation of ANY listed FQN.

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
    • Enum Constant Summary

      Enum Constants 
      Enum Constant Description
    • Method Summary

      Modifier and Type Method Description
      List<Class<out UElement>> getApplicableUastTypes()
      UElementHandler createUastHandler(JavaContext context)
      • Methods inherited from class com.android.tools.lint.detector.api.Detector

        afterCheckEachProject, afterCheckFile, afterCheckLibraryProject, afterCheckProject, afterCheckRootProject, analyzeCallGraph, applicableAnnotations, applicableSuperClasses, appliesTo, appliesTo, appliesToResourceRefs, beforeCheckEachProject, beforeCheckFile, beforeCheckLibraryProject, beforeCheckProject, beforeCheckRootProject, checkBinaryResource, checkCall, checkClass, checkClass, checkDslPropertyAssignment, checkDslPropertyAssignment, checkFolder, checkInstruction, checkMergedProject, checkMethodCall, checkMethodCall, checkPartialResults, createPsiVisitor, filterIncident, getApplicableAsmNodeTypes, getApplicableAttributes, getApplicableCallNames, getApplicableCallOwners, getApplicableConstructorTypes, getApplicableElements, getApplicableFiles, getApplicableMethodNames, getApplicablePsiTypes, getApplicableReferenceNames, getCustomVisitor, getSpeed, inheritAnnotation, isApplicableAnnotationUsage, isCallGraphRequired, run, sameMessage, visitAnnotationUsage, visitAnnotationUsage, visitAnnotationUsage, visitAnnotationUsage, visitAttribute, visitBuildScript, visitBuildScript, visitClass, visitClass, visitConstructor, visitConstructor, visitDocument, visitElement, visitElementAfter, visitMethod, visitMethod, visitMethodCall, visitReference, visitReference, visitResourceReference, visitResourceReference
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait