diff --git a/docs/api-guide.html b/docs/api-guide.html index 7bd067e2..187f3cf7 100644 --- a/docs/api-guide.html +++ b/docs/api-guide.html @@ -75,129 +75,157 @@   3.7  IssueRegistry
  3.8  Detector
  3.9  Detector Test
-Publishing a Lint Check
-  4.1  Android
-    4.1.1  AAR Support
-    4.1.2  lintPublish Configuration
-    4.1.3  Local Checks
-    4.1.4  Unpublishing
-Lint Check Unit Testing
-  5.1  Creating a Unit Test
-  5.2  Computing the Expected Output
-  5.3  Test Files
-  5.4  Trimming indents?
-  5.5  Dollars in Raw Strings
-  5.6  Quickfixes
-  5.7  Library Dependencies and Stubs
-  5.8  Binary and Compiled Source Files
-  5.9  Base64-encoded gzipped byte code
-  5.10  My Detector Isn't Invoked From a Test!
-  5.11  Language Level
-Test Modes
-  6.1  How to debug
-  6.2  Handling Intentional Failures
-  6.3  Source-Modifying Test Modes
-    6.3.1  Fully Qualified Names
-    6.3.2  Import Aliasing
-    6.3.3  Type Aliasing
-    6.3.4  Parenthesis Mode
-    6.3.5  Argument Reordering
-    6.3.6  Body Removal
-    6.3.7  If to When Replacement
-    6.3.8  Whitespace Mode
-    6.3.9  CDATA Mode
-    6.3.10  Suppressible Mode
-Adding Quick Fixes
-  7.1  Introduction
-  7.2  The LintFix builder class
-  7.3  Creating a LintFix
-  7.4  Available Fixes
-  7.5  Combining Fixes
-  7.6  Refactoring Java and Kotlin code
-  7.7  Regular Expressions and Back References
-  7.8  Emitting quick fix XML to apply on CI
-Partial Analysis
-  8.1  About
-  8.2  The Problem
-  8.3  Overview
-  8.4  Does My Detector Need Work?
-    8.4.1  Catching Mistakes: Blocking Access to Main Project
-    8.4.2  Catching Mistakes: Simulated App Module
-    8.4.3  Catching Mistakes: Diffing Results
-    8.4.4  Catching Mistakes: Remaining Issues
-  8.5  Incidents
-  8.6  Constraints
-  8.7  Incident LintMaps
-  8.8  Module LintMaps
-  8.9  Optimizations
-Data Flow Analyzer
-  9.1  Usage
-  9.2  Self-referencing Calls
-  9.3  Kotlin Scoping Functions
-  9.4  Limitations
-  9.5  Escaping Values
-    9.5.1  Returns
-    9.5.2  Parameters
-    9.5.3  Fields
-  9.6  Non Local Analysis
-  9.7  Examples
-    9.7.1  Simple Example
-    9.7.2  Complex Example
-  9.8  TargetMethodDataFlowAnalyzer
-10  Annotations
-  10.1  Basics
-  10.2  Annotation Usage Types and isApplicableAnnotationUsage
-    10.2.1  Method Override
-    10.2.2  Method Return
-    10.2.3  Handling Usage Types
-    10.2.4  Usage Types Filtered By Default
-    10.2.5  Scopes
-    10.2.6  Inherited Annotations
-11  Options
-  11.1  Usage
-  11.2  Creating Options
-  11.3  Reading Options
-  11.4  Specific Configurations
-  11.5  Files
-  11.6  Constraints
-  11.7  Testing Options
-  11.8  Supporting Lint 4.2, 7.0 and 7.1
-12  Error Message Conventions
-  12.1  Length
-  12.2  Formatting
-  12.3  Punctuation
-  12.4  Include Details
-  12.5  Reference Android By Number
-  12.6  Keep Messages Stable
-  12.7  Plurals
-  12.8  Examples
-13  Frequently Asked Questions
-    13.0.1  My detector callbacks aren't invoked
-    13.0.2  My lint check works from the unit test but not in the IDE
-    13.0.3  visitAnnotationUsage isn't called for annotations
-    13.0.4  How do I check if a UAST or PSI element is for Java or Kotlin?
-    13.0.5  What if I need a PsiElement and I have a UElement ?
-    13.0.6  How do I get the UMethod for a PsiMethod ?
-    13.0.7  How do get a JavaEvaluator ?
-    13.0.8  How do I check whether an element is internal?
-    13.0.9  Is element inline, sealed, operator, infix, suspend, data?
-    13.0.10  How do I look up a class if I have its fully qualified name?
-    13.0.11  How do I look up a class if I have a PsiType?
-    13.0.12  How do I look up hierarhcy annotations for an element?
-    13.0.13  How do I look up if a class is a subclass of another?
-    13.0.14  How do I know which parameter a call argument corresponds to?
-    13.0.15  How can my lint checks target two different versions of lint?
-    13.0.16  Can I make my lint check “not suppressible?”
-    13.0.17  Why are overloaded operators not handled?
-    13.0.18  How do I check out the current lint source code?
-    13.0.19  Where do I find examples of lint checks?
-14  Appendix: Recent Changes
-15  Appendix: Environment Variables and System Properties
-  15.1  Environment Variables
-    15.1.1  Detector Configuration Variables
-    15.1.2  Lint Configuration Variables
-    15.1.3  Lint Development Variables
-  15.2  System Properties
+AST Analysis
+  4.1  AST Analysis
+  4.2  UAST
+  4.3  UAST: The Java View
+  4.4  Expressions
+  4.5  UElement
+  4.6  Visiting
+  4.7  UElement to PSI Mapping
+  4.8  PSI to UElement
+  4.9  UAST versus PSI
+  4.10  Kotlin Analysis API
+    4.10.1  Nothing Type?
+    4.10.2  Compiled Metadata
+    4.10.3  Configuring lint to use K2
+  4.11  Recipes
+    4.11.1  Resolve a function call
+    4.11.2  Resolve a variable reference
+    4.11.3  Get the containing class of a symbol
+    4.11.4  Get the fully qualified name of a class
+    4.11.5  Look up the deprecation status of a symbol
+    4.11.6  Look up visibility
+    4.11.7  Get the KtType of a class symbol
+    4.11.8  Resolve a KtType into a class
+    4.11.9  See if two types refer to the same raw class (erasure):
+    4.11.10  For an extension method, get the receiver type:
+    4.11.11  Get the PsiFile containing a symbol declaration
+Publishing a Lint Check
+  5.1  Android
+    5.1.1  AAR Support
+    5.1.2  lintPublish Configuration
+    5.1.3  Local Checks
+    5.1.4  Unpublishing
+Lint Check Unit Testing
+  6.1  Creating a Unit Test
+  6.2  Computing the Expected Output
+  6.3  Test Files
+  6.4  Trimming indents?
+  6.5  Dollars in Raw Strings
+  6.6  Quickfixes
+  6.7  Library Dependencies and Stubs
+  6.8  Binary and Compiled Source Files
+  6.9  Base64-encoded gzipped byte code
+  6.10  My Detector Isn't Invoked From a Test!
+  6.11  Language Level
+Test Modes
+  7.1  How to debug
+  7.2  Handling Intentional Failures
+  7.3  Source-Modifying Test Modes
+    7.3.1  Fully Qualified Names
+    7.3.2  Import Aliasing
+    7.3.3  Type Aliasing
+    7.3.4  Parenthesis Mode
+    7.3.5  Argument Reordering
+    7.3.6  Body Removal
+    7.3.7  If to When Replacement
+    7.3.8  Whitespace Mode
+    7.3.9  CDATA Mode
+    7.3.10  Suppressible Mode
+    7.3.11  @JvmOverloads Test Mode
+Adding Quick Fixes
+  8.1  Introduction
+  8.2  The LintFix builder class
+  8.3  Creating a LintFix
+  8.4  Available Fixes
+  8.5  Combining Fixes
+  8.6  Refactoring Java and Kotlin code
+  8.7  Regular Expressions and Back References
+  8.8  Emitting quick fix XML to apply on CI
+Partial Analysis
+  9.1  About
+  9.2  The Problem
+  9.3  Overview
+  9.4  Does My Detector Need Work?
+    9.4.1  Catching Mistakes: Blocking Access to Main Project
+    9.4.2  Catching Mistakes: Simulated App Module
+    9.4.3  Catching Mistakes: Diffing Results
+    9.4.4  Catching Mistakes: Remaining Issues
+  9.5  Incidents
+  9.6  Constraints
+  9.7  Incident LintMaps
+  9.8  Module LintMaps
+  9.9  Optimizations
+10  Data Flow Analyzer
+  10.1  Usage
+  10.2  Self-referencing Calls
+  10.3  Kotlin Scoping Functions
+  10.4  Limitations
+  10.5  Escaping Values
+    10.5.1  Returns
+    10.5.2  Parameters
+    10.5.3  Fields
+  10.6  Non Local Analysis
+  10.7  Examples
+    10.7.1  Simple Example
+    10.7.2  Complex Example
+  10.8  TargetMethodDataFlowAnalyzer
+11  Annotations
+  11.1  Basics
+  11.2  Annotation Usage Types and isApplicableAnnotationUsage
+    11.2.1  Method Override
+    11.2.2  Method Return
+    11.2.3  Handling Usage Types
+    11.2.4  Usage Types Filtered By Default
+    11.2.5  Scopes
+    11.2.6  Inherited Annotations
+12  Options
+  12.1  Usage
+  12.2  Creating Options
+  12.3  Reading Options
+  12.4  Specific Configurations
+  12.5  Files
+  12.6  Constraints
+  12.7  Testing Options
+  12.8  Supporting Lint 4.2, 7.0 and 7.1
+13  Error Message Conventions
+  13.1  Length
+  13.2  Formatting
+  13.3  Punctuation
+  13.4  Include Details
+  13.5  Reference Android By Number
+  13.6  Keep Messages Stable
+  13.7  Plurals
+  13.8  Examples
+14  Frequently Asked Questions
+    14.0.1  My detector callbacks aren't invoked
+    14.0.2  My lint check works from the unit test but not in the IDE
+    14.0.3  visitAnnotationUsage isn't called for annotations
+    14.0.4  How do I check if a UAST or PSI element is for Java or Kotlin?
+    14.0.5  What if I need a PsiElement and I have a UElement ?
+    14.0.6  How do I get the UMethod for a PsiMethod ?
+    14.0.7  How do get a JavaEvaluator?
+    14.0.8  How do I check whether an element is internal?
+    14.0.9  Is element inline, sealed, operator, infix, suspend, data?
+    14.0.10  How do I look up a class if I have its fully qualified name?
+    14.0.11  How do I look up a class if I have a PsiType?
+    14.0.12  How do I look up hierarchy annotations for an element?
+    14.0.13  How do I look up if a class is a subclass of another?
+    14.0.14  How do I know which parameter a call argument corresponds to?
+    14.0.15  How can my lint checks target two different versions of lint?
+    14.0.16  Can I make my lint check “not suppressible?”
+    14.0.17  Why are overloaded operators not handled?
+    14.0.18  How do I check out the current lint source code?
+    14.0.19  Where do I find examples of lint checks?
+    14.0.20  How do I analyze details about Kotlin?
+15  Appendix: Recent Changes
+16  Appendix: Environment Variables and System Properties
+  16.1  Environment Variables
+    16.1.1  Detector Configuration Variables
+    16.1.2  Lint Configuration Variables
+    16.1.3  Lint Development Variables
+  16.2  System Properties

   

Terminology

@@ -212,14 +240,14 @@

Configuration

A configuration provides extra information or parameters to lint on a - per project, or even per directory basis. For example, the lint.xml + per-project, or even per-directory, basis. For example, the lint.xml files can change the severity for issues, or list incidents to ignore (matched for example by a regular expression), or even provide values for options read by a specific detector.

Context

An object passed into detectors in many APIs, providing data about (for example) which file is being analyzed (and in which project), - and for specific types of analysis additional information; for + and (for specific types of analysis) additional information; for example, an XmlContext points to the DOM document, a JavaContext includes the AST, and so on. @@ -290,7 +318,7 @@

Typically lint cares about which set of scopes apply, - so most of the APIs take an EnumSet< Scope>, but we'll often + so most of the APIs take an EnumSet<Scope>, but we'll often refer to this as just “the scope” instead of the “scope set”.

Severity

For an issue, whether the incident should be an error, or just a @@ -511,7 +539,7 @@

The name Scope.JAVA_FILE may make it sound like there should also be a Scope.KOTLIN_FILE. However, JAVA_FILE here really refers to both Java and Kotlin files since the analysis and APIs are identical - for both (using “UAST”, a universal abstract syntax tree). However, + for both (using “UAST”, a unified abstract syntax tree). However, at this point we don't want to rename it since it would break a lot of existing checks. We might introduce an alias and deprecate this one in the future.
@@ -530,15 +558,15 @@ Many detector methods will pass in a Context, or a more specific subclass of Context such as JavaContext or XmlContext. This -allows lint to provide access to the detectors information they may -need, without passing in a lot of parameters (and allowing lint to add -additional data over time without breaking signatures). +allows lint to give the detectors information they may need, without +passing in a lot of parameters. It also allows lint to add additional data +over time without breaking signatures.

The Context classes also provide many convenience APIs. For example, for XmlContext there are methods for creating locations for XML tags, -XML attributes, just the name part of an XML attribute and just the +XML attributes, just the name part of an XML attribute, and just the value part of an XML attribute. For a JavaContext there are also methods for creating locations, such as for a method call, including whether to include the receiver and/or the argument list. @@ -576,7 +604,7 @@

lint()
   .files(...)
@@ -640,8 +667,8 @@
 
 And much, much, more. However, most of the implementation of
 LintClient is intended for integration of lint itself, and as a check
-author you don't need to worry about it. It's the detector API that
-matters, and is also less likely to change than the client API.
+author you don't need to worry about it. The detector API will matter
+more, and it's also less likely to change than the client API.
 
 

@@ -661,8 +688,8 @@ for internal lint usage have been made public such that lint's code in one package can access it from the other. There's normally a comment explaining that this is for internal use only, but be aware - that just because something is public or not final it's a good - idea to call or override it. + that even when something is public or not final, it might not be a + good idea to call or override it.

   

Creating an Issue

@@ -676,7 +703,7 @@

Issue is a final class, so unlike Detector, you don't subclass -it, you instantiate it via Issue.create. +it; you instantiate it via Issue.create.

@@ -755,7 +782,7 @@ they'll configure and/or suppress issues. For example, to suppress the warning in the current method, use -

@Suppress("SdCardPath")

+

@Suppress("SdCardPath")

(or in Java, @SuppressWarnings). Note that there is an IDE quickfix to suppress an incident which will automatically add these annotations, so @@ -1106,20 +1133,20 @@

  • When implementing SourceCodeScanner, in Kotlin and Java files you can be called back
      -
    • When a method of a given name is invoked (getApplicableMethodNames +
    • when a method of a given name is invoked (getApplicableMethodNames and visitMethodCall)
    • -
    • When a class of the given type is instantiated +
    • when a class of the given type is instantiated (getApplicableConstructorTypes and visitConstructor)
    • -
    • When a new class is declared which extends (possibly indirectly) +
    • when a new class is declared which extends (possibly indirectly) a given class or interface (applicableSuperClasses and visitClass)
    • -
    • When annotated elements are referenced or combined +
    • when annotated elements are referenced or combined (applicableAnnotations and visitAnnotationUsage)
    • -
    • When any AST nodes of given types appear (getApplicableUastTypes +
    • when any AST nodes of given types appear (getApplicableUastTypes and createUastHandler)

      @@ -1135,7 +1162,7 @@ (getApplicableAsmNodeTypes and checkInstruction)

    • like with XmlScanner's visitDocument, you can perform your own - ASM bytecode iteration via checkClass. + ASM bytecode iteration via checkClass

      @@ -1172,9 +1199,9 @@

      -There are some callbacks both before each individual file is analyzed -(beforeCheckFile and afterCheckFile), as well as before and after -analysis of all the modules (beforeCheckRootProject and +There are some callbacks both before and after each individual file is +analyzed (beforeCheckFile and afterCheckFile), as well as before and +after analysis of all the modules (beforeCheckRootProject and afterCheckRootProject).

      @@ -1303,8 +1330,7 @@

    • Finally, there are a number of utility methods; for example there is - an editDistance method used to find likely typos used by a number - of checks.
    + an editDistance method used to find likely typos.
  •    

    Scanner Example

    @@ -1345,7 +1371,7 @@ } }

    -The second, older form, may seem simpler, but the new API allows a lot +The second (older) form may seem simpler, but the new API allows a lot more metadata to be attached to the report, such as an override severity. You don't have to convert to the builder syntax to do this; you could also have written the second form as @@ -1372,7 +1398,7 @@

    This makes it possible to write a single analyzer which works -(”universally“) across all languages supported by UAST. And this is +across all languages supported by UAST. And this is very useful; most lint checks are doing something API or data-flow specific, not something language specific. If however you do need to implement something very language specific, see the next section, @@ -1582,7 +1608,7 @@

    Resolving only works if lint has a correct classpath such that the - referenced method, field or class are actually present. If it is + referenced method, field, or class is actually present. If it is not, resolve will return null, and various lint callbacks will not be invoked. This is a common source of questions for lint checks ”not working“; it frequently comes up in lint unit tests where a @@ -1954,11 +1980,11 @@ The lint checks source project is very simple -

    checks/build.gradle
    -checks/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry
    -checks/src/main/java/com/example/lint/checks/SampleIssueRegistry.kt
    -checks/src/main/java/com/example/lint/checks/SampleCodeDetector.kt
    -checks/src/test/java/com/example/lint/checks/SampleCodeDetectorTest.kt

    +

    checks/build.gradle
    +checks/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry
    +checks/src/main/java/com/example/lint/checks/SampleIssueRegistry.kt
    +checks/src/main/java/com/example/lint/checks/SampleCodeDetector.kt
    +checks/src/test/java/com/example/lint/checks/SampleCodeDetectorTest.kt

    First is the build file, which we've discussed above. @@ -2187,7 +2213,758 @@

    -   

    Publishing a Lint Check

    +   

    AST Analysis

    +

    + + +To analyze Kotlin and Java files, lint offers many convenience callbacks +to make it simple to accomplish common tasks: + +

    + +

      +
    • Check calls to a particular method name +
    • +
    • Instantiating a particular class +
    • +
    • Extending a particular super class or interface +
    • +
    • Using a particular annotation, or calling an annotated method
    + +

    + +And more. See the SourceCodeScanner interface for more information. + +

    + +It also has various helpers, such as a ConstantEvaluator and a +DataFlowAnalyzer to help analyze code. + +

    + +But in some cases, you'll need to dig in and analyze the “AST” yourself. + +

    +   

    AST Analysis

    +

    + + +AST is short for “Abstract Syntax Tree” — a tree representation of the +source code. Consider the following very simple Java program: + +

    // MyTest.java
    +package test.pkg;
    +
    +public class MyTest {
    +   String s = "hello";
    +}

    + +Here's the AST for the above program, the way it's represented +internally in IntelliJ. + +

    + +

    + +

    + +This is actually a simplified view; in reality, there are also +whitespace nodes tracking all the spans of whitespace characters between +these nodes. + +

    + +Anyway, you can see there is quite a bit of detail here — tracking +things like the keywords, the variables, references to for example the +package — and higher level concepts like a class and a field which I've +marked with a thicker border. + +

    + +Here's the corresponding Kotlin program: + +

    // MyTest.kt
    +package test.pkg
    +
    +class MyTest {
    +   val s: String = "hello"
    +}

    + +And here's the corresponding AST in IntelliJ: + +

    + +

    + +

    + +This is for a program which is completely equivalent to the Java one. +But notice that it has a completely different shape! They reference +different element classes, PsiClass versus KtClass, and on and on +all the way down. + +

    + +But there's some commonality — they each have a node for the file, for +the class, for the field, and for the initial value, the string. + +

    +   

    UAST

    +

    + + +We can construct a new AST which represents the same concepts: + +

    + +

    + +

    + +This is a unified AST, in something called “UAST”, short for Unified +Abstract Syntax Tree. UAST is the primary AST representation we use for +code in Lint. All the node classes here are prefixed with a capital U, +for UAST. And this is the UAST for the first Java file example above. + +

    + +Here's the UAST for the corresponding Kotlin example: + +

    + +

    + +

    + +As you can see, the ASTs are not always identical. For Strings, in +Kotlin, we often end up with an extra parent UiInjectionHost. But for +our purposes, you can see that the ASTs are mostly the same, so if you +handle the Kotlin scenario, you'll handle the Java ones too. + +

    +   

    UAST: The Java View

    +

    + + +Note that “Unified” in the name here is a bit misleading. From the name +you may assume that this is some sort of superset of the ASTs across +languages — and AST that can represent everything needed by all +languages. But that's not the case! Instead, a better way to think of it +is as the Java view of the AST. + +

    + +If you for example have the following Kotlin data class: + +

    data class Person(
    +    var id: String,
    +    var name: String
    +)

    + +This is a Kotlin data class with two properties. So you might expect +that UAST would have a way to represent these concepts — properties, +and java classes. This should be a UDataClass with two UProperty +children, right? + +

    + +But Java doesn't support properties. If you try to access a Person +instance from Java, you'll notice that it exposes a number of public +methods that you don't see there in the Kotlin code — in addition to +getId, setId, getName and setName, there's also component1 and +component2 (for destructuring), and copy. + +

    + +These methods are directly callable from Java, so they show up in UAST, +and your analysis can reason about them. + +

    + +Consider another complete Kotlin source file, test.kt: + +

    var property = 0

    + +Here's the UAST representation: + +

    + +

    + +

    + +Here we have a very simple Kotlin file — for a single Kotlin property. +But notice at the UAST level, there's no such thing as top level methods +and properties. In Java, everything is a class, so kotlinc will create +a “facade class”, using the filename plus “Kt”. So we see our TestKt +class. And there are three members here. There's the getter and the +setter for this property, as getProperty and setProperty. And then +there is the private field itself, where the property is stored. + +

    + +This all shows up in UAST. It's the Java view of the Kotlin code. This +may seem limiting, but in practice, for most lint checks, this is +actually what you want. This makes it easy to reason about calls to APIs +and so on. + +

    +   

    Expressions

    +

    + + +You may be getting the impression that the UAST tree is very shallow and +only represents high level declarations, like files, classes, methods +and properties. + +

    + +That's not the case. While it does skip low-level, language-specific +details things like whitespace nodes and individual keyword nodes, all +the various expression types are represented and can be reasoned about. +Take the following expression: + +

    if (s.length > 3) 0 else s.count { it.isUpperCase() }

    + +This maps to the following UAST tree: + +

    + +

    + +

    + +As you can see it's modeling the if, the comparison, the lambda, and so +on. + +

    +   

    UElement

    +

    + + +Every node in UAST is a subclass of a UElement. There's a parent +pointer, which is handy for navigating around in the AST. + +

    + +The real skill you need for writing lint checks is understanding the +AST, and then doing pattern matching on it. And a simple trick for this +is to create the Kotlin or Java code you want, in a unit test, and then +in your detector, recursively print out the UAST as a tree. + +

    + +Or in the debugger, anytime you have a UElement, you can call +UElement.asRecursiveLogString on it, evaluate and see what you find. + +

    + +For example, for the following Kotlin code: + +

    import java.util.Date
    +fun test() {
    +   val warn1 = Date()
    +   val ok = Date(0L)
    +}

    + +here's the corresponding UAST asRecursiveLogString output: + +

    UFile (package = )
    +  UImportStatement (isOnDemand = false)
    +  UClass (name = JavaTest)
    +    UMethod (name = test)
    +      UBlockExpression
    +        UDeclarationsExpression
    +          ULocalVariable (name = warn1)
    +            UCallExpression (kind = UastCallKind(name='constructor_call'), …
    +              USimpleNameReferenceExpression (identifier = Date)
    +        UDeclarationsExpression
    +          ULocalVariable (name = ok)
    +            UCallExpression (kind = UastCallKind(name='constructor_call'), …
    +              USimpleNameReferenceExpression (identifier = Date)
    +              ULiteralExpression (value = 0)
    +   

    Visiting

    +

    + + +You generally shouldn't visit a source file on your own. Lint has a +special UElementHandler for that which is used to ensure that we don't +repeat visiting a source file thousands of times, one per detector. + +

    + +But when you're doing local analysis, you sometimes need to visit a +subtree. + +

    + +To do that, just extend AbstractUastVisitor and pass the visitor to +the accept method of the corresponding UElement. + +

    method.accept(object : AbstractUastVisitor() {
    +    override fun visitSimpleNameReferenceExpression(node: USimpleNameReferenceExpression): Boolean {
    +        // your code here
    +        return super.visitSimpleNameReferenceExpression(node)
    +    }
    +})

    + +In a visitor, you generally want to call super as shown above. You can +also return true if you've “seen enough” and can stop visiting the +remainder of the AST. + +

    + +If you're visiting Java PSI elements, you use a +JavaRecursiveElementVisitor, and in Kotlin PSI, use a KtTreeVisitor. + +

    +   

    UElement to PSI Mapping

    +

    + + +UAST is built on top of PSI, and each UElement has a sourcePsi +property (which may be null). This lets you map from the general UAST +node, down to the specific PSI elements. + +

    + +Here's an illustration of that: + +

    + +

    + +

    + +We have our UAST tree in the top right corner. And here's the Java PSI +AST behind the scenes. We can access the underlying PSI node for a +UElement by accessing the sourcePsi element. So when you do need to dip +into something language specific, that's trivial to do. + +

    + +Note that in some cases, these references are null. + +

    + +Each of the UElement nodes point back into the PSI AST - whether a Java +AST or a Kotlin AST. Here's the same AST, but with the type of the +sourcePsi attribute for each node added. + +

    + +

    + +

    + +You can see that the class generated to represent the top level +functions here doesn't have a non-null sourcePsi, because in the +Kotlin PSI, there is no real KtClass for a facade class. And for the +three members, the private field and the getter and the setter, they all +correspond to the exact same, single KtProperty instance, the single +node in the Kotlin PSI that these methods were generated from. + +

    +   

    PSI to UElement

    +

    + + +In some cases, we can also map back to UAST from PSI elements, using the toUElement extension function. + +

    + +For example, let's say we resolve a method call. This returns a +PsiMethod, not a UMethod. But we can get the corresponding UMethod +using the following: + +

    val resolved = call.resolve() ?: return
    +val uDeclaration = resolve.toUElement()

    + +Note however that toUElement may return null. For example, if you've +resolved to a method call that is compiled (which you can check using +resolved is PsiCompiledElement), UAST cannot convert it. + +

    +   

    UAST versus PSI

    +

    + + +UAST is the preferred AST to use when you're writing lint checks for +Kotlin and Java. It lets you reason about things that are the same +across the languages. Declarations. Function calls. Super classes. +Assignments. If expressions. Return statements. And on and on. + +

    + +There are lint checks which are language specific — for example, if +you write a lint check which forbids the use of companion objects — in +that case, there's no big advantage to using UAST over PSI; it's only +ever going to run on Kotlin code. (Note however that lint's APIs and +convenience callbacks are all targeting UAST, so it's easier to write +UAST lint checks even for the language-specific checks.) + +

    + +The vast majority of lint checks however aren't language specific, +they're API or bug pattern specific. And if the API can be called +from Java, you want your lint check to not only flag problems in Kotlin, +but in Java code as well. You don't want to have to write the lint check +twice — so if you use UAST, a single lint check can work for both. But +while you generally want to use UAST for your analysis (and lint's APIs +are generally oriented around UAST), there are cases where it's +appropriate to dip into PSI. + +

    + +In particular, you should use PSI when you're doing something highly +language specific, and where the language details aren't exposed in UAST. + +

    + +For example, let's say you need to determine if a UClass is a Kotlin +“companion object“. You could cheat and look at the class name to see if +it's ”Companion“. But that's not quite right; in Kotlin you can +specify a custom companion object name, and of course users are free +to create classes named ”Companion“ that aren't companion objects: + +

    class Test {
    +  companion object MyName { // Companion object not named "Companion"!
    +  }
    +
    +  object Companion { // Named "Companion" but not a companion object!
    +  }
    +}

    + +The right way to do this, is using Kotlin PSI, via the +UElement.sourcePsi attribute: + +

    // Skip companion objects
    +val source = node.sourcePsi
    +if (source is KtObjectDeclaration && source.isCompanion()) {
    +   return
    +}

    + +(To figure out how to write the above code, use a debugger on a test +case and look at the UClass.sourcePsi attribute; you'll discover that +it's some subclass of KtObjectDeclaration; look up its most general +super interface or class, and then use code completion to discover +available APIs, such as isCompanion().) + +

    +   

    Kotlin Analysis API

    +

    + + +Using Kotlin PSI was the state of the art for correctly analyzing Kotlin +code until recently. But when you look at the PSI, you'll discover that +some things are really hard to accomplish — in particular, resolving +reference, and dealing with Kotlin types. + +

    + +Lint doesn't actually give you access to everything you need if you want +to try to look up types in Kotlin PSI; you need something called the +“binding context”, which is not exposed anywhere! And this omission is +deliberate, because that was an implementation detail of the old +compiler. The future is K2; a complete rewrite of the compiler front +end, which is no longer using the old binding context. And as part of +the tooling support for K2, there's a new API called the “Kotlin +Analysis API” you can use to dig into details about Kotlin. + +

    + +For most lint checks, you should just use UAST if you can. But when you +need to know really detailed Kotlin information, especially around +types, and smart casts, and null inference, and so on, the Kotlin +Analysis API is your best friend (and only option...) + +

    + +

    The Kotlin Analysis API is not yet final and may continue to change. + In fact, most of the symbols have been renamed recently. For example, + the KtAnalysisSession returned by analyze, has been renamed + KaSession. Most APIs now have the prefix Ka.
    + +

    +   

    Nothing Type?

    +

    + + +Here's a simple example: + +

    fun testTodo() {
    +   if (SDK_INT < 11) {
    +       TODO() // never returns
    +   }
    +   val actionBar = getActionBar() // OK - SDK_INT must be >= 11 !
    +}

    + +Here we have a scenario where we know that the TODO call will never +return, and lint can take advantage of that when analyzing the control +flow — in particular, it should understand that after the TODO() call +there's no chance of fallthrough, so it can conclude that SDK_INT must +be at least 11 after the if block. + +

    + +The way the Kotlin compiler can reason about this is that the TODO +method in the standard library has a return type of Nothing. + +

    @kotlin.internal.InlineOnly
    +public inline fun TODO(): Nothing = throw NotImplementedError()

    + +The Nothing return type means it will never return. + +

    + +Before the Kotlin lint analysis API, lint didn't have a way to reason +about the Nothing type. UAST only returns Java types, which maps to +void. So instead, lint had an ugly hack which just hardcoded well known +names of methods that don't return: + +

    if (nextStatement is UCallExpression) {
    + val methodName = nextStatement.methodName
    + if (methodName == "fail" || methodName == "error" || methodName == "TODO") {
    +   return true
    +}

    + +However, with the Kotlin analysis API, this is easy: + +

    /** +* Returns true if this [call] node calls a method known to never +* return, such as Kotlin's standard library method "error". +*/ +fun callNeverReturns(call: UCallExpression): Boolean { + val sourcePsi = call.sourcePsi as? KtCallExpression ?: return false + analyze(sourcePsi) { + val callInfo = sourcePsi.resolveCall() ?: return false + val returnType = callInfo.singleFunctionCallOrNull()?.symbol?.returnType + if (returnType != null && returnType.isNothing) { + return true + } +}

    + +The entry point to all Kotlin Analysis API usages is to call the +analyze method (see line 7) and pass in a Kotlin PSI element. This +creates an “analysis session”. It's very important that you don't leak +objects from inside the session out of it — to avoid memory leaks and +other problems. If you do need to hold on to a symbol and compare later, +you can create a special symbol pointer. + +

    + +Anyway, there's a huge number of extension methods that take an analysis +session as receiver, so inside the lambda on lines 7 to 13, there are +many new methods available. + +

    + +Here, we have a KtCallExpression, and inside the analyze block we +can call resolveCall() on it to reach the called method's symbol. + +

    + +Similarly on a KtDeclaration (such as a named function or property) I +can call getSymbol() to get the symbol for that method or property, to +for example look up parameter information. And on a KtExpression (such +as an if statement) I can call getKtType() to get the Kotlin type. + +

    + +KtSymbol and KtType are the basic primitives we're working with in +the Kotlin Analysis API. There are a number of subclasses of symbol, +such as KtFileSymbol, KtFunctionSymbol, KtClassOrObjectSymbol, and +so on. + +

    + +In the new implementation of callNeverReturns, we resolve the call, +look up the corresponding function which of course is a KtSymbol +itself, and from that we get the return type, and then we can just check +if it's the Nothing type. + +

    + +And this API works both with the old Kotlin compiler, used in lint right +now, and K2, which can be turned on via a flag and will soon be the +default (and may well be the default when you read this; we don't always +remember to update the documentation...) + +

    +   

    Compiled Metadata

    +

    + + +Accessing Kotlin-specific knowledge not available via Kotlin PSI is one +use for the analysis API. + +

    + +Another big advantage of the Kotlin analysis API is that it gives you +access to reason about compiled Kotlin code, in the same way that the +compiler does. + +

    + +Normally, when you resolve with UAST, you just get a plain PsiMethod +back. For example, if we have a reference to +kotlin.text.HexFormat.Companion, and we resolve it in UAST, we get a +PsiMethod back. This is not a Kotlin PSI element, so our earlier +code to check if this is a companion object (source is +KtObjectDeclaration && source.isCompanion()) does not work — the first +instance check fails. These compiled PsiElements do not give us access +to any of the special Kotlin payload we can usually check on +KtElements — modifiers like inline or infix, default parameters, +and so on. + +

    + +The analysis API handles this properly, even for compiled code. In fact, +the earlier implementation of checking for the Nothing type +demonstrated this, because the methods it's analyzing from the Kotlin +standard library (error, TODO, and so on), are all compiled classes +in the Kotlin standard library jar file! + +

    + +Therefore, yes, we can use Kotlin PSI to check if a class is a companion +object if we actually have the source code for the class. But if we're +resolving a reference to a class, using the Kotlin analysis API is +better; it will work for both source and compiled: + +

    symbol is KtClassOrObjectSymbol && symbol.classKind == KtClassKind.COMPANION_OBJECT
    +   

    Kotlin Analysis API Howto

    +

    + + +When you're using K2 with lint, a lot of UAST's handling of resolve and +types in Kotlin is actually using the analysis API behind the scenes. + +

    + +If you for example have a Kotlin PSI KtThisExpression, and you want to +understand how to resolve the this reference to another PSI element, +write the following Kotlin UAST code: + +

    thisReference.toUElement()?.tryResolve()

    + +You can now use a debugger to step into the tryResolve call, and +you'll eventually wind up in code using the Kotlin Analysis API to look +it up, and as it turns out, here's how: + +

    analyze(expression) {
    + val reference = expression.getTargetLabel()?.mainReference
    +     ?: expression.instanceReference.mainReference
    + val psi = reference.resolveToSymbol()?.psi
    + …
    +}
    +   

    Configuring lint to use K2

    +

    + + +To use K2 from a unit test, you can use the following lint test task override: + +

    override fun lint(): TestLintTask {
    +    return super.lint().configureOptions { flags -> flags.setUseK2Uast(true) }
    +}

    + +Outside of tests, you can also set the -Dlint.use.fir.uast=true system property in your run configurations. + +

    + +Note that at some point this flag may go away since we'll be switching +over to K2 completely. + +

    +   

    Recipes

    +

    + + +Here are various other Kotlin Analysis scenarios and potential solutions: + +

    +   

    Resolve a function call

    +
    val call: KtCallExpression
    +…
    +analyze(call) {
    +    val callInfo = call.resolveCall()
    +    if (callInfo != null) {
    +      val symbol: KtFunctionLikeSymbol = callInfo.singleFunctionCallOrNull()?.symbol
    +          ?: callInfo.singleConstructorCallOrNull()?.symbol
    +          ?: callInfo.singleCallOrNull<ktannotationcall>()?.symbol
    +      …
    +}
    +   

    Resolve a variable reference

    +

    + + +Also use resolveCall, though it's not really a call: + +

    val expression: KtNameReferenceExpression
    +…
    +analyze(expression) {
    +   val symbol: KtVariableLikeSymbol = expression.resolveCall()?.singleVariableAccessCall()?.symbol
    +}
    +   

    Get the containing class of a symbol

    +
    val containingSymbol = symbol.getContainingSymbol()
    +if (containingSymbol is KtNamedClassOrObjectSymbol) {
    +  …
    +}
    +   

    Get the fully qualified name of a class

    +
    val containing = declarationSymbol.getContainingSymbol()
    +if (containing is KtClassOrObjectSymbol) {
    +    val fqn = containing.classIdIfNonLocal?.asSingleFqName()
    +    …
    +}
    +   

    Look up the deprecation status of a symbol

    +
    if (symbol is KtDeclarationSymbol) {
    +  symbol.deprecationStatus?.let { … }
    +}
    +   

    Look up visibility

    +
    if (symbol is KtSymbolWithVisibility) {
    +    val visibility = symbol.visibility
    +    if (!visibility.isPublicAPI) {
    +        …
    +    }
    +}
    +   

    Get the KtType of a class symbol

    +
    containingSymbol.buildSelfClassType()
    +   

    Resolve a KtType into a class

    +

    + + +Example: is this KtParameter pointing to an interface? + +

    analyze(ktParameter) {
    +    val parameterSymbol = ktParameter.getParameterSymbol()
    +    val returnType = parameterSymbol.returnType
    +    val typeSymbol = returnType.expandedClassSymbol
    +    if (typeSymbol is KtClassOrObjectSymbol) {
    +    val classKind = typeSymbol.classKind
    +    if (classKind == KtClassKind.INTERFACE) {
    +       …
    +    }
    +}
    +   

    See if two types refer to the same raw class (erasure):

    +
    if (type1 is KtNonErrorClassType && type2 is KtNonErrorClassType &&
    +    type1.classId == type2.classId) {
    +    …
    +}
    +   

    For an extension method, get the receiver type:

    +
    if (declarationSymbol is KtFunctionSymbol) {
    +  val declarationReceiverType = declarationSymbol.receiverParameter?.type
    +   

    Get the PsiFile containing a symbol declaration

    +
    val file = symbol.getContainingFileSymbol()
    +if (file is KtFileSymbol) {
    +val psi = file.psi
    +if (psi is PsiFile) {
    +     …
    +}

    + + + +

    +   

    Publishing a Lint Check

    @@ -2209,9 +2986,9 @@ libraries, such as the internal Google build system.

    -   

    Android

    +   

    Android

    -   

    AAR Support

    +   

    AAR Support

    @@ -2244,7 +3021,7 @@ authors a way to provide their own additional checks enforcing usage.

    -   

    lintPublish Configuration

    +   

    lintPublish Configuration

    @@ -2287,7 +3064,7 @@ emitting the custom lint check.

    -   

    Local Checks

    +   

    Local Checks

    @@ -2319,7 +3096,7 @@ tracker for this.

    -   

    Unpublishing

    +   

    Unpublishing

    @@ -2335,7 +3112,7 @@ * and is no longer registered, any existing mentions of the issue * id in baselines, lint.xml files etc are gracefully handled. */ -open val deletedIssues: List<string> = emptyList()

    +open val deletedIssues: List<String> = emptyList()

    The reason you'll want to do this is listed right there in the doc: If you don't do this, and if users have for example listed your issue id @@ -2344,17 +3121,13 @@ is done to catch issue id typos. And if the user has a baseline file listing incidents from your check, then if your issue id is not registered as deleted, lint will think this is an issue that has been -“fixed“ since it's no longer reported, and lint will issue an +“fixed” since it's no longer reported, and lint will issue an informational message that the baseline contains issues no longer reported (which is done such that users can update their baseline files, to ensure that the fixed issues aren't reintroduced again.) -

    - - -

    -   

    Lint Check Unit Testing

    +   

    Lint Check Unit Testing

    @@ -2370,7 +3143,7 @@ until it passes.

    -   

    Creating a Unit Test

    +   

    Creating a Unit Test

    @@ -2456,7 +3229,7 @@ tweaks here and there.

    -   

    Computing the Expected Output

    +   

    Computing the Expected Output

    @@ -2471,7 +3244,7 @@ output, provided of course that it's correct!

    -   

    Test Files

    +   

    Test Files

    @@ -2577,12 +3350,12 @@ modes chapter.

    -   

    Trimming indents?

    +   

    Trimming indents?

    Notice how in the above Kotlin unit tests we used raw strings, and -we indented the sources to be flush with the opening “”“ string +we indented the sources to be flush with the opening """ string delimiter.

    @@ -2598,7 +3371,7 @@ will automatically call trimIndent() on the string passed in to it.

    -   

    Dollars in Raw Strings

    +   

    Dollars in Raw Strings

    @@ -2614,7 +3387,7 @@ the opposite direction when creating the test sources on disk).

    -   

    Quickfixes

    +   

    Quickfixes

    @@ -2667,7 +3440,7 @@ + "+ android:importantForAutofill=\"no\"\n" + " android:inputType=\"password\" >\n" + " \n"); -   

    Library Dependencies and Stubs

    +   

    Library Dependencies and Stubs

    @@ -2763,7 +3536,7 @@ (This check only enforces import references, not all references, so if it doesn't matter to the detector, you can just remove the import but leave references to the class in the code.) -   

    Binary and Compiled Source Files

    +   

    Binary and Compiled Source Files

    @@ -2833,7 +3606,7 @@ ).indented() ) ).run().expect( -   

    Base64-encoded gzipped byte code

    +   

    Base64-encoded gzipped byte code

    @@ -2853,7 +3626,7 @@ "BwAAAAIAAQAIAAkAAQAKAAAAHQABAAEAAAAFKrcAAbEAAAABAAsAAAAGAAEA" + "AAAEAAgADAAJAAEACgAAAB4AAQAAAAAABhICswADsQAAAAEACwAAAAYAAQAA" + "AAUAAQANAAAAAgAO" - )` + ) ).run().expect(

    Here, ”base64gzip“ means that the file is gzipped and then base64 @@ -2900,12 +3673,12 @@

    This isn't just a convenience; lint's test infrastructure also uses -this to test some additional scenarios (for example, in a multi- module +this to test some additional scenarios (for example, in a multi-module project it will only provide the binaries, not the sources, for upstream modules.)

    -   

    My Detector Isn't Invoked From a Test!

    +   

    My Detector Isn't Invoked From a Test!

    @@ -2922,7 +3695,7 @@ questions.

    -   

    Language Level

    +   

    Language Level

    @@ -2947,7 +3720,7 @@

    -   

    Test Modes

    +   

    Test Modes

    @@ -2963,7 +3736,7 @@

    -   

    Available Fixes

    +   

    Available Fixes

    @@ -3826,7 +4660,7 @@ val fix = fix() .url(http://github.com/%3Cspan%20class=%22hljs-string%22%3E%22https://developer.android.com/topic/libraries/architecture/workmanager/migrating-gcm%22%3C/span%3E) .build() -   

    Combining Fixes

    +   

    Combining Fixes

    @@ -3891,7 +4725,7 @@ fix().set().todo(ANDROID_URI, "text").build(), fix().set().todo(ANDROID_URI, "contentDescription") .build()) -   

    Refactoring Java and Kotlin code

    +   

    Refactoring Java and Kotlin code

    @@ -3918,7 +4752,7 @@ checks with quickfixes for Kotlin and Java.

    -   

    Regular Expressions and Back References

    +   

    Regular Expressions and Back References

    @@ -3959,7 +4793,7 @@ + if (javaClass.desiredAssertionStatus()) { assert(expensive()) } // WARN """ ) -   

    Emitting quick fix XML to apply on CI

    +   

    Emitting quick fix XML to apply on CI

    @@ -3971,9 +4805,9 @@ to auto-fix a suggestion right from within the code review tool.

    -   

    Partial Analysis

    +   

    Partial Analysis

    -   

    About

    +   

    About

    @@ -4010,7 +4844,7 @@ validate code reviews.

    -   

    The Problem

    +   

    The Problem

    @@ -4031,7 +4865,7 @@ that module results can be cached.

    -   

    Overview

    +   

    Overview

    @@ -4135,7 +4969,7 @@

  • 1% were updated to perform map recording and later reduce filtering
  • -   

    Does My Detector Need Work?

    +   

    Does My Detector Need Work?

    @@ -4152,7 +4986,7 @@ detector is doing something it shouldn't.

    -   

    Catching Mistakes: Blocking Access to Main Project

    +   

    Catching Mistakes: Blocking Access to Main Project

    @@ -4214,7 +5048,7 @@

  • Whether the main module is an Android project
  • -   

    Catching Mistakes: Simulated App Module

    +   

    Catching Mistakes: Simulated App Module

    @@ -4231,7 +5065,7 @@ library.

    -   

    Catching Mistakes: Diffing Results

    +   

    Catching Mistakes: Diffing Results

    @@ -4241,7 +5075,7 @@ analysis is not written correctly, they're not.

    -   

    Catching Mistakes: Remaining Issues

    +   

    Catching Mistakes: Remaining Issues

    @@ -4345,7 +5179,7 @@ binaries (through a lint AST to PsiCompiled pretty printer.)

    -   

    Incidents

    +   

    Incidents

    @@ -4378,8 +5212,8 @@ represents it. To report an incident you simply call context.report(incident). There are several ways to create these incidents. The easiest is to simply edit your existing call above by -adding Incident( (or from Java, new Incident() inside the -context.report block like this: +putting it inside Incident(...) (in Java, new Incident(...)) inside +the context.report block like this:

        context.report(Incident(
             ISSUE,
    @@ -4432,7 +5266,7 @@
     make any changes
     
     

    -   

    Constraints

    +   

    Constraints

    @@ -4475,7 +5309,7 @@

    Recording an incident with a constraint is easy; first construct the -Incident as before, and then report them via +Incident as before, and then report it via context.report(incident, constraint):

        String message =
    @@ -4486,7 +5320,7 @@
         context.report(incident, minSdkAtLeast(18));

    Finally, note that you can combine constraints; there are both “and” -and “or” operators defined for the Constraint class. so the following +and “or” operators defined for the Constraint class, so the following is valid:

        val constraint = targetSdkAtLeast(23) and notLibraryProject()
    @@ -4497,7 +5331,7 @@
     on its own and only report incidents that meet the constraint.
     
     

    -   

    Incident LintMaps

    +   

    Incident LintMaps

    @@ -4580,7 +5414,7 @@ each time for new detector instances in the reporting task.

    -   

    Module LintMaps

    +   

    Module LintMaps

    @@ -4771,7 +5605,7 @@ * (via [Context.report]) to lint. */ open fun checkPartialResults(context: Context, partialResults: PartialResult) { ... }

    -   

    Optimizations

    +   

    Optimizations

    @@ -4793,7 +5627,7 @@

    -   

    Data Flow Analyzer

    +   

    Data Flow Analyzer

    @@ -4848,7 +5682,7 @@ we care about.

    -   

    Usage

    +   

    Usage

    @@ -4896,7 +5730,7 @@ } }

    -Aas you can see, the DataFlowAnalyzer is a visitor, so when we find a +As you can see, the DataFlowAnalyzer is a visitor, so when we find a call we're interested in, we construct a DataFlowAnalyzer and initialize it with the instance we want to track, and then we visit the surrounding method with this visitor. @@ -4921,7 +5755,7 @@ However, there's a lot that can go wrong, which we'll need to deal with. This is explained in the following sections

    -   

    Self-referencing Calls

    +   

    Self-referencing Calls

    @@ -4982,7 +5816,7 @@ return super.returnsSelf(call) || call.methodName == "copy" } } -   

    Kotlin Scoping Functions

    +   

    Kotlin Scoping Functions

    @@ -5010,7 +5844,7 @@ } } } -   

    Limitations

    +   

    Limitations

    @@ -5018,7 +5852,7 @@ if/else

    -   

    Escaping Values

    +   

    Escaping Values

    @@ -5040,7 +5874,7 @@ scenarios, and more importantly, we need to ensure that we don't offer false positive warnings in the above scenario.

    -   

    Returns

    +   

    Returns

    @@ -5071,7 +5905,7 @@ if (!escapes && !foundCommit) { context.report(Incident(...)) } -   

    Parameters

    +   

    Parameters

    @@ -5079,8 +5913,8 @@ no longer know for certain whether it gets committed is via a method call. -

    fun test) { - val transaction = getFragmentManager().beginTransaction() +

    fun test() { + val transaction = getFragmentManager().beginTransaction() process(transaction) }

    @@ -5106,7 +5940,7 @@ customize this by overriding ignoreArgument().)

    -   

    Fields

    +   

    Fields

    @@ -5141,7 +5975,7 @@ the method, and at the end you can just check its escaped property.

    -   

    Non Local Analysis

    +   

    Non Local Analysis

    @@ -5179,7 +6013,7 @@ Complications: - storing in a field, returning, intermediate variables, self-referencing methods, scoping functions,

    -   

    Examples

    +   

    Examples

    @@ -5187,7 +6021,7 @@ built-in rules.

    -   

    Simple Example

    +   

    Simple Example

    @@ -5200,7 +6034,7 @@ Test

    -   

    Complex Example

    +   

    Complex Example

    @@ -5212,7 +6046,7 @@ Test

    -   

    TargetMethodDataFlowAnalyzer

    +   

    TargetMethodDataFlowAnalyzer

    @@ -5259,7 +6093,7 @@

    -   

    Annotations

    +   

    Annotations

    @@ -5303,7 +6137,7 @@ visitAnnotation.

    -   

    Basics

    +   

    Basics

    @@ -5385,7 +6219,7 @@

    -And the third case shows the most common scenario: a straight forward +And the third case shows the most common scenario: a straightforward method call to an annotated method.

    @@ -5415,9 +6249,9 @@ org.jetbrains.annotations.Nullable will both match.

    -   

    Annotation Usage Types and isApplicableAnnotationUsage

    +   

    Annotation Usage Types and isApplicableAnnotationUsage

    -   

    Method Override

    +   

    Method Override

    @@ -5451,7 +6285,7 @@ method somewhere in the method body.

    -   

    Method Return

    +   

    Method Return

    @@ -5493,7 +6327,7 @@ @StringRes).

    -   

    Handling Usage Types

    +   

    Handling Usage Types

    @@ -5530,7 +6364,7 @@ types by default in the super implementation.

    -   

    Usage Types Filtered By Default

    +   

    Usage Types Filtered By Default

    @@ -5568,7 +6402,7 @@ src/test/pkg/HalfFloatTest.java:50: Error: Half-float type in expression widened to int [HalfFloat] Math.round(float1); // Error: should use Half.round ------

    -   

    Scopes

    +   

    Scopes

    @@ -5613,7 +6447,7 @@ The fileStack.push call on line 4 also resolves to the same method as the call on line 2 (even though the concrete type is a FileStack -instead of a `Stack), so like on line 2, this call is taken to be +instead of a Stack), so like on line 2, this call is taken to be thread safe.

    @@ -5689,7 +6523,7 @@ you are invoked for the innermost one.

    -   

    Inherited Annotations

    +   

    Inherited Annotations

    @@ -5736,9 +6570,9 @@

    -   

    Options

    +   

    Options

    -   

    Usage

    +   

    Usage

    @@ -5779,7 +6613,7 @@ (See the lint.xml documentation for more.)

    -   

    Creating Options

    +   

    Creating Options

    @@ -5848,7 +6682,7 @@

    -   

    Reading Options

    +   

    Reading Options

    @@ -5861,7 +6695,7 @@ user, or if not set, our original default value, in this case 80.

    -   

    Specific Configurations

    +   

    Specific Configurations

    @@ -5898,7 +6732,7 @@

    val configuration = context.findConfiguration(context.file)
     val maxCount = MAX_COUNT.getValue(configuration)
    -   

    Files

    +   

    Files

    @@ -5911,7 +6745,7 @@ string as necessary.

    -   

    Constraints

    +   

    Constraints

    @@ -5941,7 +6775,7 @@ <option name="duration" value="100.0"> ---------------------------------------- 1 errors, 0 warnings -   

    Testing Options

    +   

    Testing Options

    @@ -5958,7 +6792,7 @@ .configureOption(MAX_COUNT, 150) .run() .expectClean() -   

    Supporting Lint 4.2, 7.0 and 7.1

    +   

    Supporting Lint 4.2, 7.0 and 7.1

    @@ -5988,9 +6822,9 @@

    -   

    Error Message Conventions

    +   

    Error Message Conventions

    -   

    Length

    +   

    Length

    @@ -6017,7 +6851,7 @@ while still legible.

    -   

    Formatting

    +   

    Formatting

    @@ -6040,11 +6874,11 @@ quotes.

    -   

    Punctuation

    +   

    Punctuation

    -One line error messages should not be punctuated - e.g. the error message +One line error messages should not be punctuated — e.g. the error message should be “Unused import foo”, not “Unused import foo.”

    @@ -6058,7 +6892,7 @@ (?) sign.

    -   

    Include Details

    +   

    Include Details

    @@ -6078,7 +6912,7 @@ match them in order, which often would match the wrong import.

    -   

    Reference Android By Number

    +   

    Reference Android By Number

    @@ -6087,7 +6921,7 @@ “API 31“.

    -   

    Keep Messages Stable

    +   

    Keep Messages Stable

    @@ -6118,7 +6952,7 @@

  • Adding a prefix
  • -   

    Plurals

    +   

    Plurals

    @@ -6139,7 +6973,7 @@ ”register your receivers in the manifest“

    -   

    Examples

    +   

    Examples

    @@ -6301,7 +7135,7 @@

  • [EnqueueWork] WorkContinuation `cont` not enqueued: did you forget to call `enqueue()`?
  • -   

    Frequently Asked Questions

    +   

    Frequently Asked Questions

    @@ -6309,7 +7143,7 @@ have asked in the past.

    -   

    My detector callbacks aren't invoked

    +   

    My detector callbacks aren't invoked

    @@ -6344,7 +7178,7 @@ detail in the unit testing chapter.

    -   

    My lint check works from the unit test but not in the IDE

    +   

    My lint check works from the unit test but not in the IDE

    @@ -6390,7 +7224,7 @@ information about this.

    -   

    visitAnnotationUsage isn't called for annotations

    +   

    visitAnnotationUsage isn't called for annotations

    @@ -6409,7 +7243,7 @@ visitAnnotation.

    -   

    How do I check if a UAST or PSI element is for Java or Kotlin?

    +   

    How do I check if a UAST or PSI element is for Java or Kotlin?

    @@ -6433,7 +7267,7 @@ see the next question.

    -   

    What if I need a PsiElement and I have a UElement ?

    +   

    What if I need a PsiElement and I have a UElement ?

    @@ -6441,11 +7275,11 @@ by calling element.sourcePsi.

    -   

    How do I get the UMethod for a PsiMethod ?

    +   

    How do I get the UMethod for a PsiMethod ?

    -Call psiMethod.toUElementOfType<umethod>(). Note that this may return +Call psiMethod.toUElementOfType<UMethod>(). Note that this may return null if UAST cannot find valid Java or Kotlin source code for the method. @@ -6455,7 +7289,7 @@ toUElementOfType type arguments.

    -   

    How do get a JavaEvaluator ?

    +   

    How do get a JavaEvaluator?

    @@ -6472,7 +7306,7 @@ of operations on the evaluator.

    -   

    How do I check whether an element is internal?

    +   

    How do I check whether an element is internal?

    @@ -6485,7 +7319,7 @@ PsiMethod, PsiClass, PsiField, PsiMember, PsiVariable, etc.)

    -   

    Is element inline, sealed, operator, infix, suspend, data?

    +   

    Is element inline, sealed, operator, infix, suspend, data?

    @@ -6499,7 +7333,7 @@ open fun isOperator(owner: PsiModifierListOwner?): Boolean { /* ... */ open fun isInfix(owner: PsiModifierListOwner?): Boolean { /* ... */ open fun isSuspend(owner: PsiModifierListOwner?): Boolean { /* ... */ -   

    How do I look up a class if I have its fully qualified name?

    +   

    How do I look up a class if I have its fully qualified name?

    @@ -6508,7 +7342,7 @@ nullable.

    -   

    How do I look up a class if I have a PsiType?

    +   

    How do I look up a class if I have a PsiType?

    @@ -6518,7 +7352,7 @@

        abstract fun getClassType(psiClass: PsiClass?): PsiClassType?
         abstract fun getTypeClass(psiType: PsiType?): PsiClass?
    -   

    How do I look up hierarhcy annotations for an element?

    +   

    How do I look up hierarchy annotations for an element?

    @@ -6538,7 +7372,7 @@ owner: PsiModifierListOwner, inHierarchy: Boolean ): Array<psiannotation> -   

    How do I look up if a class is a subclass of another?

    +   

    How do I look up if a class is a subclass of another?

    @@ -6576,7 +7410,7 @@ interfaceName: String, strict: Boolean = false ): Boolean -   

    How do I know which parameter a call argument corresponds to?

    +   

    How do I know which parameter a call argument corresponds to?

    @@ -6600,7 +7434,7 @@

        open fun computeArgumentMapping(
             call: UCallExpression,
             method: PsiMethod
    -    ): Map<uexpression, psiparameter=""> { /* ... */

    + ): Map<UExpression, PsiParameter> { /* ... */

    This returns a map from UAST expressions (each argument to a UAST call is a UExpression, and these are the valueArguments property on the @@ -6608,7 +7442,7 @@ PsiMethod that the method calls.

    -   

    How can my lint checks target two different versions of lint?

    +   

    How can my lint checks target two different versions of lint?

    @@ -6625,7 +7459,7 @@ outside of the current API level.

    -   

    Can I make my lint check “not suppressible?”

    +   

    Can I make my lint check “not suppressible?”

    @@ -6641,18 +7475,18 @@ Issue, set the suppressNames property to an empty collection.

    -   

    Why are overloaded operators not handled?

    +   

    Why are overloaded operators not handled?

    Kotlin supports overloaded operators, but these are not handled as -calls in the AST - instead, an implicit get or set method from an +calls in the AST — instead, an implicit get or set method from an array access will show up as a UArrayAccessExpression. Lint has specific support to help handling these scenarios; see the “Implicit Calls” section in the basics chapter.

    -   

    How do I check out the current lint source code?

    +   

    How do I check out the current lint source code?

    $ git clone --branch=mirror-goog-studio-main --single-branch \
        https://android.googlesource.com/platform/tools/base
     Cloning into 'base'...
    @@ -6669,7 +7503,7 @@
     .gitignore              MODULE_LICENSE_APACHE2  cli/
     $ ls libs/
     intellij-core/   kotlin-compiler/ lint-api/        lint-checks/     lint-gradle/     lint-model/      lint-tests/      uast/
    -   

    Where do I find examples of lint checks?

    +   

    Where do I find examples of lint checks?

    @@ -6679,12 +7513,23 @@ browse sources online: https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ +

    +   

    How do I analyze details about Kotlin?

    +

    + + +The new Kotlin Analysis API offers access to detailed information about +Kotlin (types, resolution, as well as information the compiler has +figured out such as smart casts, nullability, deprecation info, and so +on). There are more details about this, as well as a number of recipes, +in the AST Analysis chapter. +

    -   

    Appendix: Recent Changes

    +   

    Appendix: Recent Changes

    @@ -6699,6 +7544,27 @@

    +8.6 + +

    + +

    + +

    + 8.4

    @@ -7232,7 +8098,7 @@

    -   

    Appendix: Environment Variables and System Properties

    +   

    Appendix: Environment Variables and System Properties

    @@ -7242,9 +8108,9 @@ what they are seems useful.

    -   

    Environment Variables

    +   

    Environment Variables

    -   

    Detector Configuration Variables

    +   

    Detector Configuration Variables

    @@ -7276,7 +8142,7 @@ for that check.

    -   

    Lint Configuration Variables

    +   

    Lint Configuration Variables

    @@ -7330,7 +8196,7 @@ Corresponding system property: android.lint.skip.bytecode.verifier

    -   

    Lint Development Variables

    +   

    Lint Development Variables

    @@ -7364,7 +8230,7 @@ server or by the rest of the development team.

    -   

    System Properties

    +   

    System Properties

    @@ -7435,4 +8301,4 @@ Corresponding system property: android.lint.skip.bytecode.verifier

    -

    formatted by Markdeep 1.16  
    \ No newline at end of file +

    formatted by Markdeep 1.17  
    \ No newline at end of file diff --git a/docs/api-guide.md.html b/docs/api-guide.md.html index e102d24d..d95f9729 100644 --- a/docs/api-guide.md.html +++ b/docs/api-guide.md.html @@ -8,6 +8,7 @@ (insert api-guide/terminology.md.html here) (insert api-guide/basics.md.html here) (insert api-guide/example.md.html here) + (insert api-guide/ast-analysis.md.html here) (insert api-guide/publishing.md.html here) (insert api-guide/unit-testing.md.html here) (insert api-guide/test-modes.md.html here) diff --git a/docs/api-guide/annotations.md.html b/docs/api-guide/annotations.md.html index fbc82659..6422dfe2 100644 --- a/docs/api-guide/annotations.md.html +++ b/docs/api-guide/annotations.md.html @@ -351,7 +351,7 @@ called for the second `pop` call as well, since it calls a method inside a `@ThreadSafe` annotation (on the outer class), but the `index` would be 1. The lint check can check all the annotations earlier than -the one at the index to see if they "counteract" the annotation, which +the one at the index to see if they “counteract” the annotation, which of course the `@NotThreadSafe` annotation does. Lint uses this mechanism for example for the `@CheckResult` annotation, @@ -375,7 +375,7 @@ found in multiple nested contexts, lint *will* include all the annotations in the `AnnotationUsageInfo`, but it will not invoke your callback for any outer occurrences; only the closest one. This - is usually what detectors expect: the innermost one "overrides" the + is usually what detectors expect: the innermost one “overrides” the outer ones, so lint omits these to help avoid false positives where a lint check author forgot to handle and test this scenario. A good example of this situation is with the `@RequiresApi` annotation; a @@ -405,7 +405,7 @@ for testing purposes, but you have a concrete subclass where you are deliberately supporting the operation, not just from tests. If annotations were always inherited, you would have to create some sort -of annotation to "revert" the semantics, e.g. +of annotation to “revert” the semantics, e.g. `@VisibleNotJustForTesting`, which would require a lot of noisy annotations. diff --git a/docs/api-guide/ast-analysis.md.html b/docs/api-guide/ast-analysis.md.html new file mode 100644 index 00000000..5cf2478d --- /dev/null +++ b/docs/api-guide/ast-analysis.md.html @@ -0,0 +1,659 @@ + + +# AST Analysis + +To analyze Kotlin and Java files, lint offers many convenience callbacks +to make it simple to accomplish common tasks: + +* Check calls to a particular method name +* Instantiating a particular class +* Extending a particular super class or interface +* Using a particular annotation, or calling an annotated method + +And more. See the `SourceCodeScanner` interface for more information. + +It also has various helpers, such as a `ConstantEvaluator` and a +`DataFlowAnalyzer` to help analyze code. + +But in some cases, you'll need to dig in and analyze the “AST” yourself. + +## AST Analysis + +AST is short for “Abstract Syntax Tree” -- a tree representation of the +source code. Consider the following very simple Java program: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~java +// MyTest.java +package test.pkg; + +public class MyTest { + String s = "hello"; +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here's the AST for the above program, the way it's represented +internally in IntelliJ. + +![](images/java-psi.png) + +This is actually a simplified view; in reality, there are also +whitespace nodes tracking all the spans of whitespace characters between +these nodes. + +Anyway, you can see there is quite a bit of detail here -- tracking +things like the keywords, the variables, references to for example the +package -- and higher level concepts like a class and a field which I've +marked with a thicker border. + +Here's the corresponding Kotlin program: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +// MyTest.kt +package test.pkg + +class MyTest { + val s: String = "hello" +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +And here's the corresponding AST in IntelliJ: + +![](images/kotlin-psi.png) + +This is for a program which is completely equivalent to the Java one. +But notice that it has a completely different shape! They reference +different element classes, `PsiClass` versus `KtClass`, and on and on +all the way down. + +But there's some commonality -- they each have a node for the file, for +the class, for the field, and for the initial value, the string. + +## UAST + +We can construct a new AST which represents the same concepts: + +![](images/uast-java.png) + +This is a unified AST, in something called “UAST”, short for Unified +Abstract Syntax Tree. UAST is the primary AST representation we use for +code in Lint. All the node classes here are prefixed with a capital U, +for UAST. And this is the UAST for the first Java file example above. + +Here's the UAST for the corresponding Kotlin example: + +![](images/uast-kotlin.png) + +As you can see, the ASTs are not always identical. For Strings, in +Kotlin, we often end up with an extra parent `UiInjectionHost`. But for +our purposes, you can see that the ASTs are mostly the same, so if you +handle the Kotlin scenario, you'll handle the Java ones too. + +## UAST: The Java View + +Note that “Unified” in the name here is a bit misleading. From the name +you may assume that this is some sort of superset of the ASTs across +languages -- and AST that can represent everything needed by all +languages. But that's not the case! Instead, a better way to think of it +is as the **Java view** of the AST. + +If you for example have the following Kotlin data class: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +data class Person( + var id: String, + var name: String +) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This is a Kotlin data class with two properties. So you might expect +that UAST would have a way to represent these concepts -- properties, +and java classes. This should be a `UDataClass` with two `UProperty` +children, right? + +But Java doesn't support properties. If you try to access a `Person` +instance from Java, you'll notice that it exposes a number of public +methods that you don't see there in the Kotlin code -- in addition to +`getId`, `setId`, `getName` and `setName`, there's also `component1` and +`component2` (for destructuring), and `copy`. + +These methods are directly callable from Java, so they show up in UAST, +and your analysis can reason about them. + +Consider another complete Kotlin source file, `test.kt`: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +var property = 0 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here's the UAST representation: + +![](images/uast-kotlin-val.png) + +Here we have a very simple Kotlin file -- for a single Kotlin property. +But notice at the UAST level, there's no such thing as top level methods +and properties. In Java, everything is a class, so `kotlinc` will create +a “facade class”, using the filename plus “Kt”. So we see our `TestKt` +class. And there are three members here. There's the getter and the +setter for this property, as `getProperty` and `setProperty`. And then +there is the private field itself, where the property is stored. + +This all shows up in UAST. It's the Java view of the Kotlin code. This +may seem limiting, but in practice, for most lint checks, this is +actually what you want. This makes it easy to reason about calls to APIs +and so on. + +## Expressions + +You may be getting the impression that the UAST tree is very shallow and +only represents high level declarations, like files, classes, methods +and properties. + +That's not the case. While it **does** skip low-level, language-specific +details things like whitespace nodes and individual keyword nodes, all +the various expression types are represented and can be reasoned about. +Take the following expression: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +if (s.length > 3) 0 else s.count { it.isUpperCase() } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This maps to the following UAST tree: + +![](images/uast-if.png) + +As you can see it's modeling the if, the comparison, the lambda, and so +on. + +## UElement + +Every node in UAST is a subclass of a UElement. There's a parent +pointer, which is handy for navigating around in the AST. + +The real skill you need for writing lint checks is understanding the +AST, and then doing pattern matching on it. And a simple trick for this +is to create the Kotlin or Java code you want, in a unit test, and then +in your detector, recursively print out the UAST as a tree. + +Or in the debugger, anytime you have a UElement, you can call +`UElement.asRecursiveLogString` on it, evaluate and see what you find. + +For example, for the following Kotlin code: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +import java.util.Date +fun test() { + val warn1 = Date() + val ok = Date(0L) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +here's the corresponding UAST `asRecursiveLogString` output: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +UFile (package = ) + UImportStatement (isOnDemand = false) + UClass (name = JavaTest) + UMethod (name = test) + UBlockExpression + UDeclarationsExpression + ULocalVariable (name = warn1) + UCallExpression (kind = UastCallKind(name='constructor_call'), … + USimpleNameReferenceExpression (identifier = Date) + UDeclarationsExpression + ULocalVariable (name = ok) + UCallExpression (kind = UastCallKind(name='constructor_call'), … + USimpleNameReferenceExpression (identifier = Date) + ULiteralExpression (value = 0) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +## Visiting + +You generally shouldn't visit a source file on your own. Lint has a +special `UElementHandler` for that which is used to ensure that we don't +repeat visiting a source file thousands of times, one per detector. + +But when you're doing local analysis, you sometimes need to visit a +subtree. + +To do that, just extend `AbstractUastVisitor` and pass the visitor to +the `accept` method of the corresponding `UElement`. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +method.accept(object : AbstractUastVisitor() { + override fun visitSimpleNameReferenceExpression(node: USimpleNameReferenceExpression): Boolean { + // your code here + return super.visitSimpleNameReferenceExpression(node) + } +}) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In a visitor, you generally want to call `super` as shown above. You can +also `return true` if you've “seen enough” and can stop visiting the +remainder of the AST. + +If you're visiting Java PSI elements, you use a +`JavaRecursiveElementVisitor`, and in Kotlin PSI, use a `KtTreeVisitor`. + +## UElement to PSI Mapping + +UAST is built on top of PSI, and each `UElement` has a `sourcePsi` +property (which may be null). This lets you map from the general UAST +node, down to the specific PSI elements. + +Here's an illustration of that: + +![](images/uast-sourcepsi.png) + +We have our UAST tree in the top right corner. And here's the Java PSI +AST behind the scenes. We can access the underlying PSI node for a +UElement by accessing the sourcePsi element. So when you do need to dip +into something language specific, that's trivial to do. + +Note that in some cases, these references are null. + +Each of the UElement nodes point back into the PSI AST - whether a Java +AST or a Kotlin AST. Here's the same AST, but with the **type** of the +`sourcePsi` attribute for each node added. + +![](images/uast-sourcepsi-type.png) + +You can see that the class generated to represent the top level +functions here doesn't have a non-null `sourcePsi`, because in the +Kotlin PSI, there is no real `KtClass` for a facade class. And for the +three members, the private field and the getter and the setter, they all +correspond to the exact same, single `KtProperty` instance, the single +node in the Kotlin PSI that these methods were generated from. + +## PSI to UElement + +In some cases, we can also map back to UAST from PSI elements, using the `toUElement` extension function. + +For example, let's say we resolve a method call. This returns a +`PsiMethod`, not a `UMethod`. But we can get the corresponding `UMethod` +using the following: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +val resolved = call.resolve() ?: return +val uDeclaration = resolve.toUElement() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Note however that `toUElement` may return null. For example, if you've +resolved to a method call that is compiled (which you can check using +`resolved is PsiCompiledElement`), UAST cannot convert it. + +## UAST versus PSI + +UAST is the preferred AST to use when you're writing lint checks for +Kotlin and Java. It lets you reason about things that are the same +across the languages. Declarations. Function calls. Super classes. +Assignments. If expressions. Return statements. And on and on. + +There *are* lint checks which are language specific -- for example, if +you write a lint check which forbids the use of companion objects -- in +that case, there's no big advantage to using UAST over PSI; it's only +ever going to run on Kotlin code. (Note however that lint's APIs and +convenience callbacks are all targeting UAST, so it's easier to write +UAST lint checks even for the language-specific checks.) + +The vast majority of lint checks however aren't language specific, +they're **API** or bug pattern specific. And if the API can be called +from Java, you want your lint check to not only flag problems in Kotlin, +but in Java code as well. You don't want to have to write the lint check +twice -- so if you use UAST, a single lint check can work for both. But +while you generally want to use UAST for your analysis (and lint's APIs +are generally oriented around UAST), there **are** cases where it's +appropriate to dip into PSI. + +In particular, you should use PSI when you're doing something highly +language specific, and where the language details aren't exposed in UAST. + +For example, let's say you need to determine if a `UClass` is a Kotlin +"companion object“. You could cheat and look at the class name to see if +it's ”Companion“. But that's not quite right; in Kotlin you can +specify a custom companion object name, and of course users are free +to create classes named ”Companion“ that aren't companion objects: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +class Test { + companion object MyName { // Companion object not named "Companion"! + } + + object Companion { // Named "Companion" but not a companion object! + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The right way to do this, is using Kotlin PSI, via the +`UElement.sourcePsi` attribute: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +// Skip companion objects +val source = node.sourcePsi +if (source is KtObjectDeclaration && source.isCompanion()) { + return +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +(To figure out how to write the above code, use a debugger on a test +case and look at the `UClass.sourcePsi` attribute; you'll discover that +it's some subclass of `KtObjectDeclaration`; look up its most general +super interface or class, and then use code completion to discover +available APIs, such as `isCompanion()`.) + +## Kotlin Analysis API + +Using Kotlin PSI was the state of the art for correctly analyzing Kotlin +code until recently. But when you look at the PSI, you'll discover that +some things are really hard to accomplish -- in particular, resolving +reference, and dealing with Kotlin types. + +Lint doesn't actually give you access to everything you need if you want +to try to look up types in Kotlin PSI; you need something called the +"binding context”, which is not exposed anywhere! And this omission is +deliberate, because that was an implementation detail of the old +compiler. The future is K2; a complete rewrite of the compiler front +end, which is no longer using the old binding context. And as part of +the tooling support for K2, there's a new API called the “Kotlin +Analysis API” you can use to dig into details about Kotlin. + +For most lint checks, you should just use UAST if you can. But when you +need to know really **detailed** Kotlin information, especially around +types, and smart casts, and null inference, and so on, the Kotlin +Analysis API is your best friend (and only option...) + +!!! WARNING + The Kotlin Analysis API is not yet final and may continue to change. + In fact, most of the symbols have been renamed recently. For example, + the `KtAnalysisSession` returned by `analyze`, has been renamed + `KaSession`. Most APIs now have the prefix `Ka`. + +### Nothing Type? + +Here's a simple example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +fun testTodo() { + if (SDK_INT < 11) { + TODO() // never returns + } + val actionBar = getActionBar() // OK - SDK_INT must be >= 11 ! +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here we have a scenario where we know that the TODO call will never +return, and lint can take advantage of that when analyzing the control +flow -- in particular, it should understand that after the TODO() call +there's no chance of fallthrough, so it can conclude that SDK_INT must +be at least 11 after the if block. + +The way the Kotlin compiler can reason about this is that the `TODO` +method in the standard library has a return type of `Nothing`. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +@kotlin.internal.InlineOnly +public inline fun TODO(): Nothing = throw NotImplementedError() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The `Nothing` return type means it will never return. + +Before the Kotlin lint analysis API, lint didn't have a way to reason +about the `Nothing` type. UAST only returns Java types, which maps to +void. So instead, lint had an ugly hack which just hardcoded well known +names of methods that don't return: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +if (nextStatement is UCallExpression) { + val methodName = nextStatement.methodName + if (methodName == "fail" || methodName == "error" || methodName == "TODO") { + return true +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +However, with the Kotlin analysis API, this is easy: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +/** +* Returns true if this [call] node calls a method known to never +* return, such as Kotlin's standard library method "error". +*/ +fun callNeverReturns(call: UCallExpression): Boolean { + val sourcePsi = call.sourcePsi as? KtCallExpression ?: return false + analyze(sourcePsi) { + val callInfo = sourcePsi.resolveCall() ?: return false + val returnType = callInfo.singleFunctionCallOrNull()?.symbol?.returnType + if (returnType != null && returnType.isNothing) { + return true + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The entry point to all Kotlin Analysis API usages is to call the +`analyze` method (see line 7) and pass in a Kotlin PSI element. This +creates an “analysis session”. **It's very important that you don't leak +objects from inside the session out of it** -- to avoid memory leaks and +other problems. If you do need to hold on to a symbol and compare later, +you can create a special symbol pointer. + +Anyway, there's a huge number of extension methods that take an analysis +session as receiver, so inside the lambda on lines 7 to 13, there are +many new methods available. + +Here, we have a `KtCallExpression`, and inside the `analyze` block we +can call `resolveCall()` on it to reach the called method's symbol. + +Similarly on a `KtDeclaration` (such as a named function or property) I +can call `getSymbol()` to get the symbol for that method or property, to +for example look up parameter information. And on a `KtExpression` (such +as an if statement) I can call `getKtType()` to get the Kotlin type. + +`KtSymbol` and `KtType` are the basic primitives we're working with in +the Kotlin Analysis API. There are a number of subclasses of symbol, +such as `KtFileSymbol`, `KtFunctionSymbol`, `KtClassOrObjectSymbol`, and +so on. + +In the new implementation of `callNeverReturns`, we resolve the call, +look up the corresponding function which of course is a `KtSymbol` +itself, and from that we get the return type, and then we can just check +if it's the `Nothing` type. + +And this API works both with the old Kotlin compiler, used in lint right +now, and K2, which can be turned on via a flag and will soon be the +default (and may well be the default when you read this; we don't always +remember to update the documentation...) + +### Compiled Metadata + +Accessing Kotlin-specific knowledge not available via Kotlin PSI is one +use for the analysis API. + +Another big advantage of the Kotlin analysis API is that it gives you +access to reason about compiled Kotlin code, in the same way that the +compiler does. + +Normally, when you resolve with UAST, you just get a plain `PsiMethod` +back. For example, if we have a reference to +`kotlin.text.HexFormat.Companion`, and we resolve it in UAST, we get a +`PsiMethod` back. This is **not** a Kotlin PSI element, so our earlier +code to check if this is a companion object (`source is +KtObjectDeclaration && source.isCompanion()`) does not work -- the first +instance check fails. These compiled `PsiElement`s do not give us access +to any of the special Kotlin payload we can usually check on +`KtElement`s -- modifiers like `inline` or `infix`, default parameters, +and so on. + +The analysis API handles this properly, even for compiled code. In fact, +the earlier implementation of checking for the `Nothing` type +demonstrated this, because the methods it's analyzing from the Kotlin +standard library (`error`, `TODO`, and so on), are all compiled classes +in the Kotlin standard library jar file! + +Therefore, yes, we can use Kotlin PSI to check if a class is a companion +object if we actually have the source code for the class. But if we're +resolving a *reference* to a class, using the Kotlin analysis API is +better; it will work for both source and compiled: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +symbol is KtClassOrObjectSymbol && symbol.classKind == KtClassKind.COMPANION_OBJECT +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +#### Kotlin Analysis API Howto + +When you're using K2 with lint, a lot of UAST's handling of resolve and +types in Kotlin is actually using the analysis API behind the scenes. + +If you for example have a Kotlin PSI `KtThisExpression`, and you want to +understand how to resolve the `this` reference to another PSI element, +write the following Kotlin UAST code: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +thisReference.toUElement()?.tryResolve() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can now use a debugger to step into the `tryResolve` call, and +you'll eventually wind up in code using the Kotlin Analysis API to look +it up, and as it turns out, here's how: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +analyze(expression) { + val reference = expression.getTargetLabel()?.mainReference + ?: expression.instanceReference.mainReference + val psi = reference.resolveToSymbol()?.psi + … +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Configuring lint to use K2 + +To use K2 from a unit test, you can use the following lint test task override: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +override fun lint(): TestLintTask { + return super.lint().configureOptions { flags -> flags.setUseK2Uast(true) } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Outside of tests, you can also set the `-Dlint.use.fir.uast=true` system property in your run configurations. + +Note that at some point this flag may go away since we'll be switching +over to K2 completely. + +## Recipes + +Here are various other Kotlin Analysis scenarios and potential solutions: + +### Resolve a function call + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +val call: KtCallExpression +… +analyze(call) { + val callInfo = call.resolveCall() + if (callInfo != null) { + val symbol: KtFunctionLikeSymbol = callInfo.singleFunctionCallOrNull()?.symbol + ?: callInfo.singleConstructorCallOrNull()?.symbol + ?: callInfo.singleCallOrNull()?.symbol + … +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Resolve a variable reference + +Also use `resolveCall`, though it's not really a call: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +val expression: KtNameReferenceExpression +… +analyze(expression) { + val symbol: KtVariableLikeSymbol = expression.resolveCall()?.singleVariableAccessCall()?.symbol +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Get the containing class of a symbol + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +val containingSymbol = symbol.getContainingSymbol() +if (containingSymbol is KtNamedClassOrObjectSymbol) { + … +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Get the fully qualified name of a class + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +val containing = declarationSymbol.getContainingSymbol() +if (containing is KtClassOrObjectSymbol) { + val fqn = containing.classIdIfNonLocal?.asSingleFqName() + … +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Look up the deprecation status of a symbol + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +if (symbol is KtDeclarationSymbol) { + symbol.deprecationStatus?.let { … } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Look up visibility + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +if (symbol is KtSymbolWithVisibility) { + val visibility = symbol.visibility + if (!visibility.isPublicAPI) { + … + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Get the KtType of a class symbol + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +containingSymbol.buildSelfClassType() +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Resolve a KtType into a class + +Example: is this `KtParameter` pointing to an interface? + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +analyze(ktParameter) { + val parameterSymbol = ktParameter.getParameterSymbol() + val returnType = parameterSymbol.returnType + val typeSymbol = returnType.expandedClassSymbol + if (typeSymbol is KtClassOrObjectSymbol) { + val classKind = typeSymbol.classKind + if (classKind == KtClassKind.INTERFACE) { + … + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### See if two types refer to the same raw class (erasure): + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +if (type1 is KtNonErrorClassType && type2 is KtNonErrorClassType && + type1.classId == type2.classId) { + … +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### For an extension method, get the receiver type: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +if (declarationSymbol is KtFunctionSymbol) { + val declarationReceiverType = declarationSymbol.receiverParameter?.type +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +### Get the PsiFile containing a symbol declaration + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +val file = symbol.getContainingFileSymbol() +if (file is KtFileSymbol) { +val psi = file.psi +if (psi is PsiFile) { + … +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + diff --git a/docs/api-guide/basics.md.html b/docs/api-guide/basics.md.html index 3886e044..28f9576f 100644 --- a/docs/api-guide/basics.md.html +++ b/docs/api-guide/basics.md.html @@ -154,7 +154,7 @@ The name `Scope.JAVA_FILE` may make it sound like there should also be a `Scope.KOTLIN_FILE`. However, `JAVA_FILE` here really refers to both Java and Kotlin files since the analysis and APIs are identical - for both (using “UAST”, a universal abstract syntax tree). However, + for both (using “UAST”, a unified abstract syntax tree). However, at this point we don't want to rename it since it would break a lot of existing checks. We might introduce an alias and deprecate this one in the future. @@ -829,7 +829,7 @@ `@interface` or `annotation class`, and so on. This makes it possible to write a single analyzer which works -(”universally“) across all languages supported by UAST. And this is +across all languages supported by UAST. And this is very useful; most lint checks are doing something API or data-flow specific, not something language specific. If however you do need to implement something very language specific, see the next section, diff --git a/docs/api-guide/changes.md.html b/docs/api-guide/changes.md.html index 0d21b56a..befaa0ab 100644 --- a/docs/api-guide/changes.md.html +++ b/docs/api-guide/changes.md.html @@ -5,6 +5,19 @@ information about user visible changes to lint, see the User Guide. +**8.6** + +* UAST repeats @JvmOverloaded methods in the AST. Lint now looks for + and skips these duplications, and a new test mode also looks for + potential problems in third party checks. +* Added a new chapter to the api-guide on AST analysis, and in + particular, using the Kotlin Analysis API. +* The `UElementHandler` now supports recently added UAST element + types: `UPatternExpression` and `UBinaryExpressionWithPattern`. +* There's a new test mode checking for issues related to + `@JvmOverloads`. See the [test modes](test-modes.md.html) chapter + for more. + **8.4** * You can now use `~~` in text messages (error messages, issue diff --git a/docs/api-guide/faq.md.html b/docs/api-guide/faq.md.html index a785efc5..d0a9ac87 100644 --- a/docs/api-guide/faq.md.html +++ b/docs/api-guide/faq.md.html @@ -324,4 +324,12 @@ browse sources online: [](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/) +### How do I analyze details about Kotlin? + +The new Kotlin Analysis API offers access to detailed information about +Kotlin (types, resolution, as well as information the compiler has +figured out such as smart casts, nullability, deprecation info, and so +on). There are more details about this, as well as a number of recipes, +in the [AST Analysis chapter](ast-analysis.md.html). + diff --git a/docs/api-guide/images/java-psi.png b/docs/api-guide/images/java-psi.png new file mode 100644 index 00000000..35df46c5 Binary files /dev/null and b/docs/api-guide/images/java-psi.png differ diff --git a/docs/api-guide/images/kotlin-psi.png b/docs/api-guide/images/kotlin-psi.png new file mode 100644 index 00000000..40ebb087 Binary files /dev/null and b/docs/api-guide/images/kotlin-psi.png differ diff --git a/docs/api-guide/images/uast-if.png b/docs/api-guide/images/uast-if.png new file mode 100644 index 00000000..b63d03a0 Binary files /dev/null and b/docs/api-guide/images/uast-if.png differ diff --git a/docs/api-guide/images/uast-java.png b/docs/api-guide/images/uast-java.png new file mode 100644 index 00000000..23314e08 Binary files /dev/null and b/docs/api-guide/images/uast-java.png differ diff --git a/docs/api-guide/images/uast-kotlin-val.png b/docs/api-guide/images/uast-kotlin-val.png new file mode 100644 index 00000000..c34bd9c9 Binary files /dev/null and b/docs/api-guide/images/uast-kotlin-val.png differ diff --git a/docs/api-guide/images/uast-kotlin.png b/docs/api-guide/images/uast-kotlin.png new file mode 100644 index 00000000..57b66ade Binary files /dev/null and b/docs/api-guide/images/uast-kotlin.png differ diff --git a/docs/api-guide/images/uast-sourcepsi-type.png b/docs/api-guide/images/uast-sourcepsi-type.png new file mode 100644 index 00000000..c30290ba Binary files /dev/null and b/docs/api-guide/images/uast-sourcepsi-type.png differ diff --git a/docs/api-guide/images/uast-sourcepsi.png b/docs/api-guide/images/uast-sourcepsi.png new file mode 100644 index 00000000..02bd5532 Binary files /dev/null and b/docs/api-guide/images/uast-sourcepsi.png differ diff --git a/docs/api-guide/test-modes.md.html b/docs/api-guide/test-modes.md.html index fc8e3c66..18749ed4 100644 --- a/docs/api-guide/test-modes.md.html +++ b/docs/api-guide/test-modes.md.html @@ -18,10 +18,6 @@ * Reordering Kotlin named arguments * Replacing simple functions with Kotlin expression bodies * etc -* A test mode which changes that detectors are correctly handling - Kotlin literal expressions by running them both with and without - the upcoming UiInjectionHost mode which will change the - representation of strings in an upcoming Kotlin version * A partial analysis test mode which runs the tests in “partial analysis” mode; two phases, analysis and reporting, with minSdkVersion set to 1 during analysis and set to the true test @@ -360,7 +356,7 @@ (("foo".chars()).allMatch { (it.dec() > 0) }).toString() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -By default the parenthesis mode limits itself to "likely" unnecessary +By default the parenthesis mode limits itself to “likely” unnecessary parentheses; in particular, it won't put extra parenthesis around simple literals, like (1) or (false). You can explicitly construct `ParenthesizedTestMode(includeUnlikely=true)` if you want additional @@ -458,7 +454,7 @@ ### Whitespace Mode -This test mode inserts a number of "unnecessary" whitespace characters +This test mode inserts a number of “unnecessary” whitespace characters in valid places in the source code. This helps catch bugs where lint checks are improperly making @@ -531,4 +527,67 @@ inserts a suppress directive at the nearest applicable location. It then re-runs the analysis, and makes sure that the warning no longer appears. +### @JvmOverloads Test Mode + +When UAST comes across a method like this: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +@JvmOverloads +fun test(parameter: Int = 0) { + implementation() +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +it will “inline” these two methods in the AST, such that we see the whole +method body twice: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +fun test() { + implementation() +} + +fun test(parameter: Int) { + implementation() +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If there were additional default parameters, there would be additional +repetitions. + +This is similar to what the compiler does, since Java doesn't have +default arguments, but the compiler will actually just generate some +trampoline code to jump to the implementation with all the parameters; +it will NOT repeat the method implementation: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin +fun test(parameter: Int) { + implementation() +} + +// $FF: synthetic method +fun `test$default`(var0: Int, var1: Int, var2: Any?) { + var var0 = var0 + if ((var1 and 1) != 0) { + var0 = 0 + } + + test(var0) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Again, UAST will instead just repeat the method body. And this means +lint detectors may trigger repeatedly on the same code. In most cases +this will result in duplicated warnings. But it can also lead to other +problems; for example, a lint check which makes sure you don't have any +code duplication would incorrectly believe code fragments are repeated. + +Lint already looks for this situation and avoids visiting duplicated +methods in its shared implementations (which is dispatching to most +`Detector` callbacks). However, if you manually visit a class yourself, +you can run into this problem. + +This test mode simulates this situation by finding all methods where +it can safely add at least one default parameter, and marks it +@JvmOverloaded. It then makes sure the results are the same as before. + diff --git a/docs/book.html b/docs/book.html index 01f3c4ca..76287cc2 100644 --- a/docs/book.html +++ b/docs/book.html @@ -54,4 +54,4 @@

    -

    formatted by Markdeep 1.16  
    \ No newline at end of file +

    formatted by Markdeep 1.17  
    \ No newline at end of file diff --git a/docs/checks/AccessibilityFocus.md.html b/docs/checks/AccessibilityFocus.md.html new file mode 100644 index 00000000..809f440a --- /dev/null +++ b/docs/checks/AccessibilityFocus.md.html @@ -0,0 +1,136 @@ + +(#) Forcing accessibility focus + +!!! WARNING: Forcing accessibility focus + This is a warning. + +Id +: `AccessibilityFocus` +Summary +: Forcing accessibility focus +Severity +: Warning +Category +: Accessibility +Platform +: Any +Vendor +: Android Open Source Project +Feedback +: https://issuetracker.google.com/issues/new?component=192708 +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/AccessibilityForceFocusDetector.kt) +Tests +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/AccessibilityForceFocusDetectorTest.kt) +Copyright Year +: 2024 + +Forcing accessibility focus interferes with screen readers and gives an +inconsistent user experience, especially across apps. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/com/my/app/MyView.kt:12:Warning: Do not force accessibility focus, +as this interferes with screen readers and gives an inconsistent user +experience, especially across apps [AccessibilityFocus] + + performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null) + ---------------------------------------------------------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/com/my/app/MyView.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.my.app + +import android.content.Context +import android.view.View +import android.view.accessibility.AccessibilityEvent +import android.view.accessibility.AccessibilityNodeInfo +import android.widget.ScrollView + +class MyView(context: Context) : View(context) { + + fun foo() { + performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null) + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/AccessibilityForceFocusDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("AccessibilityFocus") + fun method() { + performAccessibilityAction(...) + } + ``` + + or + + ```java + // Java + @SuppressWarnings("AccessibilityFocus") + void method() { + performAccessibilityAction(...); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection AccessibilityFocus + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="AccessibilityFocus" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'AccessibilityFocus' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore AccessibilityFocus ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/AccessibilityScrollActions.md.html b/docs/checks/AccessibilityScrollActions.md.html new file mode 100644 index 00000000..a95db9a7 --- /dev/null +++ b/docs/checks/AccessibilityScrollActions.md.html @@ -0,0 +1,144 @@ + +(#) Incomplete Scroll Action support + +!!! WARNING: Incomplete Scroll Action support + This is a warning. + +Id +: `AccessibilityScrollActions` +Summary +: Incomplete Scroll Action support +Severity +: Warning +Category +: Accessibility +Platform +: Any +Vendor +: Android Open Source Project +Feedback +: https://issuetracker.google.com/issues/new?component=192708 +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/AccessibilityViewScrollActionsDetector.kt) +Tests +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/AccessibilityViewScrollActionsDetectorTest.kt) +Copyright Year +: 2024 + +Views that behave like `ScrollView` and support +`ACTION_SCROLL_{FORWARD,BACKWARD}` should also support +`ACTION_SCROLL_{LEFT,RIGHT}` and/or `ACTION_SCROLL_{UP,DOWN}`. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/com/my/app/MyView.kt:11:Warning: Views that behave like ScrollView +and support ACTION_SCROLL_{FORWARD,BACKWARD} should also support +ACTION_SCROLL_{LEFT,RIGHT} and/or ACTION_SCROLL_{UP,DOWN} +[AccessibilityScrollActions] + + override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo) { + ^ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/com/my/app/MyView.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.my.app + +import android.content.Context +import android.view.View +import android.view.accessibility.AccessibilityEvent +import android.view.accessibility.AccessibilityNodeInfo +import android.widget.ScrollView + +class MyView(context: Context) : View(context) { + + override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo) { + super.onInitializeAccessibilityNodeInfo(info) + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD) + info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_BACKWARD) + } + + override fun getAccessibilityClassName(): CharSequence { + return ScrollView::class.java.name + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/AccessibilityViewScrollActionsDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("AccessibilityScrollActions") + fun method() { + problematicStatement() + } + ``` + + or + + ```java + // Java + @SuppressWarnings("AccessibilityScrollActions") + void method() { + problematicStatement(); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection AccessibilityScrollActions + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="AccessibilityScrollActions" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'AccessibilityScrollActions' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore AccessibilityScrollActions ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/AccessibilityWindowStateChangedEvent.md.html b/docs/checks/AccessibilityWindowStateChangedEvent.md.html new file mode 100644 index 00000000..6805e3fc --- /dev/null +++ b/docs/checks/AccessibilityWindowStateChangedEvent.md.html @@ -0,0 +1,190 @@ + +(#) Use of accessibility window state change events + +!!! WARNING: Use of accessibility window state change events + This is a warning. + +Id +: `AccessibilityWindowStateChangedEvent` +Summary +: Use of accessibility window state change events +Severity +: Warning +Category +: Accessibility +Platform +: Any +Vendor +: Android Open Source Project +Feedback +: https://issuetracker.google.com/issues/new?component=192708 +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/AccessibilityWindowStateChangedDetector.kt) +Tests +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/AccessibilityWindowStateChangedDetectorTest.kt) +Copyright Year +: 2024 + +Sending or populating `TYPE_WINDOW_STATE_CHANGED` events in your code is +strongly discouraged. Instead, prefer to use or extend system-provided +widgets that are as far down Android's class hierarchy as possible. +System-provided widgets that are far down the hierarchy already have +most of the accessibility capabilities your app needs. If you must +extend `View` or `Canvas` directly, then still prefer to: set UI +metadata by calling `Activity.setTitle`, +`ViewCompat.setAccessibilityPaneTitle`, or +`ViewCompat.setAccessibilityLiveRegion`; implement +`View.onInitializeAccessibilityNodeInfo`; and (for very specialized +custom controls) implement `View.getAccessibilityNodeProvider` to +provide a virtual view hierarchy. These approaches allow accessibility +services to inspect the view hierarchy, rather than relying on +incomplete information provided by events. Events like +`TYPE_WINDOW_STATE_CHANGED` will be sent automatically when updating +this metadata, and so trying to manually send this event will result in +duplicate events, or the event may be ignored entirely. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/com/my/app/MyView.kt:12:Warning: Manually populating or sending +TYPE_WINDOW_STATE_CHANGED events should be avoided. They may be ignored +on certain versions of Android. Prefer setting UI metadata using +View.onInitializeAccessibilityNodeInfo, Activity.setTitle, +ViewCompat.setAccessibilityPaneTitle, etc. to inform users of crucial +changes to the UI. [AccessibilityWindowStateChangedEvent] + + sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) + -------------------------------------------------------------------- + + +src/com/my/app/MyView.kt:16:Warning: Manually populating or sending +TYPE_WINDOW_STATE_CHANGED events should be avoided. They may be ignored +on certain versions of Android. Prefer setting UI metadata using +View.onInitializeAccessibilityNodeInfo, Activity.setTitle, +ViewCompat.setAccessibilityPaneTitle, etc. to inform users of crucial +changes to the UI. [AccessibilityWindowStateChangedEvent] + + if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { + ------------------------- + + +src/com/my/app/MyView.kt:23:Warning: Manually populating or sending +TYPE_WINDOW_STATE_CHANGED events should be avoided. They may be ignored +on certain versions of Android. Prefer setting UI metadata using +View.onInitializeAccessibilityNodeInfo, Activity.setTitle, +ViewCompat.setAccessibilityPaneTitle, etc. to inform users of crucial +changes to the UI. [AccessibilityWindowStateChangedEvent] + + if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { + ------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/com/my/app/MyView.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.my.app + +import android.content.Context +import android.view.View +import android.view.accessibility.AccessibilityEvent +import android.view.accessibility.AccessibilityNodeInfo +import android.widget.ScrollView + +class MyView(context: Context) : View(context) { + + fun foo() { + sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) + } + + override fun dispatchPopulateAccessibilityEvent(event: AccessibilityEvent): Boolean { + if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { + event.contentChangeTypes = AccessibilityEvent.CONTENT_CHANGE_TYPE_TEXT + } + return super.dispatchPopulateAccessibilityEvent(event) + } + + override fun onPopulateAccessibilityEvent(event: AccessibilityEvent) { + if (event.eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { + event.contentChangeTypes = AccessibilityEvent.CONTENT_CHANGE_TYPE_TEXT + } + super.onPopulateAccessibilityEvent(event) + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/AccessibilityWindowStateChangedDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("AccessibilityWindowStateChangedEvent") + fun method() { + sendAccessibilityEvent(...) + } + ``` + + or + + ```java + // Java + @SuppressWarnings("AccessibilityWindowStateChangedEvent") + void method() { + sendAccessibilityEvent(...); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection AccessibilityWindowStateChangedEvent + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="AccessibilityWindowStateChangedEvent" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'AccessibilityWindowStateChangedEvent' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore AccessibilityWindowStateChangedEvent ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/AppLinkUrlError.md.html b/docs/checks/AppLinkUrlError.md.html index 5fcd5988..4cec55a5 100644 --- a/docs/checks/AppLinkUrlError.md.html +++ b/docs/checks/AppLinkUrlError.md.html @@ -43,7 +43,7 @@ Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text -AndroidManifest.xml:12:Error: Expected testUrl attribute +AndroidManifest.xml:15:Error: Expected testUrl attribute [AppLinkUrlError] <tools:validation /> @@ -61,6 +61,9 @@ <application> <activity> <intent-filter android:autoVerify="true"> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="example.com" android:pathPrefix="/gizmos" /> diff --git a/docs/checks/AppLinksAutoVerify.md.html b/docs/checks/AppLinksAutoVerify.md.html index 8cacf1cd..00e59245 100644 --- a/docs/checks/AppLinksAutoVerify.md.html +++ b/docs/checks/AppLinksAutoVerify.md.html @@ -43,12 +43,12 @@ Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text -AndroidManifest.xml:12:Warning: HTTP request for Digital Asset Links -JSON file https://links.dropbox.com/.well-known/assetlinks.json fails. -HTTP response code: 301 [AppLinksAutoVerify] +AndroidManifest.xml:12:Error: This host does not support app links to +your app. Checks the Digital Asset Links JSON file: +http://example.com/.well-known/assetlinks.json [AppLinksAutoVerify] - android:host="links.dropbox.com" - -------------------------------- + android:host="example.com" + -------------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Here is the source file referenced above: @@ -57,7 +57,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xml linenumbers <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.dropbox.links" > + package="com.example.helloworld" > <application android:allowBackup="true" @@ -66,7 +66,7 @@ <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http" - android:host="links.dropbox.com" + android:host="example.com" android:pathPrefix="/gizmos" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> @@ -82,7 +82,7 @@ for the unit tests for this check to see additional scenarios. The above example was automatically extracted from the first unit test -found for this lint check, `AppLinksAutoVerifyDetector.testRedirect`. +found for this lint check, `AppLinksAutoVerifyDetector.testInvalidPackage`. To report a problem with this extracted sample, visit https://issuetracker.google.com/issues/new?component=192708. diff --git a/docs/checks/ArcAnimationSpecTypeIssue.md.html b/docs/checks/ArcAnimationSpecTypeIssue.md.html index 99c1ef09..02bde024 100644 --- a/docs/checks/ArcAnimationSpecTypeIssue.md.html +++ b/docs/checks/ArcAnimationSpecTypeIssue.md.html @@ -103,17 +103,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.animation:animation-core-android:1.7.0-beta01") +implementation("androidx.compose.animation:animation-core-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.animation:animation-core-android:1.7.0-beta01' +implementation 'androidx.compose.animation:animation-core-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.animation-core-android) # libs.versions.toml [versions] -animation-core-android = "1.7.0-beta01" +animation-core-android = "1.7.0-beta04" [libraries] animation-core-android = { module = "androidx.compose.animation:animation-core-android", @@ -121,7 +121,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.animation:animation-core-android](androidx_compose_animation_animation-core-android.md.html). diff --git a/docs/checks/ArgInFormattedQuantityStringRes.md.html b/docs/checks/ArgInFormattedQuantityStringRes.md.html index 810239fe..c63f9215 100644 --- a/docs/checks/ArgInFormattedQuantityStringRes.md.html +++ b/docs/checks/ArgInFormattedQuantityStringRes.md.html @@ -92,17 +92,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -110,7 +110,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/AutoboxingStateCreation.md.html b/docs/checks/AutoboxingStateCreation.md.html index 181a9b04..627f1353 100644 --- a/docs/checks/AutoboxingStateCreation.md.html +++ b/docs/checks/AutoboxingStateCreation.md.html @@ -95,17 +95,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -113,7 +113,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/AutoboxingStateValueProperty.md.html b/docs/checks/AutoboxingStateValueProperty.md.html index 66871bae..4165d645 100644 --- a/docs/checks/AutoboxingStateValueProperty.md.html +++ b/docs/checks/AutoboxingStateValueProperty.md.html @@ -90,17 +90,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -108,7 +108,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/BindingReceiverParameter.md.html b/docs/checks/BindingReceiverParameter.md.html index db50ec84..6d7b3946 100644 --- a/docs/checks/BindingReceiverParameter.md.html +++ b/docs/checks/BindingReceiverParameter.md.html @@ -169,17 +169,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -187,7 +187,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/BindingReturnType.md.html b/docs/checks/BindingReturnType.md.html index 8327eafe..89217c04 100644 --- a/docs/checks/BindingReturnType.md.html +++ b/docs/checks/BindingReturnType.md.html @@ -105,17 +105,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -123,7 +123,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/BindsMustBeAbstract.md.html b/docs/checks/BindsMustBeAbstract.md.html index 3debdd19..f62dc215 100644 --- a/docs/checks/BindsMustBeAbstract.md.html +++ b/docs/checks/BindsMustBeAbstract.md.html @@ -104,17 +104,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -122,7 +122,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/BindsTypeMismatch.md.html b/docs/checks/BindsTypeMismatch.md.html index 8d4e24ba..1c6673d7 100644 --- a/docs/checks/BindsTypeMismatch.md.html +++ b/docs/checks/BindsTypeMismatch.md.html @@ -116,17 +116,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -134,7 +134,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/BindsWrongParameterCount.md.html b/docs/checks/BindsWrongParameterCount.md.html index 39b381b0..25dfa813 100644 --- a/docs/checks/BindsWrongParameterCount.md.html +++ b/docs/checks/BindsWrongParameterCount.md.html @@ -94,17 +94,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -112,7 +112,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/CastingViewContextToActivity.md.html b/docs/checks/CastingViewContextToActivity.md.html index 4329884a..9190533f 100644 --- a/docs/checks/CastingViewContextToActivity.md.html +++ b/docs/checks/CastingViewContextToActivity.md.html @@ -54,17 +54,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -72,7 +72,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/ComposableLambdaParameterNaming.md.html b/docs/checks/ComposableLambdaParameterNaming.md.html index 79b606b1..bb3510a6 100644 --- a/docs/checks/ComposableLambdaParameterNaming.md.html +++ b/docs/checks/ComposableLambdaParameterNaming.md.html @@ -85,17 +85,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -103,7 +103,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/ComposableLambdaParameterPosition.md.html b/docs/checks/ComposableLambdaParameterPosition.md.html index 63075854..06dbf8e5 100644 --- a/docs/checks/ComposableLambdaParameterPosition.md.html +++ b/docs/checks/ComposableLambdaParameterPosition.md.html @@ -87,17 +87,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -105,7 +105,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/ComposableNaming.md.html b/docs/checks/ComposableNaming.md.html index 3e0008c0..e6a226d9 100644 --- a/docs/checks/ComposableNaming.md.html +++ b/docs/checks/ComposableNaming.md.html @@ -87,17 +87,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -105,7 +105,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/CompositionLocalNaming.md.html b/docs/checks/CompositionLocalNaming.md.html index 6fb32aba..7e06677e 100644 --- a/docs/checks/CompositionLocalNaming.md.html +++ b/docs/checks/CompositionLocalNaming.md.html @@ -110,17 +110,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -128,7 +128,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/ConflictingOnColor.md.html b/docs/checks/ConflictingOnColor.md.html index 773c7497..21cb1b00 100644 --- a/docs/checks/ConflictingOnColor.md.html +++ b/docs/checks/ConflictingOnColor.md.html @@ -214,17 +214,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.material:material-android:1.7.0-beta01") +implementation("androidx.compose.material:material-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.material:material-android:1.7.0-beta01' +implementation 'androidx.compose.material:material-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.material-android) # libs.versions.toml [versions] -material-android = "1.7.0-beta01" +material-android = "1.7.0-beta04" [libraries] material-android = { module = "androidx.compose.material:material-android", @@ -232,7 +232,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.material:material-android](androidx_compose_material_material-android.md.html). diff --git a/docs/checks/CoroutineCreationDuringComposition.md.html b/docs/checks/CoroutineCreationDuringComposition.md.html index 8c8c0679..7d73245e 100644 --- a/docs/checks/CoroutineCreationDuringComposition.md.html +++ b/docs/checks/CoroutineCreationDuringComposition.md.html @@ -297,17 +297,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -315,7 +315,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/CredManMissingDal.md.html b/docs/checks/CredManMissingDal.md.html new file mode 100644 index 00000000..c3646d71 --- /dev/null +++ b/docs/checks/CredManMissingDal.md.html @@ -0,0 +1,119 @@ + +(#) Missing Digital Asset Link for Credential Manager + +!!! ERROR: Missing Digital Asset Link for Credential Manager + This is an error. + +Id +: `CredManMissingDal` +Summary +: Missing Digital Asset Link for Credential Manager +Severity +: Error +Category +: Correctness +Platform +: Android +Vendor +: Android Open Source Project +Feedback +: https://issuetracker.google.com/issues/new?component=192708 +Affects +: Kotlin and Java files +Editing +: This check can *not* run live in the IDE editor +See +: https://developer.android.com/identity/sign-in/credential-manager#add-support-dal +Implementation +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/CredentialManagerDigitalAssetLinkDetector.kt) +Tests +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/CredentialManagerDigitalAssetLinkDetectorTest.kt) +Copyright Year +: 2024 + +When using password sign-in through Credential Manager, an asset +statements string resource file that includes the `assetlinks.json` +files to load must be declared in the manifest using a `` +element. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +AndroidManifest.xml:3:Error: Missing tag for asset +statements for Credential Manager [CredManMissingDal] + + <application> + ----------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here are the relevant source files: + +`AndroidManifest.xml`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xml linenumbers +<manifest package="com.example.app" xmlns:android="http://schemas.android.com/apk/res/android"> + <uses-sdk android:minSdkVersion="33" android:targetSdkVersion="34" /> + <application> + <activity android:name=".MainActivity" android:exported="true"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> +</manifest> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`src/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.example.app + +import androidx.credentials.CreatePasswordRequest + +fun foo() { + val createPasswordRequest = CreatePasswordRequest("user", "pass") +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/CredentialManagerDigitalAssetLinkDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="CredManMissingDal" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'CredManMissingDal' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore CredManMissingDal ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/CredentialDependency.md.html b/docs/checks/CredentialDependency.md.html index e9d7e6b7..90721482 100644 --- a/docs/checks/CredentialDependency.md.html +++ b/docs/checks/CredentialDependency.md.html @@ -19,33 +19,29 @@ Feedback : https://issuetracker.google.com/issues/new?component=192708 Affects -: Gradle build files and TOML files +: Manifest files Editing : This check runs on the fly in the IDE editor See : https://developer.android.com/jetpack/androidx/releases/credentials Implementation -: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/GradleDetector.kt) +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/CredentialManagerDependencyDetector.kt) Tests -: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/GradleDetectorTest.kt) +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/CredentialManagerDependencyDetectorTest.kt) Copyright Year -: 2014 +: 2024 The dependency `androidx.credentials:credentials-play-services-auth` is -required to get support from Play services for the Credential Manager -API to work. For Android 14 or higher, this is optional. Please check -release notes for the latest version. +required for Android 13 and below to get support from Play services for +the Credential Manager API (`androidx.credentials:credentials`) to work. +For Android 14 and above, this is optional. Please check release notes +for the latest version. (##) Example Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text -build.gradle:2:Warning: In Android 13 or lower, -credentials-play-services-auth is required when using -androidx.credentials:credentials [CredentialDependency] - implementation 'androidx.credentials:credentials:+' - ------------------------------------ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Here is the source file referenced above: @@ -58,19 +54,19 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can also visit the -[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/GradleDetectorTest.kt) +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/CredentialManagerDependencyDetectorTest.kt) for the unit tests for this check to see additional scenarios. (##) Suppressing You can suppress false positives using one of the following mechanisms: -* Using a suppression comment like this on the line above: - - ```kt - //noinspection CredentialDependency - problematicStatement() - ``` +* Adding the suppression attribute + `tools:ignore="CredentialDependency"` on the problematic XML element + (or one of its enclosing elements). You may also need to add the + following namespace declaration on the root element in the XML file + if it's not already there: + `xmlns:tools="http://schemas.android.com/tools"`. * Using a special `lint.xml` file in the source tree which turns off the check in that folder and any sub folder. A simple file might look diff --git a/docs/checks/DeepLinkInActivityDestination.md.html b/docs/checks/DeepLinkInActivityDestination.md.html index 7d09fe85..3aa06bf4 100644 --- a/docs/checks/DeepLinkInActivityDestination.md.html +++ b/docs/checks/DeepLinkInActivityDestination.md.html @@ -21,7 +21,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=409828 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact @@ -102,17 +102,17 @@ ``` // build.gradle.kts -implementation("androidx.navigation:navigation-runtime:2.8.0-beta01") +implementation("androidx.navigation:navigation-runtime:2.8.0-beta04") // build.gradle -implementation 'androidx.navigation:navigation-runtime:2.8.0-beta01' +implementation 'androidx.navigation:navigation-runtime:2.8.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.navigation-runtime) # libs.versions.toml [versions] -navigation-runtime = "2.8.0-beta01" +navigation-runtime = "2.8.0-beta04" [libraries] navigation-runtime = { module = "androidx.navigation:navigation-runtime", @@ -120,7 +120,7 @@ } ``` -2.8.0-beta01 is the version this documentation was generated from; +2.8.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.navigation:navigation-runtime](androidx_navigation_navigation-runtime.md.html). diff --git a/docs/checks/DenyListedApi.md.html b/docs/checks/DenyListedApi.md.html index b240452e..422929c5 100644 --- a/docs/checks/DenyListedApi.md.html +++ b/docs/checks/DenyListedApi.md.html @@ -89,17 +89,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -107,7 +107,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DenyListedBlockingApi.md.html b/docs/checks/DenyListedBlockingApi.md.html index 7cd408bb..154af08b 100644 --- a/docs/checks/DenyListedBlockingApi.md.html +++ b/docs/checks/DenyListedBlockingApi.md.html @@ -88,17 +88,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -106,7 +106,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DeprecatedCall.md.html b/docs/checks/DeprecatedCall.md.html index 0c6d554e..e449d5d4 100644 --- a/docs/checks/DeprecatedCall.md.html +++ b/docs/checks/DeprecatedCall.md.html @@ -88,17 +88,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -106,7 +106,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DeprecatedSqlUsage.md.html b/docs/checks/DeprecatedSqlUsage.md.html index f58d8f22..55302778 100644 --- a/docs/checks/DeprecatedSqlUsage.md.html +++ b/docs/checks/DeprecatedSqlUsage.md.html @@ -86,17 +86,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -104,7 +104,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DetachAndAttachSameFragment.md.html b/docs/checks/DetachAndAttachSameFragment.md.html index 2128693b..4f75764c 100644 --- a/docs/checks/DetachAndAttachSameFragment.md.html +++ b/docs/checks/DetachAndAttachSameFragment.md.html @@ -55,17 +55,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -73,7 +73,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/DialogFragmentCallbacksDetector.md.html b/docs/checks/DialogFragmentCallbacksDetector.md.html index 7b83751b..3dd2f33e 100644 --- a/docs/checks/DialogFragmentCallbacksDetector.md.html +++ b/docs/checks/DialogFragmentCallbacksDetector.md.html @@ -94,17 +94,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -112,7 +112,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/DoNotCallProviders.md.html b/docs/checks/DoNotCallProviders.md.html index e170ebfc..119abdc6 100644 --- a/docs/checks/DoNotCallProviders.md.html +++ b/docs/checks/DoNotCallProviders.md.html @@ -142,17 +142,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -160,7 +160,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotExposeEitherNetInRepositories.md.html b/docs/checks/DoNotExposeEitherNetInRepositories.md.html index 1ad30f69..c0e86f7d 100644 --- a/docs/checks/DoNotExposeEitherNetInRepositories.md.html +++ b/docs/checks/DoNotExposeEitherNetInRepositories.md.html @@ -91,17 +91,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -109,7 +109,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotMock.md.html b/docs/checks/DoNotMock.md.html index d6d2376e..485a4750 100644 --- a/docs/checks/DoNotMock.md.html +++ b/docs/checks/DoNotMock.md.html @@ -177,17 +177,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -195,7 +195,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotMockAnything.md.html b/docs/checks/DoNotMockAnything.md.html index e23980ad..e1eacbdd 100644 --- a/docs/checks/DoNotMockAnything.md.html +++ b/docs/checks/DoNotMockAnything.md.html @@ -111,17 +111,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -129,7 +129,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotMockAutoValue.md.html b/docs/checks/DoNotMockAutoValue.md.html index f3f1704d..fc99814d 100644 --- a/docs/checks/DoNotMockAutoValue.md.html +++ b/docs/checks/DoNotMockAutoValue.md.html @@ -107,17 +107,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -125,7 +125,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotMockDataClass.md.html b/docs/checks/DoNotMockDataClass.md.html index da67723e..cfb45760 100644 --- a/docs/checks/DoNotMockDataClass.md.html +++ b/docs/checks/DoNotMockDataClass.md.html @@ -107,17 +107,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -125,7 +125,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotMockObjectClass.md.html b/docs/checks/DoNotMockObjectClass.md.html index 48ed023d..62c6364b 100644 --- a/docs/checks/DoNotMockObjectClass.md.html +++ b/docs/checks/DoNotMockObjectClass.md.html @@ -107,17 +107,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -125,7 +125,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotMockPlatformTypes.md.html b/docs/checks/DoNotMockPlatformTypes.md.html index cd05dd18..34927f25 100644 --- a/docs/checks/DoNotMockPlatformTypes.md.html +++ b/docs/checks/DoNotMockPlatformTypes.md.html @@ -111,17 +111,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -129,7 +129,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotMockRecordClass.md.html b/docs/checks/DoNotMockRecordClass.md.html index c81e44d3..e7e54e69 100644 --- a/docs/checks/DoNotMockRecordClass.md.html +++ b/docs/checks/DoNotMockRecordClass.md.html @@ -107,17 +107,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -125,7 +125,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/DoNotMockSealedClass.md.html b/docs/checks/DoNotMockSealedClass.md.html index 34d73d64..014805d6 100644 --- a/docs/checks/DoNotMockSealedClass.md.html +++ b/docs/checks/DoNotMockSealedClass.md.html @@ -108,17 +108,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -126,7 +126,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/EmptyNavDeepLink-2.md.html b/docs/checks/EmptyNavDeepLink-2.md.html new file mode 100644 index 00000000..a6f91326 --- /dev/null +++ b/docs/checks/EmptyNavDeepLink-2.md.html @@ -0,0 +1,183 @@ + +(#) NavDeepLink must define an uri, action, and/or mimetype to be valid. + +!!! ERROR: NavDeepLink must define an uri, action, and/or mimetype to be valid. + This is an error. + +Id +: `EmptyNavDeepLink` +Summary +: NavDeepLink must define an uri, action, and/or mimetype to be valid. +Severity +: Error +Category +: Correctness +Platform +: Any +Vendor +: Android Open Source Project +Identifier +: androidx.navigation.common +Feedback +: https://issuetracker.google.com/issues/new?component=409828 +Min +: Lint 8.0 and 8.1 +Compiled +: Lint 8.0 and 8.1 +Artifact +: [androidx.navigation:navigation-common](androidx_navigation_navigation-common.md.html) + +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/main/java/androidx/navigation/common/lint/EmptyNavDeepLinkDetector.kt) +Tests +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/test/java/androidx/navigation/common/lint/EmptyNavDeepLinkDetectorTest.kt) +Copyright Year +: 2022 + +Attempting to create an empty NavDeepLink will result in an +IllegalStateException at runtime. You may set these arguments within the +lambda of the call to navDeepLink. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/com/example/test.kt:6:Error: Creation of empty NavDeepLink +[EmptyNavDeepLink] + + navDeepLink { } + ----------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/com/example/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.example + +import androidx.navigation.navDeepLink + +fun createDeepLink() { + navDeepLink { } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/test/java/androidx/navigation/common/lint/EmptyNavDeepLinkDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +The above example was automatically extracted from the first unit test +found for this lint check, `EmptyNavDeepLinkDetector.testErrors`. +To report a problem with this extracted sample, visit +https://issuetracker.google.com/issues/new?component=409828. + +(##) Repackaged + +This lint check appears to have been packaged in other artifacts as +well. Issue id's must be unique, so you cannot combine these libraries. +Also defined in: +* EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid. (this issue) +* [EmptyNavDeepLink from androidx.navigation:navigation-compose:2.8.0-beta04](EmptyNavDeepLink.md.html) +* [EmptyNavDeepLink from androidx.navigation:navigation-common:2.8.0-beta04](EmptyNavDeepLink-2.md.html) + + +(##) Including + +!!! + This is not a built-in check. To include it, add the below dependency + to your project. + +``` +// build.gradle.kts +implementation("androidx.navigation:navigation-common:2.8.0-beta04") + +// build.gradle +implementation 'androidx.navigation:navigation-common:2.8.0-beta04' + +// build.gradle.kts with version catalogs: +implementation(libs.navigation-common) + +# libs.versions.toml +[versions] +navigation-common = "2.8.0-beta04" +[libraries] +navigation-common = { + module = "androidx.navigation:navigation-common", + version.ref = "navigation-common" +} +``` + +2.8.0-beta04 is the version this documentation was generated from; +there may be newer versions available. + +[Additional details about androidx.navigation:navigation-common](androidx_navigation_navigation-common.md.html). +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("EmptyNavDeepLink") + fun method() { + navDeepLink(...) + } + ``` + + or + + ```java + // Java + @SuppressWarnings("EmptyNavDeepLink") + void method() { + navDeepLink(...); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection EmptyNavDeepLink + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="EmptyNavDeepLink" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'EmptyNavDeepLink' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore EmptyNavDeepLink ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/EmptyNavDeepLink.md.html b/docs/checks/EmptyNavDeepLink.md.html index 88453129..0d454a72 100644 --- a/docs/checks/EmptyNavDeepLink.md.html +++ b/docs/checks/EmptyNavDeepLink.md.html @@ -21,11 +21,11 @@ Feedback : https://issuetracker.google.com/issues/new?component=409828 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact -: [androidx.navigation:navigation-common](androidx_navigation_navigation-common.md.html) +: [androidx.navigation:navigation-compose](androidx_navigation_navigation-compose.md.html) Affects : Kotlin and Java files @@ -75,6 +75,16 @@ To report a problem with this extracted sample, visit https://issuetracker.google.com/issues/new?component=409828. +(##) Repackaged + +This lint check appears to have been packaged in other artifacts as +well. Issue id's must be unique, so you cannot combine these libraries. +Also defined in: +* EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid. (this issue) +* [EmptyNavDeepLink from androidx.navigation:navigation-compose:2.8.0-beta04](EmptyNavDeepLink.md.html) +* [EmptyNavDeepLink from androidx.navigation:navigation-common:2.8.0-beta04](EmptyNavDeepLink-2.md.html) + + (##) Including !!! @@ -83,28 +93,28 @@ ``` // build.gradle.kts -implementation("androidx.navigation:navigation-common:2.8.0-beta01") +implementation("androidx.navigation:navigation-compose:2.8.0-beta04") // build.gradle -implementation 'androidx.navigation:navigation-common:2.8.0-beta01' +implementation 'androidx.navigation:navigation-compose:2.8.0-beta04' // build.gradle.kts with version catalogs: -implementation(libs.navigation-common) +implementation(libs.navigation-compose) # libs.versions.toml [versions] -navigation-common = "2.8.0-beta01" +navigation-compose = "2.8.0-beta04" [libraries] -navigation-common = { - module = "androidx.navigation:navigation-common", - version.ref = "navigation-common" +navigation-compose = { + module = "androidx.navigation:navigation-compose", + version.ref = "navigation-compose" } ``` -2.8.0-beta01 is the version this documentation was generated from; +2.8.0-beta04 is the version this documentation was generated from; there may be newer versions available. -[Additional details about androidx.navigation:navigation-common](androidx_navigation_navigation-common.md.html). +[Additional details about androidx.navigation:navigation-compose](androidx_navigation_navigation-compose.md.html). (##) Suppressing You can suppress false positives using one of the following mechanisms: diff --git a/docs/checks/ErrorProneDoNotMockUsage.md.html b/docs/checks/ErrorProneDoNotMockUsage.md.html index 3de28b09..1f431376 100644 --- a/docs/checks/ErrorProneDoNotMockUsage.md.html +++ b/docs/checks/ErrorProneDoNotMockUsage.md.html @@ -112,17 +112,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -130,7 +130,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/ExceptionMessage.md.html b/docs/checks/ExceptionMessage.md.html index a6aa12c1..0405712a 100644 --- a/docs/checks/ExceptionMessage.md.html +++ b/docs/checks/ExceptionMessage.md.html @@ -90,17 +90,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -108,7 +108,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/FlowOperatorInvokedInComposition.md.html b/docs/checks/FlowOperatorInvokedInComposition.md.html index 725cea58..1c341d31 100644 --- a/docs/checks/FlowOperatorInvokedInComposition.md.html +++ b/docs/checks/FlowOperatorInvokedInComposition.md.html @@ -296,17 +296,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -314,7 +314,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/FragmentAddMenuProvider.md.html b/docs/checks/FragmentAddMenuProvider.md.html index 26dba717..74961040 100644 --- a/docs/checks/FragmentAddMenuProvider.md.html +++ b/docs/checks/FragmentAddMenuProvider.md.html @@ -55,17 +55,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -73,7 +73,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/FragmentBackPressedCallback.md.html b/docs/checks/FragmentBackPressedCallback.md.html index 60eb76ff..c6ebafcf 100644 --- a/docs/checks/FragmentBackPressedCallback.md.html +++ b/docs/checks/FragmentBackPressedCallback.md.html @@ -55,17 +55,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -73,7 +73,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/FragmentConstructorInjection.md.html b/docs/checks/FragmentConstructorInjection.md.html index bfe7b883..71446d9a 100644 --- a/docs/checks/FragmentConstructorInjection.md.html +++ b/docs/checks/FragmentConstructorInjection.md.html @@ -139,17 +139,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -157,7 +157,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/FragmentFieldInjection.md.html b/docs/checks/FragmentFieldInjection.md.html index f353cbce..df51c1d0 100644 --- a/docs/checks/FragmentFieldInjection.md.html +++ b/docs/checks/FragmentFieldInjection.md.html @@ -110,17 +110,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -128,7 +128,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/FragmentGradleConfiguration-2.md.html b/docs/checks/FragmentGradleConfiguration-2.md.html index df3af0d0..e81669f8 100644 --- a/docs/checks/FragmentGradleConfiguration-2.md.html +++ b/docs/checks/FragmentGradleConfiguration-2.md.html @@ -82,17 +82,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment-testing-manifest:1.8.0-beta01") +implementation("androidx.fragment:fragment-testing-manifest:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment-testing-manifest:1.8.0-beta01' +implementation 'androidx.fragment:fragment-testing-manifest:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment-testing-manifest) # libs.versions.toml [versions] -fragment-testing-manifest = "1.8.0-beta01" +fragment-testing-manifest = "1.8.1" [libraries] fragment-testing-manifest = { module = "androidx.fragment:fragment-testing-manifest", @@ -100,7 +100,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment-testing-manifest](androidx_fragment_fragment-testing-manifest.md.html). diff --git a/docs/checks/FragmentGradleConfiguration.md.html b/docs/checks/FragmentGradleConfiguration.md.html index a8e9d98c..e2c28a95 100644 --- a/docs/checks/FragmentGradleConfiguration.md.html +++ b/docs/checks/FragmentGradleConfiguration.md.html @@ -83,17 +83,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment-testing:1.8.0-beta01") +implementation("androidx.fragment:fragment-testing:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment-testing:1.8.0-beta01' +implementation 'androidx.fragment:fragment-testing:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment-testing) # libs.versions.toml [versions] -fragment-testing = "1.8.0-beta01" +fragment-testing = "1.8.1" [libraries] fragment-testing = { module = "androidx.fragment:fragment-testing", @@ -101,7 +101,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment-testing](androidx_fragment_fragment-testing.md.html). diff --git a/docs/checks/FragmentLiveDataObserve.md.html b/docs/checks/FragmentLiveDataObserve.md.html index e7062ad6..0a9f5f6b 100644 --- a/docs/checks/FragmentLiveDataObserve.md.html +++ b/docs/checks/FragmentLiveDataObserve.md.html @@ -55,17 +55,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -73,7 +73,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/FragmentTagUsage.md.html b/docs/checks/FragmentTagUsage.md.html index 43cae509..fa3a88af 100644 --- a/docs/checks/FragmentTagUsage.md.html +++ b/docs/checks/FragmentTagUsage.md.html @@ -90,17 +90,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -108,7 +108,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/FrequentlyChangedStateReadInComposition.md.html b/docs/checks/FrequentlyChangedStateReadInComposition.md.html index e13c4efc..fa37bdb6 100644 --- a/docs/checks/FrequentlyChangedStateReadInComposition.md.html +++ b/docs/checks/FrequentlyChangedStateReadInComposition.md.html @@ -142,17 +142,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.foundation:foundation-android:1.7.0-beta01") +implementation("androidx.compose.foundation:foundation-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta01' +implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.foundation-android) # libs.versions.toml [versions] -foundation-android = "1.7.0-beta01" +foundation-android = "1.7.0-beta04" [libraries] foundation-android = { module = "androidx.compose.foundation:foundation-android", @@ -160,7 +160,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.foundation:foundation-android](androidx_compose_foundation_foundation-android.md.html). diff --git a/docs/checks/FullyQualifiedResource.md.html b/docs/checks/FullyQualifiedResource.md.html index 8ee2d715..2bbbfbeb 100644 --- a/docs/checks/FullyQualifiedResource.md.html +++ b/docs/checks/FullyQualifiedResource.md.html @@ -113,17 +113,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -131,7 +131,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/GuavaChecksUsed.md.html b/docs/checks/GuavaChecksUsed.md.html index 91d2892e..0b8441a0 100644 --- a/docs/checks/GuavaChecksUsed.md.html +++ b/docs/checks/GuavaChecksUsed.md.html @@ -121,17 +121,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -139,7 +139,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/GuavaPreconditionsUsedInKotlin.md.html b/docs/checks/GuavaPreconditionsUsedInKotlin.md.html index da67a8eb..5d451d08 100644 --- a/docs/checks/GuavaPreconditionsUsedInKotlin.md.html +++ b/docs/checks/GuavaPreconditionsUsedInKotlin.md.html @@ -122,17 +122,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -140,7 +140,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/InclusiveNaming.md.html b/docs/checks/InclusiveNaming.md.html index b9207dde..be4e71f6 100644 --- a/docs/checks/InclusiveNaming.md.html +++ b/docs/checks/InclusiveNaming.md.html @@ -68,8 +68,8 @@ id's must be unique, so you cannot combine these libraries. Also defined in: * InclusiveNaming: Use inclusive naming. (this issue) -* [InclusiveNaming from com.slack.lint:slack-lint-checks:0.7.3](InclusiveNaming.md.html) -* [InclusiveNaming from com.slack.lint:slack-lint-checks:0.7.3](InclusiveNaming.md.html) +* [InclusiveNaming from com.slack.lint:slack-lint-checks:0.7.4](InclusiveNaming.md.html) +* [InclusiveNaming from com.slack.lint:slack-lint-checks:0.7.4](InclusiveNaming.md.html) (##) Including @@ -81,17 +81,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -99,7 +99,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/InjectInJava.md.html b/docs/checks/InjectInJava.md.html index 8cda8394..8aa89dfb 100644 --- a/docs/checks/InjectInJava.md.html +++ b/docs/checks/InjectInJava.md.html @@ -149,17 +149,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -167,7 +167,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/InvalidColorHexValue.md.html b/docs/checks/InvalidColorHexValue.md.html index 9787efdc..300ed104 100644 --- a/docs/checks/InvalidColorHexValue.md.html +++ b/docs/checks/InvalidColorHexValue.md.html @@ -97,17 +97,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-graphics-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-graphics-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-graphics-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-graphics-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-graphics-android) # libs.versions.toml [versions] -ui-graphics-android = "1.7.0-beta01" +ui-graphics-android = "1.7.0-beta04" [libraries] ui-graphics-android = { module = "androidx.compose.ui:ui-graphics-android", @@ -115,7 +115,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-graphics-android](androidx_compose_ui_ui-graphics-android.md.html). diff --git a/docs/checks/InvalidFragmentVersionForActivityResult.md.html b/docs/checks/InvalidFragmentVersionForActivityResult.md.html index 08aef968..8a0a3868 100644 --- a/docs/checks/InvalidFragmentVersionForActivityResult.md.html +++ b/docs/checks/InvalidFragmentVersionForActivityResult.md.html @@ -23,7 +23,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=527362 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact @@ -87,17 +87,17 @@ ``` // build.gradle.kts -implementation("androidx.activity:activity:1.9.0") +implementation("androidx.activity:activity:1.10.0-alpha01") // build.gradle -implementation 'androidx.activity:activity:1.9.0' +implementation 'androidx.activity:activity:1.10.0-alpha01' // build.gradle.kts with version catalogs: implementation(libs.activity) # libs.versions.toml [versions] -activity = "1.9.0" +activity = "1.10.0-alpha01" [libraries] activity = { module = "androidx.activity:activity", @@ -105,7 +105,7 @@ } ``` -1.9.0 is the version this documentation was generated from; +1.10.0-alpha01 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.activity:activity](androidx_activity_activity.md.html). diff --git a/docs/checks/InvalidLanguageTagDelimiter.md.html b/docs/checks/InvalidLanguageTagDelimiter.md.html index d78ef429..b342f9a9 100644 --- a/docs/checks/InvalidLanguageTagDelimiter.md.html +++ b/docs/checks/InvalidLanguageTagDelimiter.md.html @@ -84,17 +84,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-text-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-text-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-text-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-text-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-text-android) # libs.versions.toml [versions] -ui-text-android = "1.7.0-beta01" +ui-text-android = "1.7.0-beta04" [libraries] ui-text-android = { module = "androidx.compose.ui:ui-text-android", @@ -102,7 +102,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-text-android](androidx_compose_ui_ui-text-android.md.html). diff --git a/docs/checks/InvalidUseOfOnBackPressed.md.html b/docs/checks/InvalidUseOfOnBackPressed.md.html index 0d8a1174..a729830b 100644 --- a/docs/checks/InvalidUseOfOnBackPressed.md.html +++ b/docs/checks/InvalidUseOfOnBackPressed.md.html @@ -21,7 +21,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=527362 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact @@ -50,17 +50,17 @@ ``` // build.gradle.kts -implementation("androidx.activity:activity:1.9.0") +implementation("androidx.activity:activity:1.10.0-alpha01") // build.gradle -implementation 'androidx.activity:activity:1.9.0' +implementation 'androidx.activity:activity:1.10.0-alpha01' // build.gradle.kts with version catalogs: implementation(libs.activity) # libs.versions.toml [versions] -activity = "1.9.0" +activity = "1.10.0-alpha01" [libraries] activity = { module = "androidx.activity:activity", @@ -68,7 +68,7 @@ } ``` -1.9.0 is the version this documentation was generated from; +1.10.0-alpha01 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.activity:activity](androidx_activity_activity.md.html). diff --git a/docs/checks/JavaOnlyDetector.md.html b/docs/checks/JavaOnlyDetector.md.html index cf1207df..ec1b3626 100644 --- a/docs/checks/JavaOnlyDetector.md.html +++ b/docs/checks/JavaOnlyDetector.md.html @@ -102,17 +102,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -120,7 +120,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/KotlinPairNotCreated.md.html b/docs/checks/KotlinPairNotCreated.md.html index 9138578a..fc2342a7 100644 --- a/docs/checks/KotlinPairNotCreated.md.html +++ b/docs/checks/KotlinPairNotCreated.md.html @@ -94,17 +94,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -112,7 +112,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/LaunchDuringComposition.md.html b/docs/checks/LaunchDuringComposition.md.html index 22cf9c27..21cdba91 100644 --- a/docs/checks/LaunchDuringComposition.md.html +++ b/docs/checks/LaunchDuringComposition.md.html @@ -21,7 +21,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=612128 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact @@ -166,17 +166,17 @@ ``` // build.gradle.kts -implementation("androidx.activity:activity-compose:1.9.0") +implementation("androidx.activity:activity-compose:1.10.0-alpha01") // build.gradle -implementation 'androidx.activity:activity-compose:1.9.0' +implementation 'androidx.activity:activity-compose:1.10.0-alpha01' // build.gradle.kts with version catalogs: implementation(libs.activity-compose) # libs.versions.toml [versions] -activity-compose = "1.9.0" +activity-compose = "1.10.0-alpha01" [libraries] activity-compose = { module = "androidx.activity:activity-compose", @@ -184,7 +184,7 @@ } ``` -1.9.0 is the version this documentation was generated from; +1.10.0-alpha01 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.activity:activity-compose](androidx_activity_activity-compose.md.html). diff --git a/docs/checks/MainScopeUsage.md.html b/docs/checks/MainScopeUsage.md.html index f5ee5865..4c21e980 100644 --- a/docs/checks/MainScopeUsage.md.html +++ b/docs/checks/MainScopeUsage.md.html @@ -88,17 +88,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -106,7 +106,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MissingColorAlphaChannel.md.html b/docs/checks/MissingColorAlphaChannel.md.html index 3704a7af..665ad896 100644 --- a/docs/checks/MissingColorAlphaChannel.md.html +++ b/docs/checks/MissingColorAlphaChannel.md.html @@ -119,17 +119,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-graphics-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-graphics-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-graphics-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-graphics-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-graphics-android) # libs.versions.toml [versions] -ui-graphics-android = "1.7.0-beta01" +ui-graphics-android = "1.7.0-beta04" [libraries] ui-graphics-android = { module = "androidx.compose.ui:ui-graphics-android", @@ -137,7 +137,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-graphics-android](androidx_compose_ui_ui-graphics-android.md.html). diff --git a/docs/checks/MissingResourceImportAlias.md.html b/docs/checks/MissingResourceImportAlias.md.html index 432af9f4..b6186342 100644 --- a/docs/checks/MissingResourceImportAlias.md.html +++ b/docs/checks/MissingResourceImportAlias.md.html @@ -107,17 +107,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -125,7 +125,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/ModifierFactoryExtensionFunction.md.html b/docs/checks/ModifierFactoryExtensionFunction.md.html index 2b826776..07e5d6ec 100644 --- a/docs/checks/ModifierFactoryExtensionFunction.md.html +++ b/docs/checks/ModifierFactoryExtensionFunction.md.html @@ -119,17 +119,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -137,7 +137,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/ModifierFactoryReturnType.md.html b/docs/checks/ModifierFactoryReturnType.md.html index 3a77ca21..d2dc43dd 100644 --- a/docs/checks/ModifierFactoryReturnType.md.html +++ b/docs/checks/ModifierFactoryReturnType.md.html @@ -85,17 +85,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -103,7 +103,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/ModifierFactoryUnreferencedReceiver.md.html b/docs/checks/ModifierFactoryUnreferencedReceiver.md.html index f83d4992..6fdac563 100644 --- a/docs/checks/ModifierFactoryUnreferencedReceiver.md.html +++ b/docs/checks/ModifierFactoryUnreferencedReceiver.md.html @@ -90,17 +90,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -108,7 +108,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/ModifierNodeInspectableProperties.md.html b/docs/checks/ModifierNodeInspectableProperties.md.html index c1c6c4cc..7253feb8 100644 --- a/docs/checks/ModifierNodeInspectableProperties.md.html +++ b/docs/checks/ModifierNodeInspectableProperties.md.html @@ -92,17 +92,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -110,7 +110,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/ModifierParameter.md.html b/docs/checks/ModifierParameter.md.html index d8600934..c437301f 100644 --- a/docs/checks/ModifierParameter.md.html +++ b/docs/checks/ModifierParameter.md.html @@ -94,17 +94,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -112,7 +112,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/MoshiUsageAdaptedByRequiresAdapter.md.html b/docs/checks/MoshiUsageAdaptedByRequiresAdapter.md.html index bb93e598..5e6cba06 100644 --- a/docs/checks/MoshiUsageAdaptedByRequiresAdapter.md.html +++ b/docs/checks/MoshiUsageAdaptedByRequiresAdapter.md.html @@ -118,17 +118,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -136,7 +136,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageAdaptedByRequiresKeep.md.html b/docs/checks/MoshiUsageAdaptedByRequiresKeep.md.html index 37952e55..433754c0 100644 --- a/docs/checks/MoshiUsageAdaptedByRequiresKeep.md.html +++ b/docs/checks/MoshiUsageAdaptedByRequiresKeep.md.html @@ -109,17 +109,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -127,7 +127,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageArray.md.html b/docs/checks/MoshiUsageArray.md.html index 1fcb7810..cdfafa5c 100644 --- a/docs/checks/MoshiUsageArray.md.html +++ b/docs/checks/MoshiUsageArray.md.html @@ -166,17 +166,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -184,7 +184,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageBlankGenerator.md.html b/docs/checks/MoshiUsageBlankGenerator.md.html index bd3f3b5b..b2e80397 100644 --- a/docs/checks/MoshiUsageBlankGenerator.md.html +++ b/docs/checks/MoshiUsageBlankGenerator.md.html @@ -84,17 +84,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -102,7 +102,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageBlankJsonName.md.html b/docs/checks/MoshiUsageBlankJsonName.md.html index b08cb668..edbc5ca0 100644 --- a/docs/checks/MoshiUsageBlankJsonName.md.html +++ b/docs/checks/MoshiUsageBlankJsonName.md.html @@ -86,17 +86,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -104,7 +104,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageBlankTypeLabel.md.html b/docs/checks/MoshiUsageBlankTypeLabel.md.html index bb405667..e9cf3319 100644 --- a/docs/checks/MoshiUsageBlankTypeLabel.md.html +++ b/docs/checks/MoshiUsageBlankTypeLabel.md.html @@ -84,17 +84,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -102,7 +102,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageClassVisibility.md.html b/docs/checks/MoshiUsageClassVisibility.md.html index 9243e444..d679c028 100644 --- a/docs/checks/MoshiUsageClassVisibility.md.html +++ b/docs/checks/MoshiUsageClassVisibility.md.html @@ -98,17 +98,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -116,7 +116,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageDoubleClassAnnotation.md.html b/docs/checks/MoshiUsageDoubleClassAnnotation.md.html index 7ccbaeea..992685ca 100644 --- a/docs/checks/MoshiUsageDoubleClassAnnotation.md.html +++ b/docs/checks/MoshiUsageDoubleClassAnnotation.md.html @@ -98,17 +98,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -116,7 +116,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageDoubleTypeLabel.md.html b/docs/checks/MoshiUsageDoubleTypeLabel.md.html index 3cee0d79..78f06a05 100644 --- a/docs/checks/MoshiUsageDoubleTypeLabel.md.html +++ b/docs/checks/MoshiUsageDoubleTypeLabel.md.html @@ -97,17 +97,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -115,7 +115,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageDuplicateJsonName.md.html b/docs/checks/MoshiUsageDuplicateJsonName.md.html index 108a9dce..11d540c4 100644 --- a/docs/checks/MoshiUsageDuplicateJsonName.md.html +++ b/docs/checks/MoshiUsageDuplicateJsonName.md.html @@ -111,17 +111,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -129,7 +129,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageEnumAnnotatedUnknown.md.html b/docs/checks/MoshiUsageEnumAnnotatedUnknown.md.html index 594b958f..c32ebebb 100644 --- a/docs/checks/MoshiUsageEnumAnnotatedUnknown.md.html +++ b/docs/checks/MoshiUsageEnumAnnotatedUnknown.md.html @@ -53,17 +53,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -71,7 +71,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageEnumCasing.md.html b/docs/checks/MoshiUsageEnumCasing.md.html index dcc560c2..081fecb9 100644 --- a/docs/checks/MoshiUsageEnumCasing.md.html +++ b/docs/checks/MoshiUsageEnumCasing.md.html @@ -53,17 +53,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -71,7 +71,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageEnumJsonClassGenerated.md.html b/docs/checks/MoshiUsageEnumJsonClassGenerated.md.html index 8a873ce3..e58ae02d 100644 --- a/docs/checks/MoshiUsageEnumJsonClassGenerated.md.html +++ b/docs/checks/MoshiUsageEnumJsonClassGenerated.md.html @@ -52,17 +52,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -70,7 +70,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageEnumMissingJsonClass.md.html b/docs/checks/MoshiUsageEnumMissingJsonClass.md.html index 170d4d3a..41894944 100644 --- a/docs/checks/MoshiUsageEnumMissingJsonClass.md.html +++ b/docs/checks/MoshiUsageEnumMissingJsonClass.md.html @@ -53,17 +53,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -71,7 +71,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageEnumMissingUnknown.md.html b/docs/checks/MoshiUsageEnumMissingUnknown.md.html index 224f9357..1c3e9714 100644 --- a/docs/checks/MoshiUsageEnumMissingUnknown.md.html +++ b/docs/checks/MoshiUsageEnumMissingUnknown.md.html @@ -53,17 +53,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -71,7 +71,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageEnumPropertyCouldBeMoshi.md.html b/docs/checks/MoshiUsageEnumPropertyCouldBeMoshi.md.html index 40920d4c..c9b0b652 100644 --- a/docs/checks/MoshiUsageEnumPropertyCouldBeMoshi.md.html +++ b/docs/checks/MoshiUsageEnumPropertyCouldBeMoshi.md.html @@ -90,17 +90,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -108,7 +108,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageEnumPropertyDefaultUnknown.md.html b/docs/checks/MoshiUsageEnumPropertyDefaultUnknown.md.html index ed6d9ca8..fd297d3e 100644 --- a/docs/checks/MoshiUsageEnumPropertyDefaultUnknown.md.html +++ b/docs/checks/MoshiUsageEnumPropertyDefaultUnknown.md.html @@ -112,17 +112,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -130,7 +130,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageGenerateAdapterShouldBeTrue.md.html b/docs/checks/MoshiUsageGenerateAdapterShouldBeTrue.md.html index a77a2737..84d9964b 100644 --- a/docs/checks/MoshiUsageGenerateAdapterShouldBeTrue.md.html +++ b/docs/checks/MoshiUsageGenerateAdapterShouldBeTrue.md.html @@ -85,17 +85,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -103,7 +103,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageGenericSealedSubtype.md.html b/docs/checks/MoshiUsageGenericSealedSubtype.md.html index fa76e4d2..3fcbc3d2 100644 --- a/docs/checks/MoshiUsageGenericSealedSubtype.md.html +++ b/docs/checks/MoshiUsageGenericSealedSubtype.md.html @@ -95,17 +95,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -113,7 +113,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageInappropriateTypeLabel.md.html b/docs/checks/MoshiUsageInappropriateTypeLabel.md.html index 249667ce..5fc1f452 100644 --- a/docs/checks/MoshiUsageInappropriateTypeLabel.md.html +++ b/docs/checks/MoshiUsageInappropriateTypeLabel.md.html @@ -108,17 +108,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -126,7 +126,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageMissingPrimary.md.html b/docs/checks/MoshiUsageMissingPrimary.md.html index fb030d78..74d68dad 100644 --- a/docs/checks/MoshiUsageMissingPrimary.md.html +++ b/docs/checks/MoshiUsageMissingPrimary.md.html @@ -86,17 +86,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -104,7 +104,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageMissingTypeLabel.md.html b/docs/checks/MoshiUsageMissingTypeLabel.md.html index 3ebf5d26..20b7acfb 100644 --- a/docs/checks/MoshiUsageMissingTypeLabel.md.html +++ b/docs/checks/MoshiUsageMissingTypeLabel.md.html @@ -98,17 +98,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -116,7 +116,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageMutableCollections.md.html b/docs/checks/MoshiUsageMutableCollections.md.html index 0297d68e..1f2a6d66 100644 --- a/docs/checks/MoshiUsageMutableCollections.md.html +++ b/docs/checks/MoshiUsageMutableCollections.md.html @@ -163,17 +163,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -181,7 +181,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageNonMoshiClassCollection.md.html b/docs/checks/MoshiUsageNonMoshiClassCollection.md.html index 7fb60e5e..17fa1d09 100644 --- a/docs/checks/MoshiUsageNonMoshiClassCollection.md.html +++ b/docs/checks/MoshiUsageNonMoshiClassCollection.md.html @@ -153,17 +153,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -171,7 +171,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageNonMoshiClassExternal.md.html b/docs/checks/MoshiUsageNonMoshiClassExternal.md.html index 8815d0b8..6f125ff6 100644 --- a/docs/checks/MoshiUsageNonMoshiClassExternal.md.html +++ b/docs/checks/MoshiUsageNonMoshiClassExternal.md.html @@ -167,17 +167,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -185,7 +185,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageNonMoshiClassInternal.md.html b/docs/checks/MoshiUsageNonMoshiClassInternal.md.html index 2cc6f2e3..9c785777 100644 --- a/docs/checks/MoshiUsageNonMoshiClassInternal.md.html +++ b/docs/checks/MoshiUsageNonMoshiClassInternal.md.html @@ -144,17 +144,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -162,7 +162,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageNonMoshiClassMap.md.html b/docs/checks/MoshiUsageNonMoshiClassMap.md.html index 21acabb0..87dd1b2e 100644 --- a/docs/checks/MoshiUsageNonMoshiClassMap.md.html +++ b/docs/checks/MoshiUsageNonMoshiClassMap.md.html @@ -143,17 +143,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -161,7 +161,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageNonMoshiClassPlatform.md.html b/docs/checks/MoshiUsageNonMoshiClassPlatform.md.html index 07f4e366..517faff2 100644 --- a/docs/checks/MoshiUsageNonMoshiClassPlatform.md.html +++ b/docs/checks/MoshiUsageNonMoshiClassPlatform.md.html @@ -145,17 +145,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -163,7 +163,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageObject.md.html b/docs/checks/MoshiUsageObject.md.html index b3193cb8..443c391f 100644 --- a/docs/checks/MoshiUsageObject.md.html +++ b/docs/checks/MoshiUsageObject.md.html @@ -86,17 +86,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -104,7 +104,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageParamNeedsInit.md.html b/docs/checks/MoshiUsageParamNeedsInit.md.html index 46e43e50..ba806f4c 100644 --- a/docs/checks/MoshiUsageParamNeedsInit.md.html +++ b/docs/checks/MoshiUsageParamNeedsInit.md.html @@ -86,17 +86,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -104,7 +104,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsagePrivateConstructor.md.html b/docs/checks/MoshiUsagePrivateConstructor.md.html index 10862dd1..0cdb4ddd 100644 --- a/docs/checks/MoshiUsagePrivateConstructor.md.html +++ b/docs/checks/MoshiUsagePrivateConstructor.md.html @@ -94,17 +94,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -112,7 +112,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsagePrivateConstructorProperty.md.html b/docs/checks/MoshiUsagePrivateConstructorProperty.md.html index 114d2a39..887d42bb 100644 --- a/docs/checks/MoshiUsagePrivateConstructorProperty.md.html +++ b/docs/checks/MoshiUsagePrivateConstructorProperty.md.html @@ -84,17 +84,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -102,7 +102,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageQualifierRetention.md.html b/docs/checks/MoshiUsageQualifierRetention.md.html index 4c71448a..6ec1b83e 100644 --- a/docs/checks/MoshiUsageQualifierRetention.md.html +++ b/docs/checks/MoshiUsageQualifierRetention.md.html @@ -119,17 +119,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -137,7 +137,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageQualifierTarget.md.html b/docs/checks/MoshiUsageQualifierTarget.md.html index 48baf3c6..4ff97d2f 100644 --- a/docs/checks/MoshiUsageQualifierTarget.md.html +++ b/docs/checks/MoshiUsageQualifierTarget.md.html @@ -118,17 +118,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -136,7 +136,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageRedundantJsonName.md.html b/docs/checks/MoshiUsageRedundantJsonName.md.html index 87b0df44..b669ed3d 100644 --- a/docs/checks/MoshiUsageRedundantJsonName.md.html +++ b/docs/checks/MoshiUsageRedundantJsonName.md.html @@ -87,17 +87,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -105,7 +105,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageRedundantSiteTarget.md.html b/docs/checks/MoshiUsageRedundantSiteTarget.md.html index 74b009af..9db5d206 100644 --- a/docs/checks/MoshiUsageRedundantSiteTarget.md.html +++ b/docs/checks/MoshiUsageRedundantSiteTarget.md.html @@ -87,17 +87,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -105,7 +105,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageSealedMustBeSealed.md.html b/docs/checks/MoshiUsageSealedMustBeSealed.md.html index cc11e4fd..dfd3b9f9 100644 --- a/docs/checks/MoshiUsageSealedMustBeSealed.md.html +++ b/docs/checks/MoshiUsageSealedMustBeSealed.md.html @@ -83,17 +83,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -101,7 +101,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageSerializedName.md.html b/docs/checks/MoshiUsageSerializedName.md.html index 6691581b..69137500 100644 --- a/docs/checks/MoshiUsageSerializedName.md.html +++ b/docs/checks/MoshiUsageSerializedName.md.html @@ -123,17 +123,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -141,7 +141,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageSnakeCase.md.html b/docs/checks/MoshiUsageSnakeCase.md.html index 24a0d656..666623d7 100644 --- a/docs/checks/MoshiUsageSnakeCase.md.html +++ b/docs/checks/MoshiUsageSnakeCase.md.html @@ -89,17 +89,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -107,7 +107,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageTransientNeedsInit.md.html b/docs/checks/MoshiUsageTransientNeedsInit.md.html index c0bbbdc0..a2116789 100644 --- a/docs/checks/MoshiUsageTransientNeedsInit.md.html +++ b/docs/checks/MoshiUsageTransientNeedsInit.md.html @@ -86,17 +86,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -104,7 +104,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageUnsupportedType.md.html b/docs/checks/MoshiUsageUnsupportedType.md.html index 6ff61293..6d45aafd 100644 --- a/docs/checks/MoshiUsageUnsupportedType.md.html +++ b/docs/checks/MoshiUsageUnsupportedType.md.html @@ -117,17 +117,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -135,7 +135,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageUseData.md.html b/docs/checks/MoshiUsageUseData.md.html index a56626d0..4739d863 100644 --- a/docs/checks/MoshiUsageUseData.md.html +++ b/docs/checks/MoshiUsageUseData.md.html @@ -88,17 +88,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -106,7 +106,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MoshiUsageVarProperty.md.html b/docs/checks/MoshiUsageVarProperty.md.html index e63c3bef..0ab3cca0 100644 --- a/docs/checks/MoshiUsageVarProperty.md.html +++ b/docs/checks/MoshiUsageVarProperty.md.html @@ -85,17 +85,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -103,7 +103,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MultipleAwaitPointerEventScopes.md.html b/docs/checks/MultipleAwaitPointerEventScopes.md.html index 6cbb9ca0..bf620220 100644 --- a/docs/checks/MultipleAwaitPointerEventScopes.md.html +++ b/docs/checks/MultipleAwaitPointerEventScopes.md.html @@ -52,17 +52,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -70,7 +70,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/MustBeInModule.md.html b/docs/checks/MustBeInModule.md.html index a004222d..a93c8a93 100644 --- a/docs/checks/MustBeInModule.md.html +++ b/docs/checks/MustBeInModule.md.html @@ -136,17 +136,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -154,7 +154,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MustUseNamedParams.md.html b/docs/checks/MustUseNamedParams.md.html index 74862eed..e9bfbeb0 100644 --- a/docs/checks/MustUseNamedParams.md.html +++ b/docs/checks/MustUseNamedParams.md.html @@ -100,17 +100,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -118,7 +118,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/MutableCollectionMutableState.md.html b/docs/checks/MutableCollectionMutableState.md.html index dc22391c..fc985a3b 100644 --- a/docs/checks/MutableCollectionMutableState.md.html +++ b/docs/checks/MutableCollectionMutableState.md.html @@ -174,17 +174,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -192,7 +192,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/NoCollectCallFound.md.html b/docs/checks/NoCollectCallFound.md.html index 60caf0e6..f60b1d01 100644 --- a/docs/checks/NoCollectCallFound.md.html +++ b/docs/checks/NoCollectCallFound.md.html @@ -21,7 +21,7 @@ Feedback : https://issuetracker.google.com/issues/new?component=612128 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact @@ -160,17 +160,17 @@ ``` // build.gradle.kts -implementation("androidx.activity:activity-compose:1.9.0") +implementation("androidx.activity:activity-compose:1.10.0-alpha01") // build.gradle -implementation 'androidx.activity:activity-compose:1.9.0' +implementation 'androidx.activity:activity-compose:1.10.0-alpha01' // build.gradle.kts with version catalogs: implementation(libs.activity-compose) # libs.versions.toml [versions] -activity-compose = "1.9.0" +activity-compose = "1.10.0-alpha01" [libraries] activity-compose = { module = "androidx.activity:activity-compose", @@ -178,7 +178,7 @@ } ``` -1.9.0 is the version this documentation was generated from; +1.10.0-alpha01 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.activity:activity-compose](androidx_activity_activity-compose.md.html). diff --git a/docs/checks/NullSafeMutableLiveData-2.md.html b/docs/checks/NullSafeMutableLiveData-2.md.html index 1abd951d..63602910 100644 --- a/docs/checks/NullSafeMutableLiveData-2.md.html +++ b/docs/checks/NullSafeMutableLiveData-2.md.html @@ -60,7 +60,7 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * NullSafeMutableLiveData: LiveData value assignment nullability mismatch (this issue) -* [NullSafeMutableLiveData from androidx.lifecycle:lifecycle-livedata-core:2.8.0](NullSafeMutableLiveData.md.html) +* [NullSafeMutableLiveData from androidx.lifecycle:lifecycle-livedata-core:2.8.3](NullSafeMutableLiveData.md.html) * [NullSafeMutableLiveData from androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.0-alpha01](NullSafeMutableLiveData-2.md.html) diff --git a/docs/checks/NullSafeMutableLiveData.md.html b/docs/checks/NullSafeMutableLiveData.md.html index d66d079b..ab7faf29 100644 --- a/docs/checks/NullSafeMutableLiveData.md.html +++ b/docs/checks/NullSafeMutableLiveData.md.html @@ -60,7 +60,7 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * NullSafeMutableLiveData: LiveData value assignment nullability mismatch (this issue) -* [NullSafeMutableLiveData from androidx.lifecycle:lifecycle-livedata-core:2.8.0](NullSafeMutableLiveData.md.html) +* [NullSafeMutableLiveData from androidx.lifecycle:lifecycle-livedata-core:2.8.3](NullSafeMutableLiveData.md.html) * [NullSafeMutableLiveData from androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.0-alpha01](NullSafeMutableLiveData-2.md.html) @@ -72,17 +72,17 @@ ``` // build.gradle.kts -implementation("androidx.lifecycle:lifecycle-livedata-core:2.8.0") +implementation("androidx.lifecycle:lifecycle-livedata-core:2.8.3") // build.gradle -implementation 'androidx.lifecycle:lifecycle-livedata-core:2.8.0' +implementation 'androidx.lifecycle:lifecycle-livedata-core:2.8.3' // build.gradle.kts with version catalogs: implementation(libs.lifecycle-livedata-core) # libs.versions.toml [versions] -lifecycle-livedata-core = "2.8.0" +lifecycle-livedata-core = "2.8.3" [libraries] lifecycle-livedata-core = { module = "androidx.lifecycle:lifecycle-livedata-core", @@ -90,7 +90,7 @@ } ``` -2.8.0 is the version this documentation was generated from; +2.8.3 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.lifecycle:lifecycle-livedata-core](androidx_lifecycle_lifecycle-livedata-core.md.html). diff --git a/docs/checks/OpaqueUnitKey.md.html b/docs/checks/OpaqueUnitKey.md.html index f7299098..05fd8341 100644 --- a/docs/checks/OpaqueUnitKey.md.html +++ b/docs/checks/OpaqueUnitKey.md.html @@ -99,17 +99,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -117,7 +117,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/ParcelizeFunctionProperty.md.html b/docs/checks/ParcelizeFunctionProperty.md.html index 7836574c..0e941a39 100644 --- a/docs/checks/ParcelizeFunctionProperty.md.html +++ b/docs/checks/ParcelizeFunctionProperty.md.html @@ -154,17 +154,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -172,7 +172,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/ProduceStateDoesNotAssignValue.md.html b/docs/checks/ProduceStateDoesNotAssignValue.md.html index 843f9d7f..61b9e9a6 100644 --- a/docs/checks/ProduceStateDoesNotAssignValue.md.html +++ b/docs/checks/ProduceStateDoesNotAssignValue.md.html @@ -131,17 +131,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -149,7 +149,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/ProtectedPermissions.md.html b/docs/checks/ProtectedPermissions.md.html index 7338eb96..44cebd77 100644 --- a/docs/checks/ProtectedPermissions.md.html +++ b/docs/checks/ProtectedPermissions.md.html @@ -637,6 +637,13 @@ <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> ------------------------------------------------------- + + +AndroidManifest.xml:101:Error: Permission is only granted to system apps +[ProtectedPermissions] + + <uses-permission android:name="android.permission.BIND_CALL_STREAMING_SERVICE" /> + ------------------------------------------------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Here is the source file referenced above: @@ -743,6 +750,7 @@ <uses-permission android:name="android.permission.WRITE_GSERVICES" /> <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> + <uses-permission android:name="android.permission.BIND_CALL_STREAMING_SERVICE" /> <application android:icon="@drawable/ic_launcher" diff --git a/docs/checks/ProtoLayoutEdgeContentLayoutResponsive-2.md.html b/docs/checks/ProtoLayoutEdgeContentLayoutResponsive-2.md.html index c5a044f2..e996e179 100644 --- a/docs/checks/ProtoLayoutEdgeContentLayoutResponsive-2.md.html +++ b/docs/checks/ProtoLayoutEdgeContentLayoutResponsive-2.md.html @@ -52,9 +52,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales. (this issue) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive.md.html) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive-2.md.html) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive-3.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive-2.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive-3.md.html) (##) Including @@ -65,17 +65,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout-material:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout-material:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout-material:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout-material:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout-material) # libs.versions.toml [versions] -protolayout-material = "1.2.0-alpha03" +protolayout-material = "1.2.0-alpha05" [libraries] protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", @@ -83,7 +83,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout-material](androidx_wear_protolayout_protolayout-material.md.html). diff --git a/docs/checks/ProtoLayoutEdgeContentLayoutResponsive-3.md.html b/docs/checks/ProtoLayoutEdgeContentLayoutResponsive-3.md.html index 4e841ceb..3f6d09d9 100644 --- a/docs/checks/ProtoLayoutEdgeContentLayoutResponsive-3.md.html +++ b/docs/checks/ProtoLayoutEdgeContentLayoutResponsive-3.md.html @@ -52,9 +52,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales. (this issue) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive.md.html) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive-2.md.html) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive-3.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive-2.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive-3.md.html) (##) Including @@ -65,17 +65,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout) # libs.versions.toml [versions] -protolayout = "1.2.0-alpha03" +protolayout = "1.2.0-alpha05" [libraries] protolayout = { module = "androidx.wear.protolayout:protolayout", @@ -83,7 +83,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout](androidx_wear_protolayout_protolayout.md.html). diff --git a/docs/checks/ProtoLayoutEdgeContentLayoutResponsive.md.html b/docs/checks/ProtoLayoutEdgeContentLayoutResponsive.md.html index 6b3b492a..1d1d3efc 100644 --- a/docs/checks/ProtoLayoutEdgeContentLayoutResponsive.md.html +++ b/docs/checks/ProtoLayoutEdgeContentLayoutResponsive.md.html @@ -52,9 +52,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales. (this issue) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive.md.html) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive-2.md.html) -* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutEdgeContentLayoutResponsive-3.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive-2.md.html) +* [ProtoLayoutEdgeContentLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutEdgeContentLayoutResponsive-3.md.html) (##) Including @@ -65,17 +65,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout-expression) # libs.versions.toml [versions] -protolayout-expression = "1.2.0-alpha03" +protolayout-expression = "1.2.0-alpha05" [libraries] protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", @@ -83,7 +83,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout-expression](androidx_wear_protolayout_protolayout-expression.md.html). diff --git a/docs/checks/ProtoLayoutMinSchema-2.md.html b/docs/checks/ProtoLayoutMinSchema-2.md.html index 7fdca5b3..bd9630b9 100644 --- a/docs/checks/ProtoLayoutMinSchema-2.md.html +++ b/docs/checks/ProtoLayoutMinSchema-2.md.html @@ -61,9 +61,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API. (this issue) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutMinSchema.md.html) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutMinSchema-2.md.html) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutMinSchema-3.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutMinSchema.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutMinSchema-2.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutMinSchema-3.md.html) (##) Including @@ -74,17 +74,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout-material:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout-material:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout-material:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout-material:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout-material) # libs.versions.toml [versions] -protolayout-material = "1.2.0-alpha03" +protolayout-material = "1.2.0-alpha05" [libraries] protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", @@ -92,7 +92,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout-material](androidx_wear_protolayout_protolayout-material.md.html). diff --git a/docs/checks/ProtoLayoutMinSchema-3.md.html b/docs/checks/ProtoLayoutMinSchema-3.md.html index ce456047..5fd0039f 100644 --- a/docs/checks/ProtoLayoutMinSchema-3.md.html +++ b/docs/checks/ProtoLayoutMinSchema-3.md.html @@ -61,9 +61,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API. (this issue) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutMinSchema.md.html) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutMinSchema-2.md.html) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutMinSchema-3.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutMinSchema.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutMinSchema-2.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutMinSchema-3.md.html) (##) Including @@ -74,17 +74,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout) # libs.versions.toml [versions] -protolayout = "1.2.0-alpha03" +protolayout = "1.2.0-alpha05" [libraries] protolayout = { module = "androidx.wear.protolayout:protolayout", @@ -92,7 +92,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout](androidx_wear_protolayout_protolayout.md.html). diff --git a/docs/checks/ProtoLayoutMinSchema.md.html b/docs/checks/ProtoLayoutMinSchema.md.html index 484a0f00..51837616 100644 --- a/docs/checks/ProtoLayoutMinSchema.md.html +++ b/docs/checks/ProtoLayoutMinSchema.md.html @@ -61,9 +61,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API. (this issue) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutMinSchema.md.html) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutMinSchema-2.md.html) -* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutMinSchema-3.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutMinSchema.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutMinSchema-2.md.html) +* [ProtoLayoutMinSchema from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutMinSchema-3.md.html) (##) Including @@ -74,17 +74,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout-expression) # libs.versions.toml [versions] -protolayout-expression = "1.2.0-alpha03" +protolayout-expression = "1.2.0-alpha05" [libraries] protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", @@ -92,7 +92,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout-expression](androidx_wear_protolayout_protolayout-expression.md.html). diff --git a/docs/checks/ProtoLayoutPrimaryLayoutResponsive-2.md.html b/docs/checks/ProtoLayoutPrimaryLayoutResponsive-2.md.html index bd885536..1e2436ea 100644 --- a/docs/checks/ProtoLayoutPrimaryLayoutResponsive-2.md.html +++ b/docs/checks/ProtoLayoutPrimaryLayoutResponsive-2.md.html @@ -50,9 +50,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales. (this issue) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive.md.html) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive-2.md.html) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive-3.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive-2.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive-3.md.html) (##) Including @@ -63,17 +63,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout-material:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout-material:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout-material:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout-material:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout-material) # libs.versions.toml [versions] -protolayout-material = "1.2.0-alpha03" +protolayout-material = "1.2.0-alpha05" [libraries] protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", @@ -81,7 +81,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout-material](androidx_wear_protolayout_protolayout-material.md.html). diff --git a/docs/checks/ProtoLayoutPrimaryLayoutResponsive-3.md.html b/docs/checks/ProtoLayoutPrimaryLayoutResponsive-3.md.html index 45cb1c48..bf2be6e7 100644 --- a/docs/checks/ProtoLayoutPrimaryLayoutResponsive-3.md.html +++ b/docs/checks/ProtoLayoutPrimaryLayoutResponsive-3.md.html @@ -50,9 +50,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales. (this issue) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive.md.html) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive-2.md.html) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive-3.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive-2.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive-3.md.html) (##) Including @@ -63,17 +63,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout) # libs.versions.toml [versions] -protolayout = "1.2.0-alpha03" +protolayout = "1.2.0-alpha05" [libraries] protolayout = { module = "androidx.wear.protolayout:protolayout", @@ -81,7 +81,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout](androidx_wear_protolayout_protolayout.md.html). diff --git a/docs/checks/ProtoLayoutPrimaryLayoutResponsive.md.html b/docs/checks/ProtoLayoutPrimaryLayoutResponsive.md.html index 218c9850..f0e99377 100644 --- a/docs/checks/ProtoLayoutPrimaryLayoutResponsive.md.html +++ b/docs/checks/ProtoLayoutPrimaryLayoutResponsive.md.html @@ -50,9 +50,9 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales. (this issue) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive.md.html) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive-2.md.html) -* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha03](ProtoLayoutPrimaryLayoutResponsive-3.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive-2.md.html) +* [ProtoLayoutPrimaryLayoutResponsive from androidx.wear.protolayout:protolayout:1.2.0-alpha05](ProtoLayoutPrimaryLayoutResponsive-3.md.html) (##) Including @@ -63,17 +63,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout-expression) # libs.versions.toml [versions] -protolayout-expression = "1.2.0-alpha03" +protolayout-expression = "1.2.0-alpha05" [libraries] protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", @@ -81,7 +81,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.wear.protolayout:protolayout-expression](androidx_wear_protolayout_protolayout-expression.md.html). diff --git a/docs/checks/ProvidesMustNotBeAbstract.md.html b/docs/checks/ProvidesMustNotBeAbstract.md.html index b8bebcb8..1cc895ac 100644 --- a/docs/checks/ProvidesMustNotBeAbstract.md.html +++ b/docs/checks/ProvidesMustNotBeAbstract.md.html @@ -167,17 +167,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -185,7 +185,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/RawDispatchersUse.md.html b/docs/checks/RawDispatchersUse.md.html index c2a1320f..1102ecb7 100644 --- a/docs/checks/RawDispatchersUse.md.html +++ b/docs/checks/RawDispatchersUse.md.html @@ -138,17 +138,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -156,7 +156,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/RedactedInJavaUsage.md.html b/docs/checks/RedactedInJavaUsage.md.html index 0e12e4a6..dedfae3b 100644 --- a/docs/checks/RedactedInJavaUsage.md.html +++ b/docs/checks/RedactedInJavaUsage.md.html @@ -118,17 +118,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -136,7 +136,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/RedundantBinds.md.html b/docs/checks/RedundantBinds.md.html index fb9d5e70..4dff5b5d 100644 --- a/docs/checks/RedundantBinds.md.html +++ b/docs/checks/RedundantBinds.md.html @@ -100,17 +100,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -118,7 +118,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/RememberReturnType.md.html b/docs/checks/RememberReturnType.md.html index b352a346..c8f3e0b4 100644 --- a/docs/checks/RememberReturnType.md.html +++ b/docs/checks/RememberReturnType.md.html @@ -302,17 +302,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -320,7 +320,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/RememberSaveableSaverParameter.md.html b/docs/checks/RememberSaveableSaverParameter.md.html index 3d6aafff..f19a6ebd 100644 --- a/docs/checks/RememberSaveableSaverParameter.md.html +++ b/docs/checks/RememberSaveableSaverParameter.md.html @@ -152,17 +152,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-saveable-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-saveable-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-saveable-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-saveable-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-saveable-android) # libs.versions.toml [versions] -runtime-saveable-android = "1.7.0-beta01" +runtime-saveable-android = "1.7.0-beta04" [libraries] runtime-saveable-android = { module = "androidx.compose.runtime:runtime-saveable-android", @@ -170,7 +170,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-saveable-android](androidx_compose_runtime_runtime-saveable-android.md.html). diff --git a/docs/checks/RepeatOnLifecycleWrongUsage-2.md.html b/docs/checks/RepeatOnLifecycleWrongUsage-2.md.html index d1bd1689..73ae1361 100644 --- a/docs/checks/RepeatOnLifecycleWrongUsage-2.md.html +++ b/docs/checks/RepeatOnLifecycleWrongUsage-2.md.html @@ -48,7 +48,7 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * RepeatOnLifecycleWrongUsage: Wrong usage of repeatOnLifecycle. (this issue) -* [RepeatOnLifecycleWrongUsage from androidx.lifecycle:lifecycle-runtime-android:2.8.0](RepeatOnLifecycleWrongUsage.md.html) +* [RepeatOnLifecycleWrongUsage from androidx.lifecycle:lifecycle-runtime-android:2.8.3](RepeatOnLifecycleWrongUsage.md.html) * [RepeatOnLifecycleWrongUsage from androidx.lifecycle:lifecycle-runtime-ktx:2.8.0-alpha01](RepeatOnLifecycleWrongUsage-2.md.html) diff --git a/docs/checks/RepeatOnLifecycleWrongUsage.md.html b/docs/checks/RepeatOnLifecycleWrongUsage.md.html index 911efb47..ae2d8e76 100644 --- a/docs/checks/RepeatOnLifecycleWrongUsage.md.html +++ b/docs/checks/RepeatOnLifecycleWrongUsage.md.html @@ -48,7 +48,7 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * RepeatOnLifecycleWrongUsage: Wrong usage of repeatOnLifecycle. (this issue) -* [RepeatOnLifecycleWrongUsage from androidx.lifecycle:lifecycle-runtime-android:2.8.0](RepeatOnLifecycleWrongUsage.md.html) +* [RepeatOnLifecycleWrongUsage from androidx.lifecycle:lifecycle-runtime-android:2.8.3](RepeatOnLifecycleWrongUsage.md.html) * [RepeatOnLifecycleWrongUsage from androidx.lifecycle:lifecycle-runtime-ktx:2.8.0-alpha01](RepeatOnLifecycleWrongUsage-2.md.html) @@ -60,17 +60,17 @@ ``` // build.gradle.kts -implementation("androidx.lifecycle:lifecycle-runtime-android:2.8.0") +implementation("androidx.lifecycle:lifecycle-runtime-android:2.8.3") // build.gradle -implementation 'androidx.lifecycle:lifecycle-runtime-android:2.8.0' +implementation 'androidx.lifecycle:lifecycle-runtime-android:2.8.3' // build.gradle.kts with version catalogs: implementation(libs.lifecycle-runtime-android) # libs.versions.toml [versions] -lifecycle-runtime-android = "2.8.0" +lifecycle-runtime-android = "2.8.3" [libraries] lifecycle-runtime-android = { module = "androidx.lifecycle:lifecycle-runtime-android", @@ -78,7 +78,7 @@ } ``` -2.8.0 is the version this documentation was generated from; +2.8.3 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.lifecycle:lifecycle-runtime-android](androidx_lifecycle_lifecycle-runtime-android.md.html). diff --git a/docs/checks/RestrictCallsTo.md.html b/docs/checks/RestrictCallsTo.md.html index ece75b77..0e22805d 100644 --- a/docs/checks/RestrictCallsTo.md.html +++ b/docs/checks/RestrictCallsTo.md.html @@ -124,17 +124,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -142,7 +142,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/RetrofitUsage.md.html b/docs/checks/RetrofitUsage.md.html index b445bce4..b54e2d3c 100644 --- a/docs/checks/RetrofitUsage.md.html +++ b/docs/checks/RetrofitUsage.md.html @@ -117,17 +117,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -135,7 +135,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/ReturnFromAwaitPointerEventScope.md.html b/docs/checks/ReturnFromAwaitPointerEventScope.md.html index c0646b5d..d791e68d 100644 --- a/docs/checks/ReturnFromAwaitPointerEventScope.md.html +++ b/docs/checks/ReturnFromAwaitPointerEventScope.md.html @@ -52,17 +52,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -70,7 +70,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/SerializableUsage.md.html b/docs/checks/SerializableUsage.md.html index fad5f3d9..50274417 100644 --- a/docs/checks/SerializableUsage.md.html +++ b/docs/checks/SerializableUsage.md.html @@ -86,17 +86,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -104,7 +104,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/ServiceCast.md.html b/docs/checks/ServiceCast.md.html index 2e435594..fcf0bbba 100644 --- a/docs/checks/ServiceCast.md.html +++ b/docs/checks/ServiceCast.md.html @@ -23,9 +23,9 @@ Editing : This check runs on the fly in the IDE editor Implementation -: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ServiceCastDetector.java) +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ServiceCastDetector.kt) Tests -: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.java) +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.kt) Copyright Year : 2013 @@ -99,7 +99,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can also visit the -[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.java) +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.kt) for the unit tests for this check to see additional scenarios. The above example was automatically extracted from the first unit test diff --git a/docs/checks/SetTextI18n.md.html b/docs/checks/SetTextI18n.md.html index 771595d3..c9544d2b 100644 --- a/docs/checks/SetTextI18n.md.html +++ b/docs/checks/SetTextI18n.md.html @@ -102,6 +102,7 @@ Button btn = new Button(context); btn.setText("User " + getUserName()); btn.setText(String.format("%s of %s users", Integer.toString(5), Integer.toString(10))); + view.setText(""); } private static String getUserName() { diff --git a/docs/checks/SpanMarkPointMissingMask.md.html b/docs/checks/SpanMarkPointMissingMask.md.html index a5c95985..f54cc142 100644 --- a/docs/checks/SpanMarkPointMissingMask.md.html +++ b/docs/checks/SpanMarkPointMissingMask.md.html @@ -92,17 +92,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -110,7 +110,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/StateFlowValueCalledInComposition.md.html b/docs/checks/StateFlowValueCalledInComposition.md.html index 6d8a8dec..aecd1a91 100644 --- a/docs/checks/StateFlowValueCalledInComposition.md.html +++ b/docs/checks/StateFlowValueCalledInComposition.md.html @@ -136,17 +136,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -154,7 +154,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/SubscribeOnMain.md.html b/docs/checks/SubscribeOnMain.md.html index 24a84b77..c57f4005 100644 --- a/docs/checks/SubscribeOnMain.md.html +++ b/docs/checks/SubscribeOnMain.md.html @@ -98,17 +98,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -116,7 +116,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/SuspiciousCompositionLocalModifierRead.md.html b/docs/checks/SuspiciousCompositionLocalModifierRead.md.html index 1d98c479..f6cf6799 100644 --- a/docs/checks/SuspiciousCompositionLocalModifierRead.md.html +++ b/docs/checks/SuspiciousCompositionLocalModifierRead.md.html @@ -120,17 +120,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -138,7 +138,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/SuspiciousModifierThen.md.html b/docs/checks/SuspiciousModifierThen.md.html index 7da9b986..cff228ac 100644 --- a/docs/checks/SuspiciousModifierThen.md.html +++ b/docs/checks/SuspiciousModifierThen.md.html @@ -113,17 +113,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -131,7 +131,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/TestAppLink.md.html b/docs/checks/TestAppLink.md.html index d17c7fba..3f64765f 100644 --- a/docs/checks/TestAppLink.md.html +++ b/docs/checks/TestAppLink.md.html @@ -39,7 +39,7 @@ Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text -AndroidManifest.xml:12:Error: Validation nodes should be in the tools: +AndroidManifest.xml:15:Error: Validation nodes should be in the tools: namespace to ensure they are removed from the manifest at build time [TestAppLink] @@ -58,6 +58,9 @@ <application> <activity> <intent-filter android:autoVerify="true"> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="example.com" android:pathPrefix="/gizmos" /> diff --git a/docs/checks/TestLifecycleOwnerInCoroutine.md.html b/docs/checks/TestLifecycleOwnerInCoroutine.md.html index 0f39d110..9ad01ec3 100644 --- a/docs/checks/TestLifecycleOwnerInCoroutine.md.html +++ b/docs/checks/TestLifecycleOwnerInCoroutine.md.html @@ -51,17 +51,17 @@ ``` // build.gradle.kts -implementation("androidx.lifecycle:lifecycle-runtime-testing:2.8.0") +implementation("androidx.lifecycle:lifecycle-runtime-testing:2.8.3") // build.gradle -implementation 'androidx.lifecycle:lifecycle-runtime-testing:2.8.0' +implementation 'androidx.lifecycle:lifecycle-runtime-testing:2.8.3' // build.gradle.kts with version catalogs: implementation(libs.lifecycle-runtime-testing) # libs.versions.toml [versions] -lifecycle-runtime-testing = "2.8.0" +lifecycle-runtime-testing = "2.8.3" [libraries] lifecycle-runtime-testing = { module = "androidx.lifecycle:lifecycle-runtime-testing", @@ -69,7 +69,7 @@ } ``` -2.8.0 is the version this documentation was generated from; +2.8.3 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.lifecycle:lifecycle-runtime-testing](androidx_lifecycle_lifecycle-runtime-testing.md.html). diff --git a/docs/checks/TestManifestGradleConfiguration.md.html b/docs/checks/TestManifestGradleConfiguration.md.html index 7f736642..1c5216d9 100644 --- a/docs/checks/TestManifestGradleConfiguration.md.html +++ b/docs/checks/TestManifestGradleConfiguration.md.html @@ -130,17 +130,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-test-manifest:1.7.0-beta01") +implementation("androidx.compose.ui:ui-test-manifest:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-test-manifest:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-test-manifest:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-test-manifest) # libs.versions.toml [versions] -ui-test-manifest = "1.7.0-beta01" +ui-test-manifest = "1.7.0-beta04" [libraries] ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", @@ -148,7 +148,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-test-manifest](androidx_compose_ui_ui-test-manifest.md.html). diff --git a/docs/checks/UnnecessaryComposedModifier.md.html b/docs/checks/UnnecessaryComposedModifier.md.html index a14bee50..5221a719 100644 --- a/docs/checks/UnnecessaryComposedModifier.md.html +++ b/docs/checks/UnnecessaryComposedModifier.md.html @@ -122,17 +122,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -140,7 +140,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.ui:ui-android](androidx_compose_ui_ui-android.md.html). diff --git a/docs/checks/UnrememberedAnimatable.md.html b/docs/checks/UnrememberedAnimatable.md.html index d835d9c1..8333748f 100644 --- a/docs/checks/UnrememberedAnimatable.md.html +++ b/docs/checks/UnrememberedAnimatable.md.html @@ -319,17 +319,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.animation:animation-core-android:1.7.0-beta01") +implementation("androidx.compose.animation:animation-core-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.animation:animation-core-android:1.7.0-beta01' +implementation 'androidx.compose.animation:animation-core-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.animation-core-android) # libs.versions.toml [versions] -animation-core-android = "1.7.0-beta01" +animation-core-android = "1.7.0-beta04" [libraries] animation-core-android = { module = "androidx.compose.animation:animation-core-android", @@ -337,7 +337,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.animation:animation-core-android](androidx_compose_animation_animation-core-android.md.html). diff --git a/docs/checks/UnrememberedMutableInteractionSource.md.html b/docs/checks/UnrememberedMutableInteractionSource.md.html index 97ae1186..ce781f3e 100644 --- a/docs/checks/UnrememberedMutableInteractionSource.md.html +++ b/docs/checks/UnrememberedMutableInteractionSource.md.html @@ -182,17 +182,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.foundation:foundation-android:1.7.0-beta01") +implementation("androidx.compose.foundation:foundation-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta01' +implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.foundation-android) # libs.versions.toml [versions] -foundation-android = "1.7.0-beta01" +foundation-android = "1.7.0-beta04" [libraries] foundation-android = { module = "androidx.compose.foundation:foundation-android", @@ -200,7 +200,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.foundation:foundation-android](androidx_compose_foundation_foundation-android.md.html). diff --git a/docs/checks/UnrememberedMutableState.md.html b/docs/checks/UnrememberedMutableState.md.html index 82bfaa87..c0b1566d 100644 --- a/docs/checks/UnrememberedMutableState.md.html +++ b/docs/checks/UnrememberedMutableState.md.html @@ -364,17 +364,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -382,7 +382,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.runtime:runtime-android](androidx_compose_runtime_runtime-android.md.html). diff --git a/docs/checks/UnsafeLifecycleWhenUsage-2.md.html b/docs/checks/UnsafeLifecycleWhenUsage-2.md.html index c1c5d212..2de502cd 100644 --- a/docs/checks/UnsafeLifecycleWhenUsage-2.md.html +++ b/docs/checks/UnsafeLifecycleWhenUsage-2.md.html @@ -57,7 +57,7 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * UnsafeLifecycleWhenUsage: Unsafe UI operation in finally/catch of Lifecycle.whenStarted of similar method (this issue) -* [UnsafeLifecycleWhenUsage from androidx.lifecycle:lifecycle-runtime-android:2.8.0](UnsafeLifecycleWhenUsage.md.html) +* [UnsafeLifecycleWhenUsage from androidx.lifecycle:lifecycle-runtime-android:2.8.3](UnsafeLifecycleWhenUsage.md.html) * [UnsafeLifecycleWhenUsage from androidx.lifecycle:lifecycle-runtime-ktx:2.8.0-alpha01](UnsafeLifecycleWhenUsage-2.md.html) diff --git a/docs/checks/UnsafeLifecycleWhenUsage.md.html b/docs/checks/UnsafeLifecycleWhenUsage.md.html index 97252931..52346493 100644 --- a/docs/checks/UnsafeLifecycleWhenUsage.md.html +++ b/docs/checks/UnsafeLifecycleWhenUsage.md.html @@ -57,7 +57,7 @@ well. Issue id's must be unique, so you cannot combine these libraries. Also defined in: * UnsafeLifecycleWhenUsage: Unsafe UI operation in finally/catch of Lifecycle.whenStarted of similar method (this issue) -* [UnsafeLifecycleWhenUsage from androidx.lifecycle:lifecycle-runtime-android:2.8.0](UnsafeLifecycleWhenUsage.md.html) +* [UnsafeLifecycleWhenUsage from androidx.lifecycle:lifecycle-runtime-android:2.8.3](UnsafeLifecycleWhenUsage.md.html) * [UnsafeLifecycleWhenUsage from androidx.lifecycle:lifecycle-runtime-ktx:2.8.0-alpha01](UnsafeLifecycleWhenUsage-2.md.html) @@ -69,17 +69,17 @@ ``` // build.gradle.kts -implementation("androidx.lifecycle:lifecycle-runtime-android:2.8.0") +implementation("androidx.lifecycle:lifecycle-runtime-android:2.8.3") // build.gradle -implementation 'androidx.lifecycle:lifecycle-runtime-android:2.8.0' +implementation 'androidx.lifecycle:lifecycle-runtime-android:2.8.3' // build.gradle.kts with version catalogs: implementation(libs.lifecycle-runtime-android) # libs.versions.toml [versions] -lifecycle-runtime-android = "2.8.0" +lifecycle-runtime-android = "2.8.3" [libraries] lifecycle-runtime-android = { module = "androidx.lifecycle:lifecycle-runtime-android", @@ -87,7 +87,7 @@ } ``` -2.8.0 is the version this documentation was generated from; +2.8.3 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.lifecycle:lifecycle-runtime-android](androidx_lifecycle_lifecycle-runtime-android.md.html). diff --git a/docs/checks/UnsafeRepeatOnLifecycleDetector.md.html b/docs/checks/UnsafeRepeatOnLifecycleDetector.md.html index 4e68d8c8..0348a20d 100644 --- a/docs/checks/UnsafeRepeatOnLifecycleDetector.md.html +++ b/docs/checks/UnsafeRepeatOnLifecycleDetector.md.html @@ -49,17 +49,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -67,7 +67,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/UnusedBoxWithConstraintsScope.md.html b/docs/checks/UnusedBoxWithConstraintsScope.md.html index 1b12074d..940e7ff2 100644 --- a/docs/checks/UnusedBoxWithConstraintsScope.md.html +++ b/docs/checks/UnusedBoxWithConstraintsScope.md.html @@ -111,17 +111,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.foundation:foundation-android:1.7.0-beta01") +implementation("androidx.compose.foundation:foundation-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta01' +implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.foundation-android) # libs.versions.toml [versions] -foundation-android = "1.7.0-beta01" +foundation-android = "1.7.0-beta04" [libraries] foundation-android = { module = "androidx.compose.foundation:foundation-android", @@ -129,7 +129,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.foundation:foundation-android](androidx_compose_foundation_foundation-android.md.html). diff --git a/docs/checks/UnusedContentLambdaTargetStateParameter.md.html b/docs/checks/UnusedContentLambdaTargetStateParameter.md.html index 9de93485..0addd472 100644 --- a/docs/checks/UnusedContentLambdaTargetStateParameter.md.html +++ b/docs/checks/UnusedContentLambdaTargetStateParameter.md.html @@ -179,17 +179,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.animation:animation-android:1.7.0-beta01") +implementation("androidx.compose.animation:animation-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.animation:animation-android:1.7.0-beta01' +implementation 'androidx.compose.animation:animation-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.animation-android) # libs.versions.toml [versions] -animation-android = "1.7.0-beta01" +animation-android = "1.7.0-beta04" [libraries] animation-android = { module = "androidx.compose.animation:animation-android", @@ -197,7 +197,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.animation:animation-android](androidx_compose_animation_animation-android.md.html). diff --git a/docs/checks/UnusedCrossfadeTargetStateParameter.md.html b/docs/checks/UnusedCrossfadeTargetStateParameter.md.html index bbeb043c..112586ce 100644 --- a/docs/checks/UnusedCrossfadeTargetStateParameter.md.html +++ b/docs/checks/UnusedCrossfadeTargetStateParameter.md.html @@ -131,17 +131,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.animation:animation-android:1.7.0-beta01") +implementation("androidx.compose.animation:animation-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.animation:animation-android:1.7.0-beta01' +implementation 'androidx.compose.animation:animation-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.animation-android) # libs.versions.toml [versions] -animation-android = "1.7.0-beta01" +animation-android = "1.7.0-beta04" [libraries] animation-android = { module = "androidx.compose.animation:animation-android", @@ -149,7 +149,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.animation:animation-android](androidx_compose_animation_animation-android.md.html). diff --git a/docs/checks/UnusedMaterial3ScaffoldPaddingParameter.md.html b/docs/checks/UnusedMaterial3ScaffoldPaddingParameter.md.html index f1bd226f..7023755c 100644 --- a/docs/checks/UnusedMaterial3ScaffoldPaddingParameter.md.html +++ b/docs/checks/UnusedMaterial3ScaffoldPaddingParameter.md.html @@ -127,17 +127,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.material3:material3-android:1.3.0-beta01") +implementation("androidx.compose.material3:material3-android:1.3.0-beta04") // build.gradle -implementation 'androidx.compose.material3:material3-android:1.3.0-beta01' +implementation 'androidx.compose.material3:material3-android:1.3.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.material3-android) # libs.versions.toml [versions] -material3-android = "1.3.0-beta01" +material3-android = "1.3.0-beta04" [libraries] material3-android = { module = "androidx.compose.material3:material3-android", @@ -145,7 +145,7 @@ } ``` -1.3.0-beta01 is the version this documentation was generated from; +1.3.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.material3:material3-android](androidx_compose_material3_material3-android.md.html). diff --git a/docs/checks/UnusedMaterialScaffoldPaddingParameter.md.html b/docs/checks/UnusedMaterialScaffoldPaddingParameter.md.html index 765362ef..1b7985a6 100644 --- a/docs/checks/UnusedMaterialScaffoldPaddingParameter.md.html +++ b/docs/checks/UnusedMaterialScaffoldPaddingParameter.md.html @@ -127,17 +127,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.material:material-android:1.7.0-beta01") +implementation("androidx.compose.material:material-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.material:material-android:1.7.0-beta01' +implementation 'androidx.compose.material:material-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.material-android) # libs.versions.toml [versions] -material-android = "1.7.0-beta01" +material-android = "1.7.0-beta04" [libraries] material-android = { module = "androidx.compose.material:material-android", @@ -145,7 +145,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.material:material-android](androidx_compose_material_material-android.md.html). diff --git a/docs/checks/UnusedTransitionTargetStateParameter.md.html b/docs/checks/UnusedTransitionTargetStateParameter.md.html index deac888b..398d45a8 100644 --- a/docs/checks/UnusedTransitionTargetStateParameter.md.html +++ b/docs/checks/UnusedTransitionTargetStateParameter.md.html @@ -134,17 +134,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.animation:animation-core-android:1.7.0-beta01") +implementation("androidx.compose.animation:animation-core-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.animation:animation-core-android:1.7.0-beta01' +implementation 'androidx.compose.animation:animation-core-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.animation-core-android) # libs.versions.toml [versions] -animation-core-android = "1.7.0-beta01" +animation-core-android = "1.7.0-beta04" [libraries] animation-core-android = { module = "androidx.compose.animation:animation-core-android", @@ -152,7 +152,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.animation:animation-core-android](androidx_compose_animation_animation-core-android.md.html). diff --git a/docs/checks/UseAndroidAlpha.md.html b/docs/checks/UseAndroidAlpha.md.html index bc9b1bcb..19e976ea 100644 --- a/docs/checks/UseAndroidAlpha.md.html +++ b/docs/checks/UseAndroidAlpha.md.html @@ -51,17 +51,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -69,7 +69,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UseAppTint.md.html b/docs/checks/UseAppTint.md.html index 91911e54..cbc0f4e9 100644 --- a/docs/checks/UseAppTint.md.html +++ b/docs/checks/UseAppTint.md.html @@ -51,17 +51,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -69,7 +69,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UseCompatLoadingForColorStateLists.md.html b/docs/checks/UseCompatLoadingForColorStateLists.md.html index 83d0b131..fb12ac3b 100644 --- a/docs/checks/UseCompatLoadingForColorStateLists.md.html +++ b/docs/checks/UseCompatLoadingForColorStateLists.md.html @@ -48,17 +48,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -66,7 +66,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UseCompatLoadingForDrawables.md.html b/docs/checks/UseCompatLoadingForDrawables.md.html index f1298f57..03d58506 100644 --- a/docs/checks/UseCompatLoadingForDrawables.md.html +++ b/docs/checks/UseCompatLoadingForDrawables.md.html @@ -48,17 +48,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -66,7 +66,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UseCompatTextViewDrawableApis.md.html b/docs/checks/UseCompatTextViewDrawableApis.md.html index d833d515..96cb5f6e 100644 --- a/docs/checks/UseCompatTextViewDrawableApis.md.html +++ b/docs/checks/UseCompatTextViewDrawableApis.md.html @@ -48,17 +48,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -66,7 +66,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UseCompatTextViewDrawableXml.md.html b/docs/checks/UseCompatTextViewDrawableXml.md.html index fd60f04f..a9710189 100644 --- a/docs/checks/UseCompatTextViewDrawableXml.md.html +++ b/docs/checks/UseCompatTextViewDrawableXml.md.html @@ -52,17 +52,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -70,7 +70,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UseGetLayoutInflater.md.html b/docs/checks/UseGetLayoutInflater.md.html index 6f397bef..78b68d09 100644 --- a/docs/checks/UseGetLayoutInflater.md.html +++ b/docs/checks/UseGetLayoutInflater.md.html @@ -100,17 +100,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -118,7 +118,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/UseOfNonLambdaOffsetOverload.md.html b/docs/checks/UseOfNonLambdaOffsetOverload.md.html index 73da3dcc..77b54a46 100644 --- a/docs/checks/UseOfNonLambdaOffsetOverload.md.html +++ b/docs/checks/UseOfNonLambdaOffsetOverload.md.html @@ -50,17 +50,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.foundation:foundation-android:1.7.0-beta01") +implementation("androidx.compose.foundation:foundation-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta01' +implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.foundation-android) # libs.versions.toml [versions] -foundation-android = "1.7.0-beta01" +foundation-android = "1.7.0-beta04" [libraries] foundation-android = { module = "androidx.compose.foundation:foundation-android", @@ -68,7 +68,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.foundation:foundation-android](androidx_compose_foundation_foundation-android.md.html). diff --git a/docs/checks/UseRequireInsteadOfGet.md.html b/docs/checks/UseRequireInsteadOfGet.md.html index fe830ce4..cc3f7304 100644 --- a/docs/checks/UseRequireInsteadOfGet.md.html +++ b/docs/checks/UseRequireInsteadOfGet.md.html @@ -169,17 +169,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -187,7 +187,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.fragment:fragment](androidx_fragment_fragment.md.html). diff --git a/docs/checks/UseSupportActionBar.md.html b/docs/checks/UseSupportActionBar.md.html index 2281753d..c2fc0443 100644 --- a/docs/checks/UseSupportActionBar.md.html +++ b/docs/checks/UseSupportActionBar.md.html @@ -48,17 +48,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -66,7 +66,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UseSwitchCompatOrMaterialCode.md.html b/docs/checks/UseSwitchCompatOrMaterialCode.md.html index 11ce6d0b..9f88763c 100644 --- a/docs/checks/UseSwitchCompatOrMaterialCode.md.html +++ b/docs/checks/UseSwitchCompatOrMaterialCode.md.html @@ -49,17 +49,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -67,7 +67,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UseSwitchCompatOrMaterialXml.md.html b/docs/checks/UseSwitchCompatOrMaterialXml.md.html index a48e5dba..da001f44 100644 --- a/docs/checks/UseSwitchCompatOrMaterialXml.md.html +++ b/docs/checks/UseSwitchCompatOrMaterialXml.md.html @@ -49,17 +49,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -67,7 +67,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/UsingMaterialAndMaterial3Libraries.md.html b/docs/checks/UsingMaterialAndMaterial3Libraries.md.html index d9c19797..c8ccb00e 100644 --- a/docs/checks/UsingMaterialAndMaterial3Libraries.md.html +++ b/docs/checks/UsingMaterialAndMaterial3Libraries.md.html @@ -88,17 +88,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.material3:material3-android:1.3.0-beta01") +implementation("androidx.compose.material3:material3-android:1.3.0-beta04") // build.gradle -implementation 'androidx.compose.material3:material3-android:1.3.0-beta01' +implementation 'androidx.compose.material3:material3-android:1.3.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.material3-android) # libs.versions.toml [versions] -material3-android = "1.3.0-beta01" +material3-android = "1.3.0-beta04" [libraries] material3-android = { module = "androidx.compose.material3:material3-android", @@ -106,7 +106,7 @@ } ``` -1.3.0-beta01 is the version this documentation was generated from; +1.3.0-beta04 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.compose.material3:material3-android](androidx_compose_material3_material3-android.md.html). diff --git a/docs/checks/UsingOnClickInXml.md.html b/docs/checks/UsingOnClickInXml.md.html index e1ad2d52..4646278a 100644 --- a/docs/checks/UsingOnClickInXml.md.html +++ b/docs/checks/UsingOnClickInXml.md.html @@ -49,17 +49,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -67,7 +67,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. [Additional details about androidx.appcompat:appcompat](androidx_appcompat_appcompat.md.html). diff --git a/docs/checks/WearableActionDuplicate.md.html b/docs/checks/WearableActionDuplicate.md.html index 61287745..efd7fecd 100644 --- a/docs/checks/WearableActionDuplicate.md.html +++ b/docs/checks/WearableActionDuplicate.md.html @@ -42,7 +42,7 @@ Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text -src/main/AndroidManifest.xml:36:Warning: Duplicate watch face +src/main/AndroidManifest.xml:20:Warning: Duplicate watch face configuration activities found [WearableActionDuplicate] <action android:name="androidx.wear.watchface.editor.action.WATCH_FACE_EDITOR" /> diff --git a/docs/checks/WifiManagerLeak.md.html b/docs/checks/WifiManagerLeak.md.html index 605ea5f9..a9def000 100644 --- a/docs/checks/WifiManagerLeak.md.html +++ b/docs/checks/WifiManagerLeak.md.html @@ -23,9 +23,9 @@ Editing : This check runs on the fly in the IDE editor Implementation -: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ServiceCastDetector.java) +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ServiceCastDetector.kt) Tests -: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.java) +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.kt) Copyright Year : 2013 @@ -217,7 +217,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can also visit the -[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.java) +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.kt) for the unit tests for this check to see additional scenarios. The above example was automatically extracted from the first unit test diff --git a/docs/checks/WifiManagerPotentialLeak.md.html b/docs/checks/WifiManagerPotentialLeak.md.html index a0ae7bc0..08f13b8e 100644 --- a/docs/checks/WifiManagerPotentialLeak.md.html +++ b/docs/checks/WifiManagerPotentialLeak.md.html @@ -23,9 +23,9 @@ Editing : This check runs on the fly in the IDE editor Implementation -: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ServiceCastDetector.java) +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/ServiceCastDetector.kt) Tests -: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.java) +: [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.kt) Copyright Year : 2013 @@ -160,7 +160,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can also visit the -[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.java) +[source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/ServiceCastDetectorTest.kt) for the unit tests for this check to see additional scenarios. The above example was automatically extracted from the first unit test diff --git a/docs/checks/WrongNavigateRouteType.md.html b/docs/checks/WrongNavigateRouteType.md.html new file mode 100644 index 00000000..0f9e4ec3 --- /dev/null +++ b/docs/checks/WrongNavigateRouteType.md.html @@ -0,0 +1,285 @@ + +(#) Navigation route should be an object literal or a destination class instance with arguments. + +!!! ERROR: Navigation route should be an object literal or a destination class instance with arguments. + This is an error. + +Id +: `WrongNavigateRouteType` +Summary +: Navigation route should be an object literal or a destination class instance with arguments. +Severity +: Error +Category +: Correctness +Platform +: Any +Vendor +: Android Open Source Project +Identifier +: androidx.navigation.runtime +Feedback +: https://issuetracker.google.com/issues/new?component=409828 +Min +: Lint 8.0 and 8.1 +Compiled +: Lint 8.0 and 8.1 +Artifact +: [androidx.navigation:navigation-runtime](androidx_navigation_navigation-runtime.md.html) + +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-runtime-lint/src/main/java/androidx/navigation/runtime/lint/WrongNavigateRouteDetector.kt) +Tests +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-runtime-lint/src/test/java/androidx/navigation/runtime/lint/WrongNavigateRouteDetectorTest.kt) +Copyright Year +: 2024 + +If the destination class contains arguments, the route is expected to be +class instance with the arguments filled in. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/com/example/test.kt:7:Error: The route should be a destination class +instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = TestClass) + --------- + + +src/com/example/test.kt:8:Error: The route should be a destination class +instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = TestClass::class) + ---------------- + + +src/com/example/test.kt:9:Error: The route should be a destination class +instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = TestClassWithArg) + ---------------- + + +src/com/example/test.kt:10:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = TestClassWithArg::class) + ----------------------- + + +src/com/example/test.kt:11:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = TestInterface) + ------------- + + +src/com/example/test.kt:12:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = TestInterface::class) + -------------------- + + +src/com/example/test.kt:13:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = InterfaceChildClass) + ------------------- + + +src/com/example/test.kt:14:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = InterfaceChildClass::class) + -------------------------- + + +src/com/example/test.kt:15:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = TestAbstract) + ------------ + + +src/com/example/test.kt:16:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = TestAbstract::class) + ------------------- + + +src/com/example/test.kt:17:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = AbstractChildClass) + ------------------ + + +src/com/example/test.kt:18:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = AbstractChildClass::class) + ------------------------- + + +src/com/example/test.kt:19:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = InterfaceChildClass::class) + -------------------------- + + +src/com/example/test.kt:20:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = Outer.InnerClass) + ---------------- + + +src/com/example/test.kt:21:Error: The route should be a destination +class instance or destination object. [WrongNavigateRouteType] + + navController.navigate(route = Outer.InnerClass::class) + ----------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/com/example/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.example + +import androidx.navigation.* + +fun createGraph() { + val navController = NavController() + navController.navigate(route = TestClass) + navController.navigate(route = TestClass::class) + navController.navigate(route = TestClassWithArg) + navController.navigate(route = TestClassWithArg::class) + navController.navigate(route = TestInterface) + navController.navigate(route = TestInterface::class) + navController.navigate(route = InterfaceChildClass) + navController.navigate(route = InterfaceChildClass::class) + navController.navigate(route = TestAbstract) + navController.navigate(route = TestAbstract::class) + navController.navigate(route = AbstractChildClass) + navController.navigate(route = AbstractChildClass::class) + navController.navigate(route = InterfaceChildClass::class) + navController.navigate(route = Outer.InnerClass) + navController.navigate(route = Outer.InnerClass::class) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-runtime-lint/src/test/java/androidx/navigation/runtime/lint/WrongNavigateRouteDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +The above example was automatically extracted from the first unit test +found for this lint check, `WrongNavigateRouteDetector.testHasError`. +To report a problem with this extracted sample, visit +https://issuetracker.google.com/issues/new?component=409828. + +(##) Including + +!!! + This is not a built-in check. To include it, add the below dependency + to your project. + +``` +// build.gradle.kts +implementation("androidx.navigation:navigation-runtime:2.8.0-beta04") + +// build.gradle +implementation 'androidx.navigation:navigation-runtime:2.8.0-beta04' + +// build.gradle.kts with version catalogs: +implementation(libs.navigation-runtime) + +# libs.versions.toml +[versions] +navigation-runtime = "2.8.0-beta04" +[libraries] +navigation-runtime = { + module = "androidx.navigation:navigation-runtime", + version.ref = "navigation-runtime" +} +``` + +2.8.0-beta04 is the version this documentation was generated from; +there may be newer versions available. + +[Additional details about androidx.navigation:navigation-runtime](androidx_navigation_navigation-runtime.md.html). +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("WrongNavigateRouteType") + fun method() { + navigate(...) + } + ``` + + or + + ```java + // Java + @SuppressWarnings("WrongNavigateRouteType") + void method() { + navigate(...); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection WrongNavigateRouteType + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="WrongNavigateRouteType" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'WrongNavigateRouteType' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore WrongNavigateRouteType ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/WrongResourceImportAlias.md.html b/docs/checks/WrongResourceImportAlias.md.html index 279b781d..25b6ffe4 100644 --- a/docs/checks/WrongResourceImportAlias.md.html +++ b/docs/checks/WrongResourceImportAlias.md.html @@ -108,17 +108,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -126,7 +126,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. [Additional details about com.slack.lint:slack-lint-checks](com_slack_lint_slack-lint-checks.md.html). diff --git a/docs/checks/WrongStartDestinationType-2.md.html b/docs/checks/WrongStartDestinationType-2.md.html new file mode 100644 index 00000000..c07ccc29 --- /dev/null +++ b/docs/checks/WrongStartDestinationType-2.md.html @@ -0,0 +1,262 @@ + +(#) If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. + +!!! ERROR: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. + This is an error. + +Id +: `WrongStartDestinationType` +Summary +: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. +Severity +: Error +Category +: Correctness +Platform +: Any +Vendor +: Android Open Source Project +Identifier +: androidx.navigation.runtime +Feedback +: https://issuetracker.google.com/issues/new?component=409828 +Min +: Lint 8.0 and 8.1 +Compiled +: Lint 8.0 and 8.1 +Artifact +: [androidx.navigation:navigation-runtime](androidx_navigation_navigation-runtime.md.html) + +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/main/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetector.kt) +Tests +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/test/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetectorTest.kt) +Copyright Year +: 2024 + +If the startDestination contains arguments, the arguments must be +provided to navigation via a fully formed route (a class instance with +argumentsfilled in), or else it will be treated as a case of missing +arguments. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/com/example/test.kt:8:Error: StartDestination should not be a simple +class name reference. +Did you mean to call its constructor TestClass(...)? +If the class TestClass does not contain arguments, +you can also pass in its KClass reference TestClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestClass) + --------- + + +src/com/example/test.kt:9:Error: StartDestination should not be a simple +class name reference. +Did you mean to call its constructor TestClassWithArg(...)? +If the class TestClassWithArg does not contain arguments, +you can also pass in its KClass reference TestClassWithArg::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestClassWithArg) + ---------------- + + +src/com/example/test.kt:10:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor InnerClass(...)? +If the class InnerClass does not contain arguments, +you can also pass in its KClass reference InnerClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = Outer.InnerClass) + ---------------- + + +src/com/example/test.kt:11:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor InterfaceChildClass(...)? +If the class InterfaceChildClass does not contain arguments, +you can also pass in its KClass reference InterfaceChildClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = InterfaceChildClass) + ------------------- + + +src/com/example/test.kt:12:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor AbstractChildClass(...)? +If the class AbstractChildClass does not contain arguments, +you can also pass in its KClass reference AbstractChildClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = AbstractChildClass) + ------------------ + + +src/com/example/test.kt:13:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor TestInterface(...)? +If the class TestInterface does not contain arguments, +you can also pass in its KClass reference TestInterface::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestInterface) + ------------- + + +src/com/example/test.kt:14:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor TestAbstract(...)? +If the class TestAbstract does not contain arguments, +you can also pass in its KClass reference TestAbstract::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestAbstract) + ------------ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/com/example/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.example + +import androidx.navigation.* + +fun createGraph() { + val provider = NavigatorProvider() + val builder = NavGraphBuilder(provider, TestGraph, null) + builder.navigation(startDestination = TestClass) + builder.navigation(startDestination = TestClassWithArg) + builder.navigation(startDestination = Outer.InnerClass) + builder.navigation(startDestination = InterfaceChildClass) + builder.navigation(startDestination = AbstractChildClass) + builder.navigation(startDestination = TestInterface) + builder.navigation(startDestination = TestAbstract) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/test/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +The above example was automatically extracted from the first unit test +found for this lint check, `WrongStartDestinationTypeDetector.testNavGraphBuilder_classHasError`. +To report a problem with this extracted sample, visit +https://issuetracker.google.com/issues/new?component=409828. + +(##) Conflicts + +This issue id has also been used by other, unrelated lint checks. Issue +id's must be unique, so you cannot combine these libraries. Also defined +in: +* WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. (this issue) +* [WrongStartDestinationType from androidx.navigation:navigation-compose:2.8.0-beta04](WrongStartDestinationType.md.html) +* [WrongStartDestinationType from androidx.navigation:navigation-common:2.8.0-beta04](WrongStartDestinationType-3.md.html) + + +(##) Including + +!!! + This is not a built-in check. To include it, add the below dependency + to your project. + +``` +// build.gradle.kts +implementation("androidx.navigation:navigation-runtime:2.8.0-beta04") + +// build.gradle +implementation 'androidx.navigation:navigation-runtime:2.8.0-beta04' + +// build.gradle.kts with version catalogs: +implementation(libs.navigation-runtime) + +# libs.versions.toml +[versions] +navigation-runtime = "2.8.0-beta04" +[libraries] +navigation-runtime = { + module = "androidx.navigation:navigation-runtime", + version.ref = "navigation-runtime" +} +``` + +2.8.0-beta04 is the version this documentation was generated from; +there may be newer versions available. + +[Additional details about androidx.navigation:navigation-runtime](androidx_navigation_navigation-runtime.md.html). +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("WrongStartDestinationType") + fun method() { + createGraph(...) + } + ``` + + or + + ```java + // Java + @SuppressWarnings("WrongStartDestinationType") + void method() { + createGraph(...); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection WrongStartDestinationType + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="WrongStartDestinationType" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'WrongStartDestinationType' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore WrongStartDestinationType ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/WrongStartDestinationType-3.md.html b/docs/checks/WrongStartDestinationType-3.md.html new file mode 100644 index 00000000..c152f9be --- /dev/null +++ b/docs/checks/WrongStartDestinationType-3.md.html @@ -0,0 +1,262 @@ + +(#) If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. + +!!! ERROR: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. + This is an error. + +Id +: `WrongStartDestinationType` +Summary +: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. +Severity +: Error +Category +: Correctness +Platform +: Any +Vendor +: Android Open Source Project +Identifier +: androidx.navigation.common +Feedback +: https://issuetracker.google.com/issues/new?component=409828 +Min +: Lint 8.0 and 8.1 +Compiled +: Lint 8.0 and 8.1 +Artifact +: [androidx.navigation:navigation-common](androidx_navigation_navigation-common.md.html) + +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/main/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetector.kt) +Tests +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/test/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetectorTest.kt) +Copyright Year +: 2024 + +If the startDestination contains arguments, the arguments must be +provided to navigation via a fully formed route (a class instance with +argumentsfilled in), or else it will be treated as a case of missing +arguments. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/com/example/test.kt:8:Error: StartDestination should not be a simple +class name reference. +Did you mean to call its constructor TestClass(...)? +If the class TestClass does not contain arguments, +you can also pass in its KClass reference TestClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestClass) + --------- + + +src/com/example/test.kt:9:Error: StartDestination should not be a simple +class name reference. +Did you mean to call its constructor TestClassWithArg(...)? +If the class TestClassWithArg does not contain arguments, +you can also pass in its KClass reference TestClassWithArg::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestClassWithArg) + ---------------- + + +src/com/example/test.kt:10:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor InnerClass(...)? +If the class InnerClass does not contain arguments, +you can also pass in its KClass reference InnerClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = Outer.InnerClass) + ---------------- + + +src/com/example/test.kt:11:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor InterfaceChildClass(...)? +If the class InterfaceChildClass does not contain arguments, +you can also pass in its KClass reference InterfaceChildClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = InterfaceChildClass) + ------------------- + + +src/com/example/test.kt:12:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor AbstractChildClass(...)? +If the class AbstractChildClass does not contain arguments, +you can also pass in its KClass reference AbstractChildClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = AbstractChildClass) + ------------------ + + +src/com/example/test.kt:13:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor TestInterface(...)? +If the class TestInterface does not contain arguments, +you can also pass in its KClass reference TestInterface::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestInterface) + ------------- + + +src/com/example/test.kt:14:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor TestAbstract(...)? +If the class TestAbstract does not contain arguments, +you can also pass in its KClass reference TestAbstract::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestAbstract) + ------------ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/com/example/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.example + +import androidx.navigation.* + +fun createGraph() { + val provider = NavigatorProvider() + val builder = NavGraphBuilder(provider, TestGraph, null) + builder.navigation(startDestination = TestClass) + builder.navigation(startDestination = TestClassWithArg) + builder.navigation(startDestination = Outer.InnerClass) + builder.navigation(startDestination = InterfaceChildClass) + builder.navigation(startDestination = AbstractChildClass) + builder.navigation(startDestination = TestInterface) + builder.navigation(startDestination = TestAbstract) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/test/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +The above example was automatically extracted from the first unit test +found for this lint check, `WrongStartDestinationTypeDetector.testNavGraphBuilder_classHasError`. +To report a problem with this extracted sample, visit +https://issuetracker.google.com/issues/new?component=409828. + +(##) Repackaged + +This lint check appears to have been packaged in other artifacts as +well. Issue id's must be unique, so you cannot combine these libraries. +Also defined in: +* WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. (this issue) +* [WrongStartDestinationType from androidx.navigation:navigation-compose:2.8.0-beta04](WrongStartDestinationType.md.html) +* [WrongStartDestinationType from androidx.navigation:navigation-common:2.8.0-beta04](WrongStartDestinationType-3.md.html) + + +(##) Including + +!!! + This is not a built-in check. To include it, add the below dependency + to your project. + +``` +// build.gradle.kts +implementation("androidx.navigation:navigation-common:2.8.0-beta04") + +// build.gradle +implementation 'androidx.navigation:navigation-common:2.8.0-beta04' + +// build.gradle.kts with version catalogs: +implementation(libs.navigation-common) + +# libs.versions.toml +[versions] +navigation-common = "2.8.0-beta04" +[libraries] +navigation-common = { + module = "androidx.navigation:navigation-common", + version.ref = "navigation-common" +} +``` + +2.8.0-beta04 is the version this documentation was generated from; +there may be newer versions available. + +[Additional details about androidx.navigation:navigation-common](androidx_navigation_navigation-common.md.html). +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("WrongStartDestinationType") + fun method() { + navigation(...) + } + ``` + + or + + ```java + // Java + @SuppressWarnings("WrongStartDestinationType") + void method() { + navigation(...); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection WrongStartDestinationType + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="WrongStartDestinationType" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'WrongStartDestinationType' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore WrongStartDestinationType ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/WrongStartDestinationType.md.html b/docs/checks/WrongStartDestinationType.md.html new file mode 100644 index 00000000..e1441c6d --- /dev/null +++ b/docs/checks/WrongStartDestinationType.md.html @@ -0,0 +1,262 @@ + +(#) If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. + +!!! ERROR: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. + This is an error. + +Id +: `WrongStartDestinationType` +Summary +: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. +Severity +: Error +Category +: Correctness +Platform +: Any +Vendor +: Android Open Source Project +Identifier +: androidx.navigation.common +Feedback +: https://issuetracker.google.com/issues/new?component=409828 +Min +: Lint 8.0 and 8.1 +Compiled +: Lint 8.0 and 8.1 +Artifact +: [androidx.navigation:navigation-compose](androidx_navigation_navigation-compose.md.html) + +Affects +: Kotlin and Java files +Editing +: This check runs on the fly in the IDE editor +Implementation +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/main/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetector.kt) +Tests +: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/test/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetectorTest.kt) +Copyright Year +: 2024 + +If the startDestination contains arguments, the arguments must be +provided to navigation via a fully formed route (a class instance with +argumentsfilled in), or else it will be treated as a case of missing +arguments. + +(##) Example + +Here is an example of lint warnings produced by this check: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text +src/com/example/test.kt:8:Error: StartDestination should not be a simple +class name reference. +Did you mean to call its constructor TestClass(...)? +If the class TestClass does not contain arguments, +you can also pass in its KClass reference TestClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestClass) + --------- + + +src/com/example/test.kt:9:Error: StartDestination should not be a simple +class name reference. +Did you mean to call its constructor TestClassWithArg(...)? +If the class TestClassWithArg does not contain arguments, +you can also pass in its KClass reference TestClassWithArg::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestClassWithArg) + ---------------- + + +src/com/example/test.kt:10:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor InnerClass(...)? +If the class InnerClass does not contain arguments, +you can also pass in its KClass reference InnerClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = Outer.InnerClass) + ---------------- + + +src/com/example/test.kt:11:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor InterfaceChildClass(...)? +If the class InterfaceChildClass does not contain arguments, +you can also pass in its KClass reference InterfaceChildClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = InterfaceChildClass) + ------------------- + + +src/com/example/test.kt:12:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor AbstractChildClass(...)? +If the class AbstractChildClass does not contain arguments, +you can also pass in its KClass reference AbstractChildClass::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = AbstractChildClass) + ------------------ + + +src/com/example/test.kt:13:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor TestInterface(...)? +If the class TestInterface does not contain arguments, +you can also pass in its KClass reference TestInterface::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestInterface) + ------------- + + +src/com/example/test.kt:14:Error: StartDestination should not be a +simple class name reference. +Did you mean to call its constructor TestAbstract(...)? +If the class TestAbstract does not contain arguments, +you can also pass in its KClass reference TestAbstract::class +[WrongStartDestinationType] + + builder.navigation<TestGraph>(startDestination = TestAbstract) + ------------ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is the source file referenced above: + +`src/com/example/test.kt`: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~kotlin linenumbers +package com.example + +import androidx.navigation.* + +fun createGraph() { + val provider = NavigatorProvider() + val builder = NavGraphBuilder(provider, TestGraph, null) + builder.navigation(startDestination = TestClass) + builder.navigation(startDestination = TestClassWithArg) + builder.navigation(startDestination = Outer.InnerClass) + builder.navigation(startDestination = InterfaceChildClass) + builder.navigation(startDestination = AbstractChildClass) + builder.navigation(startDestination = TestInterface) + builder.navigation(startDestination = TestAbstract) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can also visit the +[source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/navigation/navigation-common-lint/src/test/java/androidx/navigation/common/lint/WrongStartDestinationTypeDetectorTest.kt) +for the unit tests for this check to see additional scenarios. + +The above example was automatically extracted from the first unit test +found for this lint check, `WrongStartDestinationTypeDetector.testNavGraphBuilder_classHasError`. +To report a problem with this extracted sample, visit +https://issuetracker.google.com/issues/new?component=409828. + +(##) Repackaged + +This lint check appears to have been packaged in other artifacts as +well. Issue id's must be unique, so you cannot combine these libraries. +Also defined in: +* WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class. (this issue) +* [WrongStartDestinationType from androidx.navigation:navigation-compose:2.8.0-beta04](WrongStartDestinationType.md.html) +* [WrongStartDestinationType from androidx.navigation:navigation-common:2.8.0-beta04](WrongStartDestinationType-3.md.html) + + +(##) Including + +!!! + This is not a built-in check. To include it, add the below dependency + to your project. + +``` +// build.gradle.kts +implementation("androidx.navigation:navigation-compose:2.8.0-beta04") + +// build.gradle +implementation 'androidx.navigation:navigation-compose:2.8.0-beta04' + +// build.gradle.kts with version catalogs: +implementation(libs.navigation-compose) + +# libs.versions.toml +[versions] +navigation-compose = "2.8.0-beta04" +[libraries] +navigation-compose = { + module = "androidx.navigation:navigation-compose", + version.ref = "navigation-compose" +} +``` + +2.8.0-beta04 is the version this documentation was generated from; +there may be newer versions available. + +[Additional details about androidx.navigation:navigation-compose](androidx_navigation_navigation-compose.md.html). +(##) Suppressing + +You can suppress false positives using one of the following mechanisms: + +* Using a suppression annotation like this on the enclosing + element: + + ```kt + // Kotlin + @Suppress("WrongStartDestinationType") + fun method() { + navigation(...) + } + ``` + + or + + ```java + // Java + @SuppressWarnings("WrongStartDestinationType") + void method() { + navigation(...); + } + ``` + +* Using a suppression comment like this on the line above: + + ```kt + //noinspection WrongStartDestinationType + problematicStatement() + ``` + +* Using a special `lint.xml` file in the source tree which turns off + the check in that folder and any sub folder. A simple file might look + like this: + ```xml + <?xml version="1.0" encoding="UTF-8"?> + <lint> + <issue id="WrongStartDestinationType" severity="ignore" /> + </lint> + ``` + Instead of `ignore` you can also change the severity here, for + example from `error` to `warning`. You can find additional + documentation on how to filter issues by path, regular expression and + so on + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). + +* In Gradle projects, using the DSL syntax to configure lint. For + example, you can use something like + ```gradle + lintOptions { + disable 'WrongStartDestinationType' + } + ``` + In Android projects this should be nested inside an `android { }` + block. + +* For manual invocations of `lint`, using the `--ignore` flag: + ``` + $ lint --ignore WrongStartDestinationType ...` + ``` + +* Last, but not least, using baselines, as discussed + [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html). + + \ No newline at end of file diff --git a/docs/checks/androidx_activity_activity-compose.md.html b/docs/checks/androidx_activity_activity-compose.md.html index 382dee0e..23f948d2 100644 --- a/docs/checks/androidx_activity_activity-compose.md.html +++ b/docs/checks/androidx_activity_activity-compose.md.html @@ -13,11 +13,11 @@ Feedback : https://issuetracker.google.com/issues/new?component=612128 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact -: androidx.activity:activity-compose:1.9.0 +: androidx.activity:activity-compose:1.10.0-alpha01 (##) Included Issues @@ -34,17 +34,17 @@ ``` // build.gradle.kts -implementation("androidx.activity:activity-compose:1.9.0") +implementation("androidx.activity:activity-compose:1.10.0-alpha01") // build.gradle -implementation 'androidx.activity:activity-compose:1.9.0' +implementation 'androidx.activity:activity-compose:1.10.0-alpha01' // build.gradle.kts with version catalogs: implementation(libs.activity-compose) # libs.versions.toml [versions] -activity-compose = "1.9.0" +activity-compose = "1.10.0-alpha01" [libraries] activity-compose = { module = "androidx.activity:activity-compose", @@ -52,7 +52,7 @@ } ``` -1.9.0 is the version this documentation was generated from; +1.10.0-alpha01 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -66,6 +66,7 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.10.0-alpha01|2024/06/26| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.9.0|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.8.2|2023/12/13| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.8.1|2023/11/15| 2| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_activity_activity.md.html b/docs/checks/androidx_activity_activity.md.html index ca5d46ee..40e80a08 100644 --- a/docs/checks/androidx_activity_activity.md.html +++ b/docs/checks/androidx_activity_activity.md.html @@ -14,11 +14,11 @@ Feedback : https://issuetracker.google.com/issues/new?component=527362 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact -: androidx.activity:activity:1.9.0 +: androidx.activity:activity:1.10.0-alpha01 (##) Included Issues @@ -35,17 +35,17 @@ ``` // build.gradle.kts -implementation("androidx.activity:activity:1.9.0") +implementation("androidx.activity:activity:1.10.0-alpha01") // build.gradle -implementation 'androidx.activity:activity:1.9.0' +implementation 'androidx.activity:activity:1.10.0-alpha01' // build.gradle.kts with version catalogs: implementation(libs.activity) # libs.versions.toml [versions] -activity = "1.9.0" +activity = "1.10.0-alpha01" [libraries] activity = { module = "androidx.activity:activity", @@ -53,7 +53,7 @@ } ``` -1.9.0 is the version this documentation was generated from; +1.10.0-alpha01 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -68,6 +68,7 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.10.0-alpha01|2024/06/26| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.9.0|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.8.2|2023/12/13| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.8.1|2023/11/15| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_appcompat_appcompat.md.html b/docs/checks/androidx_appcompat_appcompat.md.html index f5cc7bce..c85fc12d 100644 --- a/docs/checks/androidx_appcompat_appcompat.md.html +++ b/docs/checks/androidx_appcompat_appcompat.md.html @@ -18,7 +18,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.appcompat:appcompat:1.7.0-rc01 +: androidx.appcompat:appcompat:1.7.0 (##) Included Issues @@ -43,17 +43,17 @@ ``` // build.gradle.kts -implementation("androidx.appcompat:appcompat:1.7.0-rc01") +implementation("androidx.appcompat:appcompat:1.7.0") // build.gradle -implementation 'androidx.appcompat:appcompat:1.7.0-rc01' +implementation 'androidx.appcompat:appcompat:1.7.0' // build.gradle.kts with version catalogs: implementation(libs.appcompat) # libs.versions.toml [versions] -appcompat = "1.7.0-rc01" +appcompat = "1.7.0" [libraries] appcompat = { module = "androidx.appcompat:appcompat", @@ -61,7 +61,7 @@ } ``` -1.7.0-rc01 is the version this documentation was generated from; +1.7.0 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -78,11 +78,7 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| -| 1.7.0-rc01|2024/05/14| 10| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.7.0-beta01|2024/05/01| 10| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.7.0-alpha03|2023/07/26| 10| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.7.0-alpha02|2023/02/08| 10| Yes| 7.3 and 7.4| 7.0| -| 1.7.0-alpha01|2022/10/05| 10| Yes| 7.3 and 7.4| 7.0| +| 1.7.0|2024/05/29| 10| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.1|2023/02/08| 10| Yes| 7.3 and 7.4| 7.0| | 1.6.0|2023/01/11| 10| Yes| 7.3 and 7.4| 7.0| | 1.5.1|2022/09/07| 10| Yes| 7.3 and 7.4| 7.0| diff --git a/docs/checks/androidx_compose_animation_animation-android.md.html b/docs/checks/androidx_compose_animation_animation-android.md.html index 49022080..62550fdd 100644 --- a/docs/checks/androidx_compose_animation_animation-android.md.html +++ b/docs/checks/androidx_compose_animation_animation-android.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.animation:animation-android:1.7.0-beta01 +: androidx.compose.animation:animation-android:1.7.0-beta04 (##) Included Issues @@ -34,17 +34,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.animation:animation-android:1.7.0-beta01") +implementation("androidx.compose.animation:animation-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.animation:animation-android:1.7.0-beta01' +implementation 'androidx.compose.animation:animation-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.animation-android) # libs.versions.toml [versions] -animation-android = "1.7.0-beta01" +animation-android = "1.7.0-beta04" [libraries] animation-android = { module = "androidx.compose.animation:animation-android", @@ -52,7 +52,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -66,6 +66,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -75,6 +78,7 @@ | 1.7.0-alpha03|2024/02/21| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 2| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_animation_animation-core-android.md.html b/docs/checks/androidx_compose_animation_animation-core-android.md.html index 9343da08..559c7d76 100644 --- a/docs/checks/androidx_compose_animation_animation-core-android.md.html +++ b/docs/checks/androidx_compose_animation_animation-core-android.md.html @@ -18,7 +18,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.animation:animation-core-android:1.7.0-beta01 +: androidx.compose.animation:animation-core-android:1.7.0-beta04 (##) Included Issues @@ -36,17 +36,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.animation:animation-core-android:1.7.0-beta01") +implementation("androidx.compose.animation:animation-core-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.animation:animation-core-android:1.7.0-beta01' +implementation 'androidx.compose.animation:animation-core-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.animation-core-android) # libs.versions.toml [versions] -animation-core-android = "1.7.0-beta01" +animation-core-android = "1.7.0-beta04" [libraries] animation-core-android = { module = "androidx.compose.animation:animation-core-android", @@ -54,7 +54,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -69,6 +69,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 3| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 3| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 3| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -78,6 +81,7 @@ | 1.7.0-alpha03|2024/02/21| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 3| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 2| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_foundation_foundation-android.md.html b/docs/checks/androidx_compose_foundation_foundation-android.md.html index 22be33d6..c184d622 100644 --- a/docs/checks/androidx_compose_foundation_foundation-android.md.html +++ b/docs/checks/androidx_compose_foundation_foundation-android.md.html @@ -19,7 +19,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.foundation:foundation-android:1.7.0-beta01 +: androidx.compose.foundation:foundation-android:1.7.0-beta04 (##) Included Issues @@ -38,17 +38,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.foundation:foundation-android:1.7.0-beta01") +implementation("androidx.compose.foundation:foundation-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta01' +implementation 'androidx.compose.foundation:foundation-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.foundation-android) # libs.versions.toml [versions] -foundation-android = "1.7.0-beta01" +foundation-android = "1.7.0-beta04" [libraries] foundation-android = { module = "androidx.compose.foundation:foundation-android", @@ -56,7 +56,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -72,6 +72,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 4| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 4| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 4| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 4| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 4| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 4| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -81,6 +84,7 @@ | 1.7.0-alpha03|2024/02/21| 4| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 4| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 4| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 4| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 4| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 4| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 4| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_material3_material3-android.md.html b/docs/checks/androidx_compose_material3_material3-android.md.html index e0096318..0256c66e 100644 --- a/docs/checks/androidx_compose_material3_material3-android.md.html +++ b/docs/checks/androidx_compose_material3_material3-android.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.material3:material3-android:1.3.0-beta01 +: androidx.compose.material3:material3-android:1.3.0-beta04 (##) Included Issues @@ -34,17 +34,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.material3:material3-android:1.3.0-beta01") +implementation("androidx.compose.material3:material3-android:1.3.0-beta04") // build.gradle -implementation 'androidx.compose.material3:material3-android:1.3.0-beta01' +implementation 'androidx.compose.material3:material3-android:1.3.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.material3-android) # libs.versions.toml [versions] -material3-android = "1.3.0-beta01" +material3-android = "1.3.0-beta04" [libraries] material3-android = { module = "androidx.compose.material3:material3-android", @@ -52,7 +52,7 @@ } ``` -1.3.0-beta01 is the version this documentation was generated from; +1.3.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -66,6 +66,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.3.0-beta04|2024/06/26| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.3.0-beta03|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.3.0-beta02|2024/05/29| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.3.0-beta01|2024/05/14| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.3.0-alpha06|2024/05/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.3.0-alpha05|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_material_material-android.md.html b/docs/checks/androidx_compose_material_material-android.md.html index 5a65e691..351a12b4 100644 --- a/docs/checks/androidx_compose_material_material-android.md.html +++ b/docs/checks/androidx_compose_material_material-android.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.material:material-android:1.7.0-beta01 +: androidx.compose.material:material-android:1.7.0-beta04 (##) Included Issues @@ -34,17 +34,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.material:material-android:1.7.0-beta01") +implementation("androidx.compose.material:material-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.material:material-android:1.7.0-beta01' +implementation 'androidx.compose.material:material-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.material-android) # libs.versions.toml [versions] -material-android = "1.7.0-beta01" +material-android = "1.7.0-beta04" [libraries] material-android = { module = "androidx.compose.material:material-android", @@ -52,7 +52,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -66,6 +66,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -75,6 +78,7 @@ | 1.7.0-alpha03|2024/02/21| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 2| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_runtime_runtime-android.md.html b/docs/checks/androidx_compose_runtime_runtime-android.md.html index a0f0f137..17a5bfdb 100644 --- a/docs/checks/androidx_compose_runtime_runtime-android.md.html +++ b/docs/checks/androidx_compose_runtime_runtime-android.md.html @@ -18,7 +18,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.runtime:runtime-android:1.7.0-beta01 +: androidx.compose.runtime:runtime-android:1.7.0-beta04 (##) Included Issues @@ -47,17 +47,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-android) # libs.versions.toml [versions] -runtime-android = "1.7.0-beta01" +runtime-android = "1.7.0-beta04" [libraries] runtime-android = { module = "androidx.compose.runtime:runtime-android", @@ -65,7 +65,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -84,6 +84,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 14| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 14| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 14| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 14| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 14| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 14| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -93,6 +96,7 @@ | 1.7.0-alpha03|2024/02/21| 14| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 14| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 14| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 14| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 14| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 14| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 14| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_runtime_runtime-saveable-android.md.html b/docs/checks/androidx_compose_runtime_runtime-saveable-android.md.html index 263560f7..3d23728a 100644 --- a/docs/checks/androidx_compose_runtime_runtime-saveable-android.md.html +++ b/docs/checks/androidx_compose_runtime_runtime-saveable-android.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.runtime:runtime-saveable-android:1.7.0-beta01 +: androidx.compose.runtime:runtime-saveable-android:1.7.0-beta04 (##) Included Issues @@ -33,17 +33,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.runtime:runtime-saveable-android:1.7.0-beta01") +implementation("androidx.compose.runtime:runtime-saveable-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.runtime:runtime-saveable-android:1.7.0-beta01' +implementation 'androidx.compose.runtime:runtime-saveable-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.runtime-saveable-android) # libs.versions.toml [versions] -runtime-saveable-android = "1.7.0-beta01" +runtime-saveable-android = "1.7.0-beta04" [libraries] runtime-saveable-android = { module = "androidx.compose.runtime:runtime-saveable-android", @@ -51,7 +51,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -64,6 +64,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -73,6 +76,7 @@ | 1.7.0-alpha03|2024/02/21| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_ui_ui-android.md.html b/docs/checks/androidx_compose_ui_ui-android.md.html index ff870cce..03e7bb8f 100644 --- a/docs/checks/androidx_compose_ui_ui-android.md.html +++ b/docs/checks/androidx_compose_ui_ui-android.md.html @@ -18,7 +18,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.ui:ui-android:1.7.0-beta01 +: androidx.compose.ui:ui-android:1.7.0-beta04 (##) Included Issues @@ -43,17 +43,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-android) # libs.versions.toml [versions] -ui-android = "1.7.0-beta01" +ui-android = "1.7.0-beta04" [libraries] ui-android = { module = "androidx.compose.ui:ui-android", @@ -61,7 +61,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -82,6 +82,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 10| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 10| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 10| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 10| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 10| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 10| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -91,6 +94,7 @@ | 1.7.0-alpha03|2024/02/21| 10| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 10| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 9| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 9| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 9| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 9| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 9| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_ui_ui-graphics-android.md.html b/docs/checks/androidx_compose_ui_ui-graphics-android.md.html index ab66787e..29867046 100644 --- a/docs/checks/androidx_compose_ui_ui-graphics-android.md.html +++ b/docs/checks/androidx_compose_ui_ui-graphics-android.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.ui:ui-graphics-android:1.7.0-beta01 +: androidx.compose.ui:ui-graphics-android:1.7.0-beta04 (##) Included Issues @@ -34,17 +34,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-graphics-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-graphics-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-graphics-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-graphics-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-graphics-android) # libs.versions.toml [versions] -ui-graphics-android = "1.7.0-beta01" +ui-graphics-android = "1.7.0-beta04" [libraries] ui-graphics-android = { module = "androidx.compose.ui:ui-graphics-android", @@ -52,7 +52,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -66,6 +66,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07| | 2| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -75,6 +78,7 @@ | 1.7.0-alpha03|2024/02/21| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 2| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 2| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_ui_ui-test-manifest.md.html b/docs/checks/androidx_compose_ui_ui-test-manifest.md.html index 89c4e4bb..af0283d3 100644 --- a/docs/checks/androidx_compose_ui_ui-test-manifest.md.html +++ b/docs/checks/androidx_compose_ui_ui-test-manifest.md.html @@ -19,7 +19,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.ui:ui-test-manifest:1.7.0-beta01 +: androidx.compose.ui:ui-test-manifest:1.7.0-beta04 (##) Included Issues @@ -35,17 +35,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-test-manifest:1.7.0-beta01") +implementation("androidx.compose.ui:ui-test-manifest:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-test-manifest:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-test-manifest:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-test-manifest) # libs.versions.toml [versions] -ui-test-manifest = "1.7.0-beta01" +ui-test-manifest = "1.7.0-beta04" [libraries] ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", @@ -53,7 +53,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -66,6 +66,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| @@ -75,6 +78,7 @@ | 1.7.0-alpha03|2024/02/21| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha02|2024/02/07| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha01|2024/01/24| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.6.8|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.7|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.6|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.5|2024/04/03| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_compose_ui_ui-text-android.md.html b/docs/checks/androidx_compose_ui_ui-text-android.md.html index 6199c991..c41d9268 100644 --- a/docs/checks/androidx_compose_ui_ui-text-android.md.html +++ b/docs/checks/androidx_compose_ui_ui-text-android.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.compose.ui:ui-text-android:1.7.0-beta01 +: androidx.compose.ui:ui-text-android:1.7.0-beta04 (##) Included Issues @@ -33,17 +33,17 @@ ``` // build.gradle.kts -implementation("androidx.compose.ui:ui-text-android:1.7.0-beta01") +implementation("androidx.compose.ui:ui-text-android:1.7.0-beta04") // build.gradle -implementation 'androidx.compose.ui:ui-text-android:1.7.0-beta01' +implementation 'androidx.compose.ui:ui-text-android:1.7.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.ui-text-android) # libs.versions.toml [versions] -ui-text-android = "1.7.0-beta01" +ui-text-android = "1.7.0-beta04" [libraries] ui-text-android = { module = "androidx.compose.ui:ui-text-android", @@ -51,7 +51,7 @@ } ``` -1.7.0-beta01 is the version this documentation was generated from; +1.7.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -64,6 +64,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.7.0-beta04|2024/06/26| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta03|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.7.0-beta02|2024/05/29| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-beta01|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha08|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0-alpha07|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_fragment_fragment-testing-manifest.md.html b/docs/checks/androidx_fragment_fragment-testing-manifest.md.html index 6a4c1d34..c4b29579 100644 --- a/docs/checks/androidx_fragment_fragment-testing-manifest.md.html +++ b/docs/checks/androidx_fragment_fragment-testing-manifest.md.html @@ -19,7 +19,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.fragment:fragment-testing-manifest:1.8.0-beta01 +: androidx.fragment:fragment-testing-manifest:1.8.1 (##) Included Issues @@ -35,17 +35,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment-testing-manifest:1.8.0-beta01") +implementation("androidx.fragment:fragment-testing-manifest:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment-testing-manifest:1.8.0-beta01' +implementation 'androidx.fragment:fragment-testing-manifest:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment-testing-manifest) # libs.versions.toml [versions] -fragment-testing-manifest = "1.8.0-beta01" +fragment-testing-manifest = "1.8.1" [libraries] fragment-testing-manifest = { module = "androidx.fragment:fragment-testing-manifest", @@ -53,7 +53,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -66,9 +66,8 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| -| 1.8.0-beta01|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.8.0-alpha02|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.8.0-alpha01|2024/04/03| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.8.1|2024/06/26| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.8.0|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.1|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.2|2023/11/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_fragment_fragment-testing.md.html b/docs/checks/androidx_fragment_fragment-testing.md.html index c123e537..60ac6748 100644 --- a/docs/checks/androidx_fragment_fragment-testing.md.html +++ b/docs/checks/androidx_fragment_fragment-testing.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.fragment:fragment-testing:1.8.0-beta01 +: androidx.fragment:fragment-testing:1.8.1 (##) Included Issues @@ -33,17 +33,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment-testing:1.8.0-beta01") +implementation("androidx.fragment:fragment-testing:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment-testing:1.8.0-beta01' +implementation 'androidx.fragment:fragment-testing:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment-testing) # libs.versions.toml [versions] -fragment-testing = "1.8.0-beta01" +fragment-testing = "1.8.1" [libraries] fragment-testing = { module = "androidx.fragment:fragment-testing", @@ -51,7 +51,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -64,9 +64,8 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| -| 1.8.0-beta01|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.8.0-alpha02|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.8.0-alpha01|2024/04/03| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.8.1|2024/06/26| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.8.0|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.1|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.2|2023/11/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_fragment_fragment.md.html b/docs/checks/androidx_fragment_fragment.md.html index ad16d23b..0a0e8e2e 100644 --- a/docs/checks/androidx_fragment_fragment.md.html +++ b/docs/checks/androidx_fragment_fragment.md.html @@ -20,7 +20,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.fragment:fragment:1.8.0-beta01 +: androidx.fragment:fragment:1.8.1 (##) Included Issues @@ -44,17 +44,17 @@ ``` // build.gradle.kts -implementation("androidx.fragment:fragment:1.8.0-beta01") +implementation("androidx.fragment:fragment:1.8.1") // build.gradle -implementation 'androidx.fragment:fragment:1.8.0-beta01' +implementation 'androidx.fragment:fragment:1.8.1' // build.gradle.kts with version catalogs: implementation(libs.fragment) # libs.versions.toml [versions] -fragment = "1.8.0-beta01" +fragment = "1.8.1" [libraries] fragment = { module = "androidx.fragment:fragment", @@ -62,7 +62,7 @@ } ``` -1.8.0-beta01 is the version this documentation was generated from; +1.8.1 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -80,9 +80,8 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| -| 1.8.0-beta01|2024/05/14| 9| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.8.0-alpha02|2024/04/17| 9| Yes| 8.0 and 8.1|8.0 and 8.1| -| 1.8.0-alpha01|2024/04/03| 9| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.8.1|2024/06/26| 9| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.8.0|2024/06/12| 9| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.1|2024/05/14| 9| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.7.0|2024/05/01| 9| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.6.2|2023/11/01| 9| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_lifecycle_lifecycle-livedata-core.md.html b/docs/checks/androidx_lifecycle_lifecycle-livedata-core.md.html index 033a31fa..b3dd1cfa 100644 --- a/docs/checks/androidx_lifecycle_lifecycle-livedata-core.md.html +++ b/docs/checks/androidx_lifecycle_lifecycle-livedata-core.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.lifecycle:lifecycle-livedata-core:2.8.0 +: androidx.lifecycle:lifecycle-livedata-core:2.8.3 (##) Included Issues @@ -33,17 +33,17 @@ ``` // build.gradle.kts -implementation("androidx.lifecycle:lifecycle-livedata-core:2.8.0") +implementation("androidx.lifecycle:lifecycle-livedata-core:2.8.3") // build.gradle -implementation 'androidx.lifecycle:lifecycle-livedata-core:2.8.0' +implementation 'androidx.lifecycle:lifecycle-livedata-core:2.8.3' // build.gradle.kts with version catalogs: implementation(libs.lifecycle-livedata-core) # libs.versions.toml [versions] -lifecycle-livedata-core = "2.8.0" +lifecycle-livedata-core = "2.8.3" [libraries] lifecycle-livedata-core = { module = "androidx.lifecycle:lifecycle-livedata-core", @@ -51,8 +51,22 @@ } ``` -2.8.0 is the version this documentation was generated from; +2.8.3 is the version this documentation was generated from; there may be newer versions available. +(##) Changes + +* 2.8.0: First version includes NullSafeMutableLiveData. + +(##) Version Compatibility + +There are multiple older versions available of this library: + +| Version | Date | Issues | Compatible | Compiled | Requires | +|-------------------:|----------|-------:|------------|--------------:|---------:| +| 2.8.3|2024/07/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.2|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.1|2024/05/29| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.0|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| \ No newline at end of file diff --git a/docs/checks/androidx_lifecycle_lifecycle-runtime-android.md.html b/docs/checks/androidx_lifecycle_lifecycle-runtime-android.md.html index 53fd2f25..5fa6427e 100644 --- a/docs/checks/androidx_lifecycle_lifecycle-runtime-android.md.html +++ b/docs/checks/androidx_lifecycle_lifecycle-runtime-android.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.lifecycle:lifecycle-runtime-android:2.8.0 +: androidx.lifecycle:lifecycle-runtime-android:2.8.3 (##) Included Issues @@ -34,17 +34,17 @@ ``` // build.gradle.kts -implementation("androidx.lifecycle:lifecycle-runtime-android:2.8.0") +implementation("androidx.lifecycle:lifecycle-runtime-android:2.8.3") // build.gradle -implementation 'androidx.lifecycle:lifecycle-runtime-android:2.8.0' +implementation 'androidx.lifecycle:lifecycle-runtime-android:2.8.3' // build.gradle.kts with version catalogs: implementation(libs.lifecycle-runtime-android) # libs.versions.toml [versions] -lifecycle-runtime-android = "2.8.0" +lifecycle-runtime-android = "2.8.3" [libraries] lifecycle-runtime-android = { module = "androidx.lifecycle:lifecycle-runtime-android", @@ -52,8 +52,23 @@ } ``` -2.8.0 is the version this documentation was generated from; +2.8.3 is the version this documentation was generated from; there may be newer versions available. +(##) Changes + +* 2.8.0: First version includes RepeatOnLifecycleWrongUsage, + UnsafeLifecycleWhenUsage. + +(##) Version Compatibility + +There are multiple older versions available of this library: + +| Version | Date | Issues | Compatible | Compiled | Requires | +|-------------------:|----------|-------:|------------|--------------:|---------:| +| 2.8.3|2024/07/01| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.2|2024/06/12| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.1|2024/05/29| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.0|2024/05/14| 2| Yes| 8.0 and 8.1|8.0 and 8.1| \ No newline at end of file diff --git a/docs/checks/androidx_lifecycle_lifecycle-runtime-testing.md.html b/docs/checks/androidx_lifecycle_lifecycle-runtime-testing.md.html index e3cde88a..df383a19 100644 --- a/docs/checks/androidx_lifecycle_lifecycle-runtime-testing.md.html +++ b/docs/checks/androidx_lifecycle_lifecycle-runtime-testing.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.lifecycle:lifecycle-runtime-testing:2.8.0 +: androidx.lifecycle:lifecycle-runtime-testing:2.8.3 (##) Included Issues @@ -33,17 +33,17 @@ ``` // build.gradle.kts -implementation("androidx.lifecycle:lifecycle-runtime-testing:2.8.0") +implementation("androidx.lifecycle:lifecycle-runtime-testing:2.8.3") // build.gradle -implementation 'androidx.lifecycle:lifecycle-runtime-testing:2.8.0' +implementation 'androidx.lifecycle:lifecycle-runtime-testing:2.8.3' // build.gradle.kts with version catalogs: implementation(libs.lifecycle-runtime-testing) # libs.versions.toml [versions] -lifecycle-runtime-testing = "2.8.0" +lifecycle-runtime-testing = "2.8.3" [libraries] lifecycle-runtime-testing = { module = "androidx.lifecycle:lifecycle-runtime-testing", @@ -51,7 +51,7 @@ } ``` -2.8.0 is the version this documentation was generated from; +2.8.3 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -64,6 +64,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 2.8.3|2024/07/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.2|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.1|2024/05/29| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.7.0|2024/01/10| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_navigation_navigation-common.md.html b/docs/checks/androidx_navigation_navigation-common.md.html index ca3d05c8..09ea8fa5 100644 --- a/docs/checks/androidx_navigation_navigation-common.md.html +++ b/docs/checks/androidx_navigation_navigation-common.md.html @@ -13,17 +13,18 @@ Feedback : https://issuetracker.google.com/issues/new?component=409828 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact -: androidx.navigation:navigation-common:2.8.0-beta01 +: androidx.navigation:navigation-common:2.8.0-beta04 (##) Included Issues -|Issue Id |Issue Description | -|--------------------------------------------|--------------------------------------------------------------------| -|[EmptyNavDeepLink](EmptyNavDeepLink.md.html)|NavDeepLink must define an uri, action, and/or mimetype to be valid.| +|Issue Id |Issue Description | +|----------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +|[EmptyNavDeepLink](EmptyNavDeepLink-2.md.html) |NavDeepLink must define an uri, action, and/or mimetype to be valid. | +|[WrongStartDestinationType](WrongStartDestinationType-3.md.html)|If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.| (##) Including @@ -33,17 +34,17 @@ ``` // build.gradle.kts -implementation("androidx.navigation:navigation-common:2.8.0-beta01") +implementation("androidx.navigation:navigation-common:2.8.0-beta04") // build.gradle -implementation 'androidx.navigation:navigation-common:2.8.0-beta01' +implementation 'androidx.navigation:navigation-common:2.8.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.navigation-common) # libs.versions.toml [versions] -navigation-common = "2.8.0-beta01" +navigation-common = "2.8.0-beta04" [libraries] navigation-common = { module = "androidx.navigation:navigation-common", @@ -51,12 +52,13 @@ } ``` -2.8.0-beta01 is the version this documentation was generated from; +2.8.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes * 2.6.0: First version includes EmptyNavDeepLink. +* 2.8.0-beta04: Adds WrongStartDestinationType. (##) Version Compatibility @@ -64,6 +66,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 2.8.0-beta04|2024/06/26| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.0-beta03|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.0-beta02|2024/05/29| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-beta01|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-alpha08|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-alpha07|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_navigation_navigation-compose.md.html b/docs/checks/androidx_navigation_navigation-compose.md.html index dc7ef63b..28b7f939 100644 --- a/docs/checks/androidx_navigation_navigation-compose.md.html +++ b/docs/checks/androidx_navigation_navigation-compose.md.html @@ -7,23 +7,24 @@ License : [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) Vendor -: Jetpack Navigation Compose +: Android Open Source Project Identifier -: androidx.navigation.compose +: androidx.navigation.common +Feedback +: https://issuetracker.google.com/issues/new?component=409828 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact -: androidx.navigation:navigation-compose:2.8.0-beta01 +: androidx.navigation:navigation-compose:2.8.0-beta04 (##) Included Issues -|Issue Id |Issue Description | -|----------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------| -|[ComposableDestinationInComposeScope](ComposableDestinationInComposeScope.md.html)|Building composable destination in compose scope | -|[ComposableNavGraphInComposeScope](ComposableNavGraphInComposeScope.md.html) |Building navigation graph in compose scope | -|[UnrememberedGetBackStackEntry](UnrememberedGetBackStackEntry.md.html) |Calling getBackStackEntry during composition without using `remember`with a NavBackStackEntry key| +|Issue Id |Issue Description | +|--------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +|[EmptyNavDeepLink](EmptyNavDeepLink.md.html) |NavDeepLink must define an uri, action, and/or mimetype to be valid. | +|[WrongStartDestinationType](WrongStartDestinationType.md.html)|If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.| (##) Including @@ -33,17 +34,17 @@ ``` // build.gradle.kts -implementation("androidx.navigation:navigation-compose:2.8.0-beta01") +implementation("androidx.navigation:navigation-compose:2.8.0-beta04") // build.gradle -implementation 'androidx.navigation:navigation-compose:2.8.0-beta01' +implementation 'androidx.navigation:navigation-compose:2.8.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.navigation-compose) # libs.versions.toml [versions] -navigation-compose = "2.8.0-beta01" +navigation-compose = "2.8.0-beta04" [libraries] navigation-compose = { module = "androidx.navigation:navigation-compose", @@ -51,13 +52,16 @@ } ``` -2.8.0-beta01 is the version this documentation was generated from; +2.8.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes * 2.4.0: First version includes ComposableDestinationInComposeScope, ComposableNavGraphInComposeScope, UnrememberedGetBackStackEntry. +* 2.8.0-beta04: Adds EmptyNavDeepLink, WrongStartDestinationType. + Removes ComposableDestinationInComposeScope, + ComposableNavGraphInComposeScope, UnrememberedGetBackStackEntry. (##) Version Compatibility @@ -65,6 +69,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 2.8.0-beta04|2024/06/26| 2| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.0-beta03|2024/06/12| 3| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.0-beta02|2024/05/29| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-beta01|2024/05/14| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-alpha08|2024/05/01| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-alpha07|2024/04/17| 3| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_navigation_navigation-runtime.md.html b/docs/checks/androidx_navigation_navigation-runtime.md.html index 614c3ca8..ee8ac816 100644 --- a/docs/checks/androidx_navigation_navigation-runtime.md.html +++ b/docs/checks/androidx_navigation_navigation-runtime.md.html @@ -13,17 +13,19 @@ Feedback : https://issuetracker.google.com/issues/new?component=409828 Min -: Lint 7.0 +: Lint 8.0 and 8.1 Compiled : Lint 8.0 and 8.1 Artifact -: androidx.navigation:navigation-runtime:2.8.0-beta01 +: androidx.navigation:navigation-runtime:2.8.0-beta04 (##) Included Issues -|Issue Id |Issue Description | -|----------------------------------------------------------------------|----------------------------------------------------------------| -|[DeepLinkInActivityDestination](DeepLinkInActivityDestination.md.html)|A should not be attached to an destination| +|Issue Id |Issue Description | +|----------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +|[DeepLinkInActivityDestination](DeepLinkInActivityDestination.md.html)|A should not be attached to an destination | +|[WrongStartDestinationType](WrongStartDestinationType-2.md.html) |If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.| +|[WrongNavigateRouteType](WrongNavigateRouteType.md.html) |Navigation route should be an object literal or a destination class instance with arguments. | (##) Including @@ -33,17 +35,17 @@ ``` // build.gradle.kts -implementation("androidx.navigation:navigation-runtime:2.8.0-beta01") +implementation("androidx.navigation:navigation-runtime:2.8.0-beta04") // build.gradle -implementation 'androidx.navigation:navigation-runtime:2.8.0-beta01' +implementation 'androidx.navigation:navigation-runtime:2.8.0-beta04' // build.gradle.kts with version catalogs: implementation(libs.navigation-runtime) # libs.versions.toml [versions] -navigation-runtime = "2.8.0-beta01" +navigation-runtime = "2.8.0-beta04" [libraries] navigation-runtime = { module = "androidx.navigation:navigation-runtime", @@ -51,12 +53,13 @@ } ``` -2.8.0-beta01 is the version this documentation was generated from; +2.8.0-beta04 is the version this documentation was generated from; there may be newer versions available. (##) Changes * 2.5.0: First version includes DeepLinkInActivityDestination. +* 2.8.0-beta04: Adds WrongNavigateRouteType, WrongStartDestinationType. (##) Version Compatibility @@ -64,6 +67,9 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 2.8.0-beta04|2024/06/26| 3| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.0-beta03|2024/06/12| 1| Yes| 8.0 and 8.1|8.0 and 8.1| +| 2.8.0-beta02|2024/05/29| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-beta01|2024/05/14| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-alpha08|2024/05/01| 1| Yes| 8.0 and 8.1|8.0 and 8.1| | 2.8.0-alpha07|2024/04/17| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_wear_protolayout_protolayout-expression.md.html b/docs/checks/androidx_wear_protolayout_protolayout-expression.md.html index 6efb88e3..f417116b 100644 --- a/docs/checks/androidx_wear_protolayout_protolayout-expression.md.html +++ b/docs/checks/androidx_wear_protolayout_protolayout-expression.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03 +: androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05 (##) Included Issues @@ -35,17 +35,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout-expression) # libs.versions.toml [versions] -protolayout-expression = "1.2.0-alpha03" +protolayout-expression = "1.2.0-alpha05" [libraries] protolayout-expression = { module = "androidx.wear.protolayout:protolayout-expression", @@ -53,7 +53,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -68,6 +68,8 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.2.0-alpha05|2024/06/26| 3| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.2.0-alpha04|2024/05/29| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.2.0-alpha03|2024/05/14| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.2.0-alpha02|2024/05/01| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.2.0-alpha01|2024/03/06| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_wear_protolayout_protolayout-material.md.html b/docs/checks/androidx_wear_protolayout_protolayout-material.md.html index e0738af2..a4a278b8 100644 --- a/docs/checks/androidx_wear_protolayout_protolayout-material.md.html +++ b/docs/checks/androidx_wear_protolayout_protolayout-material.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.wear.protolayout:protolayout-material:1.2.0-alpha03 +: androidx.wear.protolayout:protolayout-material:1.2.0-alpha05 (##) Included Issues @@ -35,17 +35,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout-material:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout-material:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout-material:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout-material:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout-material) # libs.versions.toml [versions] -protolayout-material = "1.2.0-alpha03" +protolayout-material = "1.2.0-alpha05" [libraries] protolayout-material = { module = "androidx.wear.protolayout:protolayout-material", @@ -53,7 +53,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -68,6 +68,8 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.2.0-alpha05|2024/06/26| 3| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.2.0-alpha04|2024/05/29| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.2.0-alpha03|2024/05/14| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.2.0-alpha02|2024/05/01| 3| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/androidx_wear_protolayout_protolayout.md.html b/docs/checks/androidx_wear_protolayout_protolayout.md.html index 56b0394d..48625aa9 100644 --- a/docs/checks/androidx_wear_protolayout_protolayout.md.html +++ b/docs/checks/androidx_wear_protolayout_protolayout.md.html @@ -17,7 +17,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: androidx.wear.protolayout:protolayout:1.2.0-alpha03 +: androidx.wear.protolayout:protolayout:1.2.0-alpha05 (##) Included Issues @@ -35,17 +35,17 @@ ``` // build.gradle.kts -implementation("androidx.wear.protolayout:protolayout:1.2.0-alpha03") +implementation("androidx.wear.protolayout:protolayout:1.2.0-alpha05") // build.gradle -implementation 'androidx.wear.protolayout:protolayout:1.2.0-alpha03' +implementation 'androidx.wear.protolayout:protolayout:1.2.0-alpha05' // build.gradle.kts with version catalogs: implementation(libs.protolayout) # libs.versions.toml [versions] -protolayout = "1.2.0-alpha03" +protolayout = "1.2.0-alpha05" [libraries] protolayout = { module = "androidx.wear.protolayout:protolayout", @@ -53,7 +53,7 @@ } ``` -1.2.0-alpha03 is the version this documentation was generated from; +1.2.0-alpha05 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -68,6 +68,8 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 1.2.0-alpha05|2024/06/26| 3| Yes| 8.0 and 8.1|8.0 and 8.1| +| 1.2.0-alpha04|2024/05/29| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.2.0-alpha03|2024/05/14| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.2.0-alpha02|2024/05/01| 3| Yes| 8.0 and 8.1|8.0 and 8.1| | 1.2.0-alpha01|2024/03/06| 1| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/categories.md.html b/docs/checks/categories.md.html index b5de36f8..fca29f51 100644 --- a/docs/checks/categories.md.html +++ b/docs/checks/categories.md.html @@ -3,7 +3,7 @@ Order: [Alphabetical](index.md.html) | By category | [By vendor](vendors.md.html) | [By severity](severity.md.html) | [By year](year.md.html) | [Libraries](libraries.md.html) -* Correctness (506) +* Correctness (509) - [AaptCrash: Potential AAPT crash](AaptCrash.md.html) - [AccidentalOctal: Accidental Octal](AccidentalOctal.md.html) @@ -42,11 +42,9 @@ - [ColorCasing: Raw colors should be defined with uppercase letters.](ColorCasing.md.html) - [CommitPrefEdits: Missing `commit()` on `SharedPreference` editor](CommitPrefEdits.md.html) - [CommitTransaction: Missing `commit()` calls](CommitTransaction.md.html) - - [ComposableDestinationInComposeScope: Building composable destination in compose scope](ComposableDestinationInComposeScope.md.html) - [ComposableLambdaParameterNaming: Primary composable lambda parameter not named `content`](ComposableLambdaParameterNaming.md.html) - [ComposableLambdaParameterPosition: Non-trailing primary composable lambda parameter](ComposableLambdaParameterPosition.md.html) - [ComposableNaming: Incorrect naming for @Composable functions](ComposableNaming.md.html) - - [ComposableNavGraphInComposeScope: Building navigation graph in compose scope](ComposableNavGraphInComposeScope.md.html) - [ComposeComposableModifier: Don't use @Composable builder functions for modifiers](ComposeComposableModifier.md.html) - [ComposeM2Api: Using a Compose M2 API is not recommended](ComposeM2Api.md.html) - [ComposeModifierComposed: Don't use Modifier.composed {}](ComposeModifierComposed.md.html) @@ -56,6 +54,7 @@ - [ConflictingOnColor: Background colors with the same value should have the same 'on' color](ConflictingOnColor.md.html) - [ConstraintLayoutToolsEditorAttribute: Flags tools:layout_editor xml properties.](ConstraintLayoutToolsEditorAttribute.md.html) - [CoroutineCreationDuringComposition: Calls to `async` or `launch` should happen inside a LaunchedEffect and not composition](CoroutineCreationDuringComposition.md.html) + - [CredManMissingDal: Missing Digital Asset Link for Credential Manager](CredManMissingDal.md.html) - [CredentialDependency: `credentials-play-services-auth` is Required](CredentialDependency.md.html) - [CustomSplashScreen: Application-defined Launch Screen](CustomSplashScreen.md.html) - [CustomViewStyleable: Mismatched Styleable/Custom View Name](CustomViewStyleable.md.html) @@ -97,6 +96,7 @@ - [EditedTargetSdkVersion: Manually Edited TargetSdkVersion](EditedTargetSdkVersion.md.html) - [EllipsizeMaxLines: Combining Ellipsize and Maxlines](EllipsizeMaxLines.md.html) - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) + - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) - [EmptySuperCall: Calling an empty super method](EmptySuperCall.md.html) - [EnqueueWork: WorkManager Enqueue](EnqueueWork.md.html) - [EnsureInitializerMetadata: Every Initializer needs to be accompanied by a corresponding entry in the AndroidManifest.xml file.](EnsureInitializerMetadata.md.html) @@ -436,7 +436,6 @@ - [UnlocalizedSms: SMS phone number missing country code](UnlocalizedSms.md.html) - [UnnecessaryComposedModifier: Modifier.composed should only be used for modifiers that invoke @Composable functions](UnnecessaryComposedModifier.md.html) - [UnrememberedAnimatable: Creating an Animatable during composition without using `remember`](UnrememberedAnimatable.md.html) - - [UnrememberedGetBackStackEntry: Calling getBackStackEntry during composition without using `remember`with a NavBackStackEntry key](UnrememberedGetBackStackEntry.md.html) - [UnrememberedMutableInteractionSource: Creating a MutableInteractionSource during composition without using `remember`](UnrememberedMutableInteractionSource.md.html) - [UnrememberedMutableState: Creating a state object during composition without using `remember`](UnrememberedMutableState.md.html) - [UnsafeLifecycleWhenUsage: Unsafe UI operation in finally/catch of Lifecycle.whenStarted of similar method](UnsafeLifecycleWhenUsage.md.html) @@ -502,9 +501,13 @@ - [WrongLayoutName: Layout names should be prefixed accordingly.](WrongLayoutName.md.html) - [WrongManifestParent: Wrong manifest parent](WrongManifestParent.md.html) - [WrongMenuIdFormat: Flag menu ids that are not in lowerCamelCase Format.](WrongMenuIdFormat.md.html) + - [WrongNavigateRouteType: Navigation route should be an object literal or a destination class instance with arguments.](WrongNavigateRouteType.md.html) - [WrongRegion: Suspicious Language/Region Combination](WrongRegion.md.html) - [WrongRequiresOptIn: Experimental annotations defined in Kotlin must use kotlin.RequiresOptIn](WrongRequiresOptIn.md.html) - [WrongResourceImportAlias: Wrong import alias for this R class.](WrongResourceImportAlias.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) - [WrongTestMethodName: Flags test methods that start with test.](WrongTestMethodName.md.html) - [WrongThread: Wrong Thread](WrongThread.md.html) - [WrongThreadInterprocedural: Wrong Thread (Interprocedural)](WrongThreadInterprocedural.md.html) @@ -747,8 +750,11 @@ - [ModifierNodeInspectableProperties: ModifierNodeElement missing inspectableProperties](ModifierNodeInspectableProperties.md.html) - [UseTomlInstead: Use TOML Version Catalog Instead](UseTomlInstead.md.html) -* Accessibility (5) +* Accessibility (8) + - [AccessibilityFocus: Forcing accessibility focus](AccessibilityFocus.md.html) + - [AccessibilityScrollActions: Incomplete Scroll Action support](AccessibilityScrollActions.md.html) + - [AccessibilityWindowStateChangedEvent: Use of accessibility window state change events](AccessibilityWindowStateChangedEvent.md.html) - [ClickableViewAccessibility: Accessibility in Custom Views](ClickableViewAccessibility.md.html) - [ContentDescription: Image without `contentDescription`](ContentDescription.md.html) - [GetContentDescriptionOverride: Overriding `getContentDescription()` on a View](GetContentDescriptionOverride.md.html) diff --git a/docs/checks/com_slack_lint_slack-lint-checks.md.html b/docs/checks/com_slack_lint_slack-lint-checks.md.html index 95a355ff..63f1cf2a 100644 --- a/docs/checks/com_slack_lint_slack-lint-checks.md.html +++ b/docs/checks/com_slack_lint_slack-lint-checks.md.html @@ -19,7 +19,7 @@ Compiled : Lint 8.0 and 8.1 Artifact -: com.slack.lint:slack-lint-checks:0.7.3 +: com.slack.lint:slack-lint-checks:0.7.4 (##) Included Issues @@ -126,17 +126,17 @@ ``` // build.gradle.kts -lintChecks("com.slack.lint:slack-lint-checks:0.7.3") +lintChecks("com.slack.lint:slack-lint-checks:0.7.4") // build.gradle -lintChecks 'com.slack.lint:slack-lint-checks:0.7.3' +lintChecks 'com.slack.lint:slack-lint-checks:0.7.4' // build.gradle.kts with version catalogs: lintChecks(libs.slack-lint-checks) # libs.versions.toml [versions] -slack-lint-checks = "0.7.3" +slack-lint-checks = "0.7.4" [libraries] slack-lint-checks = { module = "com.slack.lint:slack-lint-checks", @@ -144,7 +144,7 @@ } ``` -0.7.3 is the version this documentation was generated from; +0.7.4 is the version this documentation was generated from; there may be newer versions available. (##) Changes @@ -221,6 +221,7 @@ | Version | Date | Issues | Compatible | Compiled | Requires | |-------------------:|----------|-------:|------------|--------------:|---------:| +| 0.7.4|2024/05/21| 91| Yes| 8.0 and 8.1|8.0 and 8.1| | 0.7.3|2024/05/03| 91| Yes| 8.0 and 8.1|8.0 and 8.1| | 0.7.2|2024/05/02| 91| Yes| 8.0 and 8.1|8.0 and 8.1| | 0.7.1|2024/03/27| 90| Yes| 8.0 and 8.1|8.0 and 8.1| diff --git a/docs/checks/index.md.html b/docs/checks/index.md.html index d3c4efdb..e939b920 100644 --- a/docs/checks/index.md.html +++ b/docs/checks/index.md.html @@ -5,6 +5,9 @@ - [AaptCrash: Potential AAPT crash](AaptCrash.md.html) - [AcceptsUserCertificates: Allowing User Certificates](AcceptsUserCertificates.md.html) + - [AccessibilityFocus: Forcing accessibility focus](AccessibilityFocus.md.html) + - [AccessibilityScrollActions: Incomplete Scroll Action support](AccessibilityScrollActions.md.html) + - [AccessibilityWindowStateChangedEvent: Use of accessibility window state change events](AccessibilityWindowStateChangedEvent.md.html) - [AccidentalOctal: Accidental Octal](AccidentalOctal.md.html) - [ActivityIconColor: Ongoing activity icon is not white](ActivityIconColor.md.html) - [AdapterViewChildren: `AdapterView` cannot have children in XML](AdapterViewChildren.md.html) @@ -66,11 +69,9 @@ - [ColorCasing: Raw colors should be defined with uppercase letters.](ColorCasing.md.html) - [CommitPrefEdits: Missing `commit()` on `SharedPreference` editor](CommitPrefEdits.md.html) - [CommitTransaction: Missing `commit()` calls](CommitTransaction.md.html) - - [ComposableDestinationInComposeScope: Building composable destination in compose scope](ComposableDestinationInComposeScope.md.html) - [ComposableLambdaParameterNaming: Primary composable lambda parameter not named `content`](ComposableLambdaParameterNaming.md.html) - [ComposableLambdaParameterPosition: Non-trailing primary composable lambda parameter](ComposableLambdaParameterPosition.md.html) - [ComposableNaming: Incorrect naming for @Composable functions](ComposableNaming.md.html) - - [ComposableNavGraphInComposeScope: Building navigation graph in compose scope](ComposableNavGraphInComposeScope.md.html) - [ComposeComposableModifier: Don't use @Composable builder functions for modifiers](ComposeComposableModifier.md.html) - [ComposeCompositionLocalGetter: CompositionLocals should not use getters](ComposeCompositionLocalGetter.md.html) - [ComposeCompositionLocalUsage: CompositionLocals are discouraged](ComposeCompositionLocalUsage.md.html) @@ -99,6 +100,7 @@ - [ContentDescription: Image without `contentDescription`](ContentDescription.md.html) - [ConvertToWebp: Convert to WebP](ConvertToWebp.md.html) - [CoroutineCreationDuringComposition: Calls to `async` or `launch` should happen inside a LaunchedEffect and not composition](CoroutineCreationDuringComposition.md.html) + - [CredManMissingDal: Missing Digital Asset Link for Credential Manager](CredManMissingDal.md.html) - [CredentialDependency: `credentials-play-services-auth` is Required](CredentialDependency.md.html) - [CustomPermissionTypo: Permission appears to be a custom permission with a typo](CustomPermissionTypo.md.html) - [CustomSplashScreen: Application-defined Launch Screen](CustomSplashScreen.md.html) @@ -150,7 +152,8 @@ - [EasterEgg: Code contains easter egg](EasterEgg.md.html) - [EditedTargetSdkVersion: Manually Edited TargetSdkVersion](EditedTargetSdkVersion.md.html) - [EllipsizeMaxLines: Combining Ellipsize and Maxlines](EllipsizeMaxLines.md.html) - - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) + - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) (from androidx.navigation:navigation-compose:2.8.0-beta04) + - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) (from androidx.navigation:navigation-common:2.8.0-beta04) - [EmptySuperCall: Calling an empty super method](EmptySuperCall.md.html) - [EnforceUTF8: Encoding used in resource files is not UTF-8](EnforceUTF8.md.html) - [EnqueueWork: WorkManager Enqueue](EnqueueWork.md.html) @@ -183,8 +186,8 @@ - [FragmentBackPressedCallback: Use getViewLifecycleOwner() as the LifecycleOwner instead of a Fragment instance.](FragmentBackPressedCallback.md.html) - [FragmentConstructorInjection: Fragment dependencies should be injected using constructor injections only.](FragmentConstructorInjection.md.html) - [FragmentFieldInjection: Fragment dependencies should be injected using the Fragment's constructor.](FragmentFieldInjection.md.html) - - [FragmentGradleConfiguration: Include the fragment-testing library using the debugImplementation configuration.](FragmentGradleConfiguration.md.html) (from androidx.fragment:fragment-testing:1.8.0-beta01) - - [FragmentGradleConfiguration: Include the fragment-testing-manifest library using the debugImplementation configuration.](FragmentGradleConfiguration.md.html) (from androidx.fragment:fragment-testing-manifest:1.8.0-beta01) + - [FragmentGradleConfiguration: Include the fragment-testing library using the debugImplementation configuration.](FragmentGradleConfiguration.md.html) (from androidx.fragment:fragment-testing:1.8.1) + - [FragmentGradleConfiguration: Include the fragment-testing-manifest library using the debugImplementation configuration.](FragmentGradleConfiguration.md.html) (from androidx.fragment:fragment-testing-manifest:1.8.1) - [FragmentLiveDataObserve: Use getViewLifecycleOwner() as the LifecycleOwner instead of a Fragment instance when observing a LiveData object.](FragmentLiveDataObserve.md.html) - [FragmentTagUsage: Use FragmentContainerView instead of the tag](FragmentTagUsage.md.html) - [FrequentlyChangedStateReadInComposition: Frequently changing state should not be directly read in composable function](FrequentlyChangedStateReadInComposition.md.html) @@ -238,8 +241,8 @@ - [ImpliedTouchscreenHardware: Touchscreen not optional](ImpliedTouchscreenHardware.md.html) - [InOrMmUsage: Using `mm` or `in` dimensions](InOrMmUsage.md.html) - [IncludeLayoutParam: Ignored layout params on include](IncludeLayoutParam.md.html) - - [InclusiveNaming: Use inclusive naming.](InclusiveNaming.md.html) (from com.slack.lint:slack-lint-checks:0.7.3) - - [InclusiveNaming: Use inclusive naming.](InclusiveNaming.md.html) (from com.slack.lint:slack-lint-checks:0.7.3) + - [InclusiveNaming: Use inclusive naming.](InclusiveNaming.md.html) (from com.slack.lint:slack-lint-checks:0.7.4) + - [InclusiveNaming: Use inclusive naming.](InclusiveNaming.md.html) (from com.slack.lint:slack-lint-checks:0.7.4) - [IncompatibleMediaBrowserServiceCompatVersion: Obsolete version of MediaBrowserServiceCompat](IncompatibleMediaBrowserServiceCompatVersion.md.html) - [InconsistentArrays: Inconsistencies in array element counts](InconsistentArrays.md.html) - [InconsistentLayout: Inconsistent Layouts](InconsistentLayout.md.html) @@ -442,7 +445,7 @@ - [NotificationPermission: Notifications Without Permission](NotificationPermission.md.html) - [NotificationTrampoline: Notification Trampolines](NotificationTrampoline.md.html) - [NotifyDataSetChanged: Invalidating All RecyclerView Data](NotifyDataSetChanged.md.html) - - [NullSafeMutableLiveData: LiveData value assignment nullability mismatch](NullSafeMutableLiveData.md.html) (from androidx.lifecycle:lifecycle-livedata-core:2.8.0) + - [NullSafeMutableLiveData: LiveData value assignment nullability mismatch](NullSafeMutableLiveData.md.html) (from androidx.lifecycle:lifecycle-livedata-core:2.8.3) - [NullSafeMutableLiveData: LiveData value assignment nullability mismatch](NullSafeMutableLiveData.md.html) (from androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.0-alpha01) - [ObjectAnimatorBinding: Incorrect ObjectAnimator Property](ObjectAnimatorBinding.md.html) - [ObsoleteLayoutParam: Obsolete layout params](ObsoleteLayoutParam.md.html) @@ -475,15 +478,15 @@ - [ProguardSplit: Proguard.cfg file contains generic Android rules](ProguardSplit.md.html) - [PropertyEscape: Incorrect property escapes](PropertyEscape.md.html) - [ProtectedPermissions: Using system app permission](ProtectedPermissions.md.html) - - [ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales.](ProtoLayoutEdgeContentLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03) - - [ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales.](ProtoLayoutEdgeContentLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03) - - [ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales.](ProtoLayoutEdgeContentLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout:1.2.0-alpha03) - - [ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API.](ProtoLayoutMinSchema.md.html) (from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03) - - [ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API.](ProtoLayoutMinSchema.md.html) (from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03) - - [ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API.](ProtoLayoutMinSchema.md.html) (from androidx.wear.protolayout:protolayout:1.2.0-alpha03) - - [ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales.](ProtoLayoutPrimaryLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha03) - - [ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales.](ProtoLayoutPrimaryLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout-material:1.2.0-alpha03) - - [ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales.](ProtoLayoutPrimaryLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout:1.2.0-alpha03) + - [ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales.](ProtoLayoutEdgeContentLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05) + - [ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales.](ProtoLayoutEdgeContentLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05) + - [ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales.](ProtoLayoutEdgeContentLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout:1.2.0-alpha05) + - [ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API.](ProtoLayoutMinSchema.md.html) (from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05) + - [ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API.](ProtoLayoutMinSchema.md.html) (from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05) + - [ProtoLayoutMinSchema: ProtoLayout feature is not guaranteed to be available on the target device API.](ProtoLayoutMinSchema.md.html) (from androidx.wear.protolayout:protolayout:1.2.0-alpha05) + - [ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales.](ProtoLayoutPrimaryLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout-expression:1.2.0-alpha05) + - [ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales.](ProtoLayoutPrimaryLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout-material:1.2.0-alpha05) + - [ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales.](ProtoLayoutPrimaryLayoutResponsive.md.html) (from androidx.wear.protolayout:protolayout:1.2.0-alpha05) - [ProviderReadPermissionOnly: Provider with readPermission only and implemented write APIs](ProviderReadPermissionOnly.md.html) - [ProvidesMustNotBeAbstract: @Provides functions cannot be abstract](ProvidesMustNotBeAbstract.md.html) - [ProxyPassword: Proxy Password in Cleartext](ProxyPassword.md.html) @@ -508,7 +511,7 @@ - [RememberSaveableSaverParameter: `Saver` objects should be passed to the saver parameter, not the vararg `inputs` parameter](RememberSaveableSaverParameter.md.html) - [RemoteViewLayout: Unsupported View in RemoteView](RemoteViewLayout.md.html) - [RemoveWorkManagerInitializer: Remove androidx.work.WorkManagerInitializer from your AndroidManifest.xml when using on-demand initialization.](RemoveWorkManagerInitializer.md.html) - - [RepeatOnLifecycleWrongUsage: Wrong usage of repeatOnLifecycle.](RepeatOnLifecycleWrongUsage.md.html) (from androidx.lifecycle:lifecycle-runtime-android:2.8.0) + - [RepeatOnLifecycleWrongUsage: Wrong usage of repeatOnLifecycle.](RepeatOnLifecycleWrongUsage.md.html) (from androidx.lifecycle:lifecycle-runtime-android:2.8.3) - [RepeatOnLifecycleWrongUsage: Wrong usage of repeatOnLifecycle.](RepeatOnLifecycleWrongUsage.md.html) (from androidx.lifecycle:lifecycle-runtime-ktx:2.8.0-alpha01) - [ReportShortcutUsage: Report shortcut usage](ReportShortcutUsage.md.html) - [RequiredSize: Missing `layout_width` or `layout_height` attributes](RequiredSize.md.html) @@ -635,13 +638,12 @@ - [UnnecessaryComposedModifier: Modifier.composed should only be used for modifiers that invoke @Composable functions](UnnecessaryComposedModifier.md.html) - [UnprotectedSMSBroadcastReceiver: Unprotected SMS `BroadcastReceiver`](UnprotectedSMSBroadcastReceiver.md.html) - [UnrememberedAnimatable: Creating an Animatable during composition without using `remember`](UnrememberedAnimatable.md.html) - - [UnrememberedGetBackStackEntry: Calling getBackStackEntry during composition without using `remember`with a NavBackStackEntry key](UnrememberedGetBackStackEntry.md.html) - [UnrememberedMutableInteractionSource: Creating a MutableInteractionSource during composition without using `remember`](UnrememberedMutableInteractionSource.md.html) - [UnrememberedMutableState: Creating a state object during composition without using `remember`](UnrememberedMutableState.md.html) - [UnsafeDynamicallyLoadedCode: `load` used to dynamically load code](UnsafeDynamicallyLoadedCode.md.html) - [UnsafeImplicitIntentLaunch: Implicit intent matches an internal non-exported component](UnsafeImplicitIntentLaunch.md.html) - [UnsafeIntentLaunch: Launched Unsafe Intent](UnsafeIntentLaunch.md.html) - - [UnsafeLifecycleWhenUsage: Unsafe UI operation in finally/catch of Lifecycle.whenStarted of similar method](UnsafeLifecycleWhenUsage.md.html) (from androidx.lifecycle:lifecycle-runtime-android:2.8.0) + - [UnsafeLifecycleWhenUsage: Unsafe UI operation in finally/catch of Lifecycle.whenStarted of similar method](UnsafeLifecycleWhenUsage.md.html) (from androidx.lifecycle:lifecycle-runtime-android:2.8.3) - [UnsafeLifecycleWhenUsage: Unsafe UI operation in finally/catch of Lifecycle.whenStarted of similar method](UnsafeLifecycleWhenUsage.md.html) (from androidx.lifecycle:lifecycle-runtime-ktx:2.8.0-alpha01) - [UnsafeNativeCodeLocation: Native code outside library directory](UnsafeNativeCodeLocation.md.html) - [UnsafeOptInUsageError: Unsafe opt-in usage intended to be error-level severity](UnsafeOptInUsageError.md.html) @@ -742,9 +744,13 @@ - [WrongLayoutName: Layout names should be prefixed accordingly.](WrongLayoutName.md.html) - [WrongManifestParent: Wrong manifest parent](WrongManifestParent.md.html) - [WrongMenuIdFormat: Flag menu ids that are not in lowerCamelCase Format.](WrongMenuIdFormat.md.html) + - [WrongNavigateRouteType: Navigation route should be an object literal or a destination class instance with arguments.](WrongNavigateRouteType.md.html) - [WrongRegion: Suspicious Language/Region Combination](WrongRegion.md.html) - [WrongRequiresOptIn: Experimental annotations defined in Kotlin must use kotlin.RequiresOptIn](WrongRequiresOptIn.md.html) - [WrongResourceImportAlias: Wrong import alias for this R class.](WrongResourceImportAlias.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) (from androidx.navigation:navigation-compose:2.8.0-beta04) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) (from androidx.navigation:navigation-runtime:2.8.0-beta04) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) (from androidx.navigation:navigation-common:2.8.0-beta04) - [WrongTestMethodName: Flags test methods that start with test.](WrongTestMethodName.md.html) - [WrongThread: Wrong Thread](WrongThread.md.html) - [WrongThreadInterprocedural: Wrong Thread (Interprocedural)](WrongThreadInterprocedural.md.html) diff --git a/docs/checks/libraries.md.html b/docs/checks/libraries.md.html index 1ad59c00..25d622e0 100644 --- a/docs/checks/libraries.md.html +++ b/docs/checks/libraries.md.html @@ -33,9 +33,9 @@ * [androidx.lifecycle:lifecycle-runtime-android](androidx_lifecycle_lifecycle-runtime-android.md.html) (2 checks) * [androidx.lifecycle:lifecycle-runtime-testing](androidx_lifecycle_lifecycle-runtime-testing.md.html) (1 checks) * [androidx.lifecycle:lifecycle-runtime-ktx](androidx_lifecycle_lifecycle-runtime-ktx.md.html) (2 checks) -* [androidx.navigation:navigation-compose](androidx_navigation_navigation-compose.md.html) (3 checks) -* [androidx.navigation:navigation-runtime](androidx_navigation_navigation-runtime.md.html) (1 checks) -* [androidx.navigation:navigation-common](androidx_navigation_navigation-common.md.html) (1 checks) +* [androidx.navigation:navigation-compose](androidx_navigation_navigation-compose.md.html) (2 checks) +* [androidx.navigation:navigation-runtime](androidx_navigation_navigation-runtime.md.html) (3 checks) +* [androidx.navigation:navigation-common](androidx_navigation_navigation-common.md.html) (2 checks) * [androidx.annotation:annotation-experimental](androidx_annotation_annotation-experimental.md.html) (4 checks) * [androidx.fragment:fragment-testing](androidx_fragment_fragment-testing.md.html) (1 checks) * [androidx.fragment:fragment-testing-manifest](androidx_fragment_fragment-testing-manifest.md.html) (1 checks) diff --git a/docs/checks/severity.md.html b/docs/checks/severity.md.html index 2165e1ad..17f7ef5b 100644 --- a/docs/checks/severity.md.html +++ b/docs/checks/severity.md.html @@ -61,7 +61,7 @@ - [WrongFolder: Resource file in the wrong `res` folder](WrongFolder.md.html) - [WrongManifestParent: Wrong manifest parent](WrongManifestParent.md.html) -* Error (287) +* Error (290) - [AccidentalOctal: Accidental Octal](AccidentalOctal.md.html) - [AppCompatCustomView: Appcompat Custom Widgets](AppCompatCustomView.md.html) @@ -80,8 +80,6 @@ - [ByteOrderMark: Byte order mark inside files](ByteOrderMark.md.html) - [CastingViewContextToActivity: Unsafe cast of `Context` to `Activity`](CastingViewContextToActivity.md.html) - [CoarseFineLocation: Cannot use `ACCESS_FINE_LOCATION` without `ACCESS_COARSE_LOCATION`](CoarseFineLocation.md.html) - - [ComposableDestinationInComposeScope: Building composable destination in compose scope](ComposableDestinationInComposeScope.md.html) - - [ComposableNavGraphInComposeScope: Building navigation graph in compose scope](ComposableNavGraphInComposeScope.md.html) - [ComposeComposableModifier: Don't use @Composable builder functions for modifiers](ComposeComposableModifier.md.html) - [ComposeCompositionLocalGetter: CompositionLocals should not use getters](ComposeCompositionLocalGetter.md.html) - [ComposeContentEmitterReturningValues: Composable functions should emit XOR return](ComposeContentEmitterReturningValues.md.html) @@ -102,6 +100,7 @@ - [ComposeViewModelInjection: Implicit dependencies of composables should be made explicit](ComposeViewModelInjection.md.html) - [ConflictingOnColor: Background colors with the same value should have the same 'on' color](ConflictingOnColor.md.html) - [CoroutineCreationDuringComposition: Calls to `async` or `launch` should happen inside a LaunchedEffect and not composition](CoroutineCreationDuringComposition.md.html) + - [CredManMissingDal: Missing Digital Asset Link for Credential Manager](CredManMissingDal.md.html) - [DalvikOverride: Method considered overridden by Dalvik](DalvikOverride.md.html) - [DefaultEncoding: Using Default Character Encoding](DefaultEncoding.md.html) - [DeletedProvider: Using Deleted Provider](DeletedProvider.md.html) @@ -122,6 +121,7 @@ - [EditedTargetSdkVersion: Manually Edited TargetSdkVersion](EditedTargetSdkVersion.md.html) - [EllipsizeMaxLines: Combining Ellipsize and Maxlines](EllipsizeMaxLines.md.html) - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) + - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) - [ErrorProneDoNotMockUsage: Use Slack's internal `@DoNotMock` annotation.](ErrorProneDoNotMockUsage.md.html) - [ExactAlarm: Invalid Usage of Exact Alarms](ExactAlarm.md.html) - [ExceptionMessage: Please provide a string for the `lazyMessage` parameter](ExceptionMessage.md.html) @@ -309,7 +309,6 @@ - [TimberTagLength: Too Long Log Tags](TimberTagLength.md.html) - [UniqueConstants: Overlapping Enumeration Constants](UniqueConstants.md.html) - [UnrememberedAnimatable: Creating an Animatable during composition without using `remember`](UnrememberedAnimatable.md.html) - - [UnrememberedGetBackStackEntry: Calling getBackStackEntry during composition without using `remember`with a NavBackStackEntry key](UnrememberedGetBackStackEntry.md.html) - [UnrememberedMutableInteractionSource: Creating a MutableInteractionSource during composition without using `remember`](UnrememberedMutableInteractionSource.md.html) - [UnrememberedMutableState: Creating a state object during composition without using `remember`](UnrememberedMutableState.md.html) - [UnsafeImplicitIntentLaunch: Implicit intent matches an internal non-exported component](UnsafeImplicitIntentLaunch.md.html) @@ -344,16 +343,23 @@ - [WrongCall: Using wrong draw/layout method](WrongCall.md.html) - [WrongConstant: Incorrect constant](WrongConstant.md.html) - [WrongConstraintLayoutUsage: Marks a wrong usage of the Constraint Layout.](WrongConstraintLayoutUsage.md.html) + - [WrongNavigateRouteType: Navigation route should be an object literal or a destination class instance with arguments.](WrongNavigateRouteType.md.html) - [WrongRequiresOptIn: Experimental annotations defined in Kotlin must use kotlin.RequiresOptIn](WrongRequiresOptIn.md.html) - [WrongResourceImportAlias: Wrong import alias for this R class.](WrongResourceImportAlias.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) - [WrongThread: Wrong Thread](WrongThread.md.html) - [WrongThreadInterprocedural: Wrong Thread (Interprocedural)](WrongThreadInterprocedural.md.html) - [WrongViewCast: Mismatched view type](WrongViewCast.md.html) - [XmlEscapeNeeded: Missing XML Escape](XmlEscapeNeeded.md.html) -* Warning (398) +* Warning (401) - [AcceptsUserCertificates: Allowing User Certificates](AcceptsUserCertificates.md.html) + - [AccessibilityFocus: Forcing accessibility focus](AccessibilityFocus.md.html) + - [AccessibilityScrollActions: Incomplete Scroll Action support](AccessibilityScrollActions.md.html) + - [AccessibilityWindowStateChangedEvent: Use of accessibility window state change events](AccessibilityWindowStateChangedEvent.md.html) - [ActivityIconColor: Ongoing activity icon is not white](ActivityIconColor.md.html) - [AdapterViewChildren: `AdapterView` cannot have children in XML](AdapterViewChildren.md.html) - [AddJavascriptInterface: `addJavascriptInterface` Called](AddJavascriptInterface.md.html) diff --git a/docs/checks/vendors.md.html b/docs/checks/vendors.md.html index 52752edf..f07f1d70 100644 --- a/docs/checks/vendors.md.html +++ b/docs/checks/vendors.md.html @@ -3,10 +3,13 @@ Order: [Alphabetical](index.md.html) | [By category](categories.md.html) | By vendor | [By severity](severity.md.html) | [By year](year.md.html) | [Libraries](libraries.md.html) -* Built In (467) +* Built In (471) - [AaptCrash: Potential AAPT crash](AaptCrash.md.html) - [AcceptsUserCertificates: Allowing User Certificates](AcceptsUserCertificates.md.html) + - [AccessibilityFocus: Forcing accessibility focus](AccessibilityFocus.md.html) + - [AccessibilityScrollActions: Incomplete Scroll Action support](AccessibilityScrollActions.md.html) + - [AccessibilityWindowStateChangedEvent: Use of accessibility window state change events](AccessibilityWindowStateChangedEvent.md.html) - [AccidentalOctal: Accidental Octal](AccidentalOctal.md.html) - [ActivityIconColor: Ongoing activity icon is not white](ActivityIconColor.md.html) - [AdapterViewChildren: `AdapterView` cannot have children in XML](AdapterViewChildren.md.html) @@ -54,6 +57,7 @@ - [ConstantLocale: Constant Locale](ConstantLocale.md.html) - [ContentDescription: Image without `contentDescription`](ContentDescription.md.html) - [ConvertToWebp: Convert to WebP](ConvertToWebp.md.html) + - [CredManMissingDal: Missing Digital Asset Link for Credential Manager](CredManMissingDal.md.html) - [CredentialDependency: `credentials-play-services-auth` is Required](CredentialDependency.md.html) - [CustomPermissionTypo: Permission appears to be a custom permission with a typo](CustomPermissionTypo.md.html) - [CustomSplashScreen: Application-defined Launch Screen](CustomSplashScreen.md.html) @@ -538,13 +542,18 @@ - [UnsafeLifecycleWhenUsage: Unsafe UI operation in finally/catch of Lifecycle.whenStarted of similar method](UnsafeLifecycleWhenUsage.md.html) - [UnsafeLifecycleWhenUsage: Unsafe UI operation in finally/catch of Lifecycle.whenStarted of similar method](UnsafeLifecycleWhenUsage.md.html) -* Android Open Source Project (androidx.navigation.common) (1) +* Android Open Source Project (androidx.navigation.common) (4) - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) + - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) -* Android Open Source Project (androidx.navigation.runtime) (1) +* Android Open Source Project (androidx.navigation.runtime) (3) - [DeepLinkInActivityDestination: A should not be attached to an destination](DeepLinkInActivityDestination.md.html) + - [WrongNavigateRouteType: Navigation route should be an object literal or a destination class instance with arguments.](WrongNavigateRouteType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) * Android Open Source Project (androidx.recyclerview) (1) @@ -674,12 +683,6 @@ - [InvalidLanguageTagDelimiter: Undercore (_) is an unsupported delimiter for subtags](InvalidLanguageTagDelimiter.md.html) -* Jetpack Navigation Compose (androidx.navigation.compose) (3) - - - [ComposableDestinationInComposeScope: Building composable destination in compose scope](ComposableDestinationInComposeScope.md.html) - - [ComposableNavGraphInComposeScope: Building navigation graph in compose scope](ComposableNavGraphInComposeScope.md.html) - - [UnrememberedGetBackStackEntry: Calling getBackStackEntry during composition without using `remember`with a NavBackStackEntry key](UnrememberedGetBackStackEntry.md.html) - * slack (com.slack.lint.compose:compose-lints) (21) - [ComposeComposableModifier: Don't use @Composable builder functions for modifiers](ComposeComposableModifier.md.html) diff --git a/docs/checks/year.md.html b/docs/checks/year.md.html index 7efc4e7e..3dfeb5cc 100644 --- a/docs/checks/year.md.html +++ b/docs/checks/year.md.html @@ -3,9 +3,14 @@ Order: [Alphabetical](index.md.html) | [By category](categories.md.html) | [By vendor](vendors.md.html) | [By severity](severity.md.html) | By year | [Libraries](libraries.md.html) -* 2024 (11) +* 2024 (20) + - [AccessibilityFocus: Forcing accessibility focus](AccessibilityFocus.md.html) + - [AccessibilityScrollActions: Incomplete Scroll Action support](AccessibilityScrollActions.md.html) + - [AccessibilityWindowStateChangedEvent: Use of accessibility window state change events](AccessibilityWindowStateChangedEvent.md.html) - [BuildListAdds: Missing `add` call in `buildList`](BuildListAdds.md.html) + - [CredManMissingDal: Missing Digital Asset Link for Credential Manager](CredManMissingDal.md.html) + - [CredentialDependency: `credentials-play-services-auth` is Required](CredentialDependency.md.html) - [InvalidLanguageTagDelimiter: Undercore (_) is an unsupported delimiter for subtags](InvalidLanguageTagDelimiter.md.html) - [InvalidUseOfOnBackPressed: Do not call onBackPressed() within OnBackPressedDisptacher](InvalidUseOfOnBackPressed.md.html) - [ProtoLayoutEdgeContentLayoutResponsive: ProtoLayout Material EdgeContentLayout should be used with responsivebehaviour to ensure the best behaviour across different screen sizes andlocales.](ProtoLayoutEdgeContentLayoutResponsive.md.html) @@ -16,6 +21,10 @@ - [ProtoLayoutPrimaryLayoutResponsive: ProtoLayout Material PrimaryLayout should be used with responsive behaviourto ensure the best behaviour across different screen sizes and locales.](ProtoLayoutPrimaryLayoutResponsive.md.html) - [SuspiciousModifierThen: Using Modifier.then with a Modifier factory function with an implicit receiver](SuspiciousModifierThen.md.html) - [UnclosedTrace: Incorrect trace section usage](UnclosedTrace.md.html) + - [WrongNavigateRouteType: Navigation route should be an object literal or a destination class instance with arguments.](WrongNavigateRouteType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) + - [WrongStartDestinationType: If the startDestination points to a Class with arguments, the startDestination must be an instance of that class. If it points to a Class without arguments, startDestination can be a KClass literal, such as StartClass::class.](WrongStartDestinationType.md.html) * 2023 (50) @@ -70,7 +79,7 @@ - [WearSplashScreen: Wear: Use `SplashScreen` library](WearSplashScreen.md.html) - [WrongCommentType: Wrong Comment Type](WrongCommentType.md.html) -* 2022 (49) +* 2022 (50) - [ActivityIconColor: Ongoing activity icon is not white](ActivityIconColor.md.html) - [BinderGetCallingInMainThread: Incorrect usage of getCallingUid() or getCallingPid()](BinderGetCallingInMainThread.md.html) @@ -82,6 +91,7 @@ - [DeprecatedSinceApi: Using a method deprecated in earlier SDK](DeprecatedSinceApi.md.html) - [DoNotExposeEitherNetInRepositories: Repository APIs should not expose EitherNet types directly.](DoNotExposeEitherNetInRepositories.md.html) - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) + - [EmptyNavDeepLink: NavDeepLink must define an uri, action, and/or mimetype to be valid.](EmptyNavDeepLink.md.html) - [EmptySuperCall: Calling an empty super method](EmptySuperCall.md.html) - [FrequentlyChangedStateReadInComposition: Frequently changing state should not be directly read in composable function](FrequentlyChangedStateReadInComposition.md.html) - [FullyQualifiedResource: Resources should use an import alias instead of being fully qualified.](FullyQualifiedResource.md.html) @@ -122,7 +132,7 @@ - [UseSdkSuppress: Using `@SdkSuppress` instead of `@RequiresApi`](UseSdkSuppress.md.html) - [WrongResourceImportAlias: Wrong import alias for this R class.](WrongResourceImportAlias.md.html) -* 2021 (130) +* 2021 (127) - [AnnotateVersionCheck: Annotate SDK_INT checks](AnnotateVersionCheck.md.html) - [AppBundleLocaleChanges: App Bundle handling of runtime locale changes](AppBundleLocaleChanges.md.html) @@ -135,8 +145,6 @@ - [BindsWrongParameterCount: @Binds must have one parameter](BindsWrongParameterCount.md.html) - [CastingViewContextToActivity: Unsafe cast of `Context` to `Activity`](CastingViewContextToActivity.md.html) - [CoarseFineLocation: Cannot use `ACCESS_FINE_LOCATION` without `ACCESS_COARSE_LOCATION`](CoarseFineLocation.md.html) - - [ComposableDestinationInComposeScope: Building composable destination in compose scope](ComposableDestinationInComposeScope.md.html) - - [ComposableNavGraphInComposeScope: Building navigation graph in compose scope](ComposableNavGraphInComposeScope.md.html) - [ConflictingOnColor: Background colors with the same value should have the same 'on' color](ConflictingOnColor.md.html) - [CoroutineCreationDuringComposition: Calls to `async` or `launch` should happen inside a LaunchedEffect and not composition](CoroutineCreationDuringComposition.md.html) - [CustomSplashScreen: Application-defined Launch Screen](CustomSplashScreen.md.html) @@ -242,7 +250,6 @@ - [UastImplementation: Avoid using UAST implementation](UastImplementation.md.html) - [UnnecessaryComposedModifier: Modifier.composed should only be used for modifiers that invoke @Composable functions](UnnecessaryComposedModifier.md.html) - [UnrememberedAnimatable: Creating an Animatable during composition without using `remember`](UnrememberedAnimatable.md.html) - - [UnrememberedGetBackStackEntry: Calling getBackStackEntry during composition without using `remember`with a NavBackStackEntry key](UnrememberedGetBackStackEntry.md.html) - [UnsafeRepeatOnLifecycleDetector: RepeatOnLifecycle should be used with viewLifecycleOwner in Fragments.](UnsafeRepeatOnLifecycleDetector.md.html) - [UnusedCrossfadeTargetStateParameter: Crossfade calls should use the provided `T` parameter in the content lambda](UnusedCrossfadeTargetStateParameter.md.html) - [UnusedTransitionTargetStateParameter: Transition.animate* calls should use the provided targetState when defining values](UnusedTransitionTargetStateParameter.md.html) @@ -478,7 +485,7 @@ - [VectorRaster: Vector Image Generation](VectorRaster.md.html) - [VulnerableCordovaVersion: Vulnerable Cordova Version](VulnerableCordovaVersion.md.html) -* 2014 (73) +* 2014 (72) - [AaptCrash: Potential AAPT crash](AaptCrash.md.html) - [AccidentalOctal: Accidental Octal](AccidentalOctal.md.html) @@ -492,7 +499,6 @@ - [ByteOrderMark: Byte order mark inside files](ByteOrderMark.md.html) - [ChromeOsAbiSupport: Missing ABI Support for ChromeOS](ChromeOsAbiSupport.md.html) - [ClickableViewAccessibility: Accessibility in Custom Views](ClickableViewAccessibility.md.html) - - [CredentialDependency: `credentials-play-services-auth` is Required](CredentialDependency.md.html) - [CustomViewStyleable: Mismatched Styleable/Custom View Name](CustomViewStyleable.md.html) - [DataBindingWithoutKapt: Data Binding without Annotation Processing](DataBindingWithoutKapt.md.html) - [DeprecatedProvider: Using BC Provider](DeprecatedProvider.md.html) diff --git a/docs/usage/changes.md.html b/docs/usage/changes.md.html index 169e3c09..d9b09ae6 100644 --- a/docs/usage/changes.md.html +++ b/docs/usage/changes.md.html @@ -4,6 +4,20 @@ For information about internal improvements and API changes affecting lint check authors, see the API Guide. +**8.6** + +* New built-in lint checks: + + Issue ID | Summary + ---------------------------------------|------------------------------------------------ + `AccessibilityFocus` | Forcing accessibility focus + `AccessibilityScrollActions` | Incomplete Scroll Action support + `AccessibilityWindowStateChangedEvent` | Use of accessibility window state change events + `CredentialDependency` | `credentials-play-services-auth` is Required + `PictureInPictureIssue` | Picture In Picture best practices not followed + `SimilarGradleDependency` | Multiple Versions Gradle Dependency + `UnclosedTrace` | Incorrect trace section usage + **8.4** * New built-in lint-checks: diff --git a/docs/user-guide.html b/docs/user-guide.html index 7d13e747..2e5c6c71 100644 --- a/docs/user-guide.html +++ b/docs/user-guide.html @@ -45,30 +45,30 @@   3.1  Configuring the Lint Version
      3.2  Updating Lint
    Baselines
    -Creating a Baseline
    -  5.1  Customize the baseline
    -  5.2  Baseline warning
    -Performance Tuning
    -  6.1  Use 7.0 and Incremental Lint
    -  6.2  Use the lintDebug target, not lint
    -  6.3  Only analyze app/leaf modules
    -  6.4  Don't analyze test sources
    -  6.5  Don't use checkAllWarnings
    -  6.6  Use latest version
    -  6.7  Give lint a lot of RAM
    -  6.8  Finding Slow Lint Checks
    -Suppressing Lint Checks
    -Configuring Using lint.xml Files
    -  8.1  XML Syntax
    -  8.2  Nesting & Precedence
    -  8.3  Sample lint.xml file
    -Appendix: Recent Changes
    -10  Appendix: Environment Variables and System Properties
    -  10.1  Environment Variables
    -    10.1.1  Detector Configuration Variables
    -    10.1.2  Lint Configuration Variables
    -    10.1.3  Lint Development Variables
    -  10.2  System Properties
    +  4.1  Creating a Baseline
    +  4.2  Customize the baseline
    +  4.3  Baseline warning
    +Performance Tuning
    +  5.1  Use 7.0 and Incremental Lint
    +  5.2  Use the lintDebug target, not lint
    +  5.3  Only analyze app/leaf modules
    +  5.4  Don't analyze test sources
    +  5.5  Don't use checkAllWarnings
    +  5.6  Use latest version
    +  5.7  Give lint a lot of RAM
    +  5.8  Finding Slow Lint Checks
    +Suppressing Lint Checks
    +Configuring Using lint.xml Files
    +  7.1  XML Syntax
    +  7.2  Nesting & Precedence
    +  7.3  Sample lint.xml file
    +Appendix: Recent Changes
    +Appendix: Environment Variables and System Properties
    +  9.1  Environment Variables
    +    9.1.1  Detector Configuration Variables
    +    9.1.2  Lint Configuration Variables
    +    9.1.3  Lint Development Variables
    +  9.2  System Properties

    @@ -88,6 +88,27 @@

    +8.6 + +

    + +

      +
    • New built-in lint checks:
    + +

    + +

    + + + + + + + +
    Issue ID Summary
    AccessibilityFocus Forcing accessibility focus
    AccessibilityScrollActions Incomplete Scroll Action support
    AccessibilityWindowStateChangedEvent Use of accessibility window state change events
    CredentialDependency credentials-play-services-auth is Required
    PictureInPictureIssue Picture In Picture best practices not followed
    SimilarGradleDependency Multiple Versions Gradle Dependency
    UnclosedTrace Incorrect trace section usage
    + +

    + 8.4

    @@ -1052,7 +1073,7 @@ android.experimental.lint.version=8.0.0    

    Baselines

    -   

    Creating a Baseline

    +   

    Creating a Baseline

    @@ -1064,7 +1085,7 @@

    -To create a baseline snapshot, modify your project's build.gradle`` +To create a baseline snapshot, modify your project's build.gradle file as follows.

    android {
    @@ -1082,7 +1103,7 @@
     
     Then, run lint from the IDE (Analyze > Inspect Code) or from
     the command line as follows. The output prints the location of the
    -lint-baseline.xml file. The file location for your setup might be
    +lint-baseline.xml file. The file location for your setup might be
     different from what is shown here.
     
     

        $ ./gradlew lintDebug
    @@ -1092,11 +1113,11 @@
     
     Running lint records all of the current issues in the
     lint-baseline.xml file. The set of current issues is called the
    -baseline, and you can check the lint-baseline.xml file into version
    +baseline, and you can check the lint-baseline.xml file into version
     control if you want to share it with others.
     
     

    -   

    Customize the baseline

    +   

    Customize the baseline

    @@ -1115,7 +1136,7 @@ codebase, lint lists only the newly introduced bugs.

    -   

    Baseline warning

    +   

    Baseline warning

    @@ -1135,22 +1156,19 @@

    -

    Baselines are enabled when you run inspections in batch
    - -

    - - mode in the IDE, but they are ignored for the in-editor checks that - run in the background when you are editing a file. The reason is that - baselines are intended for the case where a codebase has a massive - number of existing warnings, but you do want to fix issues locally - while you touch the code.

    +

    Baselines are enabled when you run inspections in batch mode in the + IDE, but they are ignored for the in-editor checks that run in the + background when you are editing a file. The reason is that baselines + are intended for the case where a codebase has a massive number of + existing warnings, but you do want to fix issues locally while you + touch the code.

    Official documentation

    -   

    Performance Tuning

    +   

    Performance Tuning

    @@ -1175,7 +1193,7 @@ change is an improvement.

    -   

    Use 7.0 and Incremental Lint

    +   

    Use 7.0 and Incremental Lint

    @@ -1207,11 +1225,11 @@ cache; once that's done, this will work for clean builds as well.

    -   

    Use the lintDebug target, not lint

    +   

    Use the lintDebug target, not lint

    -If you run “./gradlew tasks” you'll see that there's a lint task, and +If you run ./gradlew tasks you'll see that there's a lint task, and you may be tempted to run it. But lint also adds specific tasks for each variant. For example, if you only have “debug” and “release” variants (e.g. you haven't defined any product flavors or additional @@ -1264,7 +1282,7 @@

    If you have lots of variants this makes a huge difference; with 7 -variants, lint will take ~7x longer than lintDebug !! (modulo some +variants, lint will take ~7x longer than lintDebug!! (modulo some minor caching)

    @@ -1274,12 +1292,12 @@ update to 7.0 this is no longer a problem.

    -   

    Only analyze app/leaf modules

    +   

    Only analyze app/leaf modules

    -If you have divided your project into many smaller modules - a number -of libraries and just a couple of app modules, it's much better to +If you have divided your project into many smaller modules — a number +of libraries and just a couple of app modules — it's much better to

    @@ -1352,7 +1370,7 @@ problems, so we will most likely turn this mode back on by default.

    -   

    Don't analyze test sources

    +   

    Don't analyze test sources

    @@ -1388,7 +1406,7 @@ ... } }

    -   

    Don't use checkAllWarnings

    +   

    Don't use checkAllWarnings

    @@ -1408,7 +1426,7 @@ checkAllWarnings.)

    -   

    Use latest version

    +   

    Use latest version

    @@ -1422,7 +1440,7 @@ really good coverage so regressions do not happen very often.)

    -   

    Give lint a lot of RAM

    +   

    Give lint a lot of RAM

    @@ -1459,7 +1477,7 @@ ./gradlew -Dorg.gradle.jvmargs=-Xmx8g app:lintDebug takes 8m 57s!

    -   

    Finding Slow Lint Checks

    +   

    Finding Slow Lint Checks

    @@ -1500,7 +1518,7 @@ If you see a suspicious check, you can try to disable its issues (unless you find their value is worth the cost; after all, real world -bugs are typically more expensive than server compute cycles.) But +bugs are typically more expensive than server compute cycles). But don't forget to also report the bug to the lint check author!

    @@ -1511,13 +1529,13 @@ unlucky detector that comes along has to perform the computation, and subsequent detectors just get to reuse the result. Because of this, it's not always the case that a particular detector is a - performance culprit, and as soon as you disable it, a new detector - moves to the top of the list paying the same initialization costs. + performance culprit. As soon as you disable it, a new detector may + move to the top of the list paying the same initialization costs. The main use for this tool is to find extreme or unusual performance behaviors.

    -   

    Suppressing Lint Checks

    +   

    Suppressing Lint Checks

    @@ -1538,9 +1556,9 @@

  • With a lint.xml configuration file in the project
  • With a lint.xml configuration file passed to lint - via the —config flag + via the --config flag
  • -
  • With the —ignoreflag passed to lint +
  • With the --ignore flag passed to lint
  • With a baseline
  • @@ -1608,7 +1626,7 @@ https://developer.android.com/studio/write/lint.html#config

    -   

    Configuring Using lint.xml Files

    +   

    Configuring Using lint.xml Files

    @@ -1628,61 +1646,68 @@ This chapter describes the syntax of lint.xml files.

    -   

    XML Syntax

    +   

    XML Syntax

    The root tag is always <lint>, and it can contain one or more <issue> elements. Each can specify the following -attributes: id: The issue id the following configuration applies -to. Note that this can be a comma separated list of multiple id's, in -which case the configuration applies to all of them. It can also be -the special value “all”, which will match all issue id's. And when -configuring severity, the id is also allowed to be a category, such -as “Security”. +attributes:

    -in: Specifies that this configuration only applies when lint -runs in the given hosts. There are predefined names for various -integrations of lint; “gradle” refers to lint running in the Gradle -plugin; “studio” refers to lint running in the IDE, “cli” refers to -lint running from the command line tools “lint” binary, etc. Like -with id's, this can be a comma separated list, which makes the rule -match if the lint host is any of the listed hosts. Finally, note that -you can also add a “!” in front of each host to negate the check. For -example, to enable a check anywhere except when running in Studio, -use in="!studio". +

      +
    • id: The issue id the following configuration applies + to. Note that this can be a comma separated list of multiple id's, in + which case the configuration applies to all of them. It can also be + the special value “all”, which will match all issue id's. And when + configuring severity, the id is also allowed to be a category, such + as “Security”. +
    • +
    • in: Specifies that this configuration only applies when lint + runs in the given hosts. There are predefined names for various + integrations of lint; “gradle” refers to lint running in the Gradle + plugin; “studio” refers to lint running in the IDE, “cli” refers to + lint running from the command line tools “lint” binary, etc. Like + with id's, this can be a comma separated list, which makes the rule + match if the lint host is any of the listed hosts. Finally, note that + you can also add a “!” in front of each host to negate the check. For + example, to enable a check anywhere except when running in Studio, + use in="!studio".
    -

    +

    In addition, the element can specify one or more children:

    -<ignore path="...">: Specifies a path to ignore. Can contain the -globbing character “*” to match any substring in the path. <ignore regexp="...">: Specifies either a regular expression to ignore. The -regular expression is matched against both the location of the error -and the error message itself. <option name="..." value="...">: -Specifies an option value. This can be used to configure some lint -checks with options. +

      +
    • <ignore path="...">: Specifies a path to ignore. Can contain the + globbing character “*” to match any substring in the path. +
    • +
    • <ignore regexp="...">: Specifies either a regular expression to + ignore. The regular expression is matched against both the location of + the error and the error message itself. +
    • +
    • <option name="..." value="...">: Specifies an option value. This can + be used to configure some lint checks with options.
    -

    +

    Finally, on the root element you can specify a number of attributes, such as lintJars (a list of jar files containing custom lint checks, separated by a semicolon as a path separator), and flags like warningsAsErrors, checkTestSources, etc (matching most -of the flags offered via the lintOptions block in Gradle files.) +of the flags offered via the lintOptions block in Gradle files).

    -   

    Nesting & Precedence

    +   

    Nesting & Precedence

    You can specify configurations for “all”, but these will be matched after an exact match has been done. E.g. if we have -both <issue id="all" severity="ignore"> and <issue id="MyId" severity="error">, the severity for MyId will be “error”“ since +both <issue id="all" severity="ignore"> and <issue id="MyId" severity="error">, the severity for MyId will be “error” since that's a more exact match.

    @@ -1718,7 +1743,7 @@ ”!gradle“, this will match after the other attempts.

    -   

    Sample lint.xml file

    +   

    Sample lint.xml file

    @@ -1764,7 +1789,7 @@

    -   

    Appendix: Recent Changes

    +   

    Appendix: Recent Changes

    @@ -1778,6 +1803,27 @@

    +8.6 + +

    + +

      +
    • New built-in lint checks:
    + +

    + +

    + + + + + + + +
    Issue ID Summary
    AccessibilityFocus Forcing accessibility focus
    AccessibilityScrollActions Incomplete Scroll Action support
    AccessibilityWindowStateChangedEvent Use of accessibility window state change events
    CredentialDependency credentials-play-services-auth is Required
    PictureInPictureIssue Picture In Picture best practices not followed
    SimilarGradleDependency Multiple Versions Gradle Dependency
    UnclosedTrace Incorrect trace section usage
    + +

    + 8.4

    @@ -2146,7 +2192,7 @@ visualized in a unified way on CI servers.

    -   

    Appendix: Environment Variables and System Properties

    +   

    Appendix: Environment Variables and System Properties

    @@ -2156,9 +2202,9 @@ what they are seems useful.

    -   

    Environment Variables

    +   

    Environment Variables

    -   

    Detector Configuration Variables

    +   

    Detector Configuration Variables

    @@ -2190,7 +2236,7 @@ for that check.

    -   

    Lint Configuration Variables

    +   

    Lint Configuration Variables

    @@ -2244,7 +2290,7 @@ Corresponding system property: android.lint.skip.bytecode.verifier

    -   

    Lint Development Variables

    +   

    Lint Development Variables

    @@ -2278,7 +2324,7 @@ server or by the rest of the development team.

    -   

    System Properties

    +   

    System Properties

    @@ -2349,4 +2395,4 @@ Corresponding system property: android.lint.skip.bytecode.verifier

    -

    formatted by Markdeep 1.16  
    \ No newline at end of file +

    formatted by Markdeep 1.17  
    \ No newline at end of file