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.UastScannerFlags 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.
-
-
Field Summary
Fields Modifier and Type Field Description public final static IssueISSUEprivate final BooleancustomVisitor
-
Constructor Summary
Constructors Constructor Description KeepInstanceDetector()
-
Method Summary
Modifier and Type Method Description List<Class<out UElement>>getApplicableUastTypes()UElementHandlercreateUastHandler(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
-
-
Method Detail
-
getApplicableUastTypes
List<Class<out UElement>> getApplicableUastTypes()
-
createUastHandler
UElementHandler createUastHandler(JavaContext context)
-
-
-
-