1
0
Fork 0
IntelliJ-IdeaVim/qodana.sarif.json

79982 lines
4.1 MiB
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"$schema": "https://raw.githubusercontent.com/schemastore/schemastore/master/src/schemas/json/sarif-2.1.0-rtm.5.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "QDJVM",
"fullName": "Qodana for JVM",
"version": "221.5921.22.149",
"rules": [],
"taxa": [
{
"id": "Language injection",
"name": "Language injection"
},
{
"id": "JVM languages",
"name": "JVM languages"
},
{
"id": "Kotlin",
"name": "Kotlin"
},
{
"id": "Kotlin/Style issues",
"name": "Style issues",
"relationships": [
{
"target": {
"id": "Kotlin",
"index": 2,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Kotlin/Redundant constructs",
"name": "Redundant constructs",
"relationships": [
{
"target": {
"id": "Kotlin",
"index": 2,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java",
"name": "Java"
},
{
"id": "Java/Internationalization",
"name": "Internationalization",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Performance",
"name": "Performance",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Spring",
"name": "Spring"
},
{
"id": "Spring/Spring Core",
"name": "Spring Core",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Spring/Spring Core/XML",
"name": "XML",
"relationships": [
{
"target": {
"id": "Spring/Spring Core",
"index": 9,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Code style issues",
"name": "Code style issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Error handling",
"name": "Error handling",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Declaration redundancy",
"name": "Declaration redundancy",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Spring/Spring Core/Code",
"name": "Code",
"relationships": [
{
"target": {
"id": "Spring/Spring Core",
"index": 9,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Kotlin/Migration",
"name": "Migration",
"relationships": [
{
"target": {
"id": "Kotlin",
"index": 2,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Probable bugs",
"name": "Probable bugs",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Serialization issues",
"name": "Serialization issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Class structure",
"name": "Class structure",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy",
"name": "Groovy"
},
{
"id": "Groovy/GPath",
"name": "GPath",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Imports",
"name": "Imports",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Maven",
"name": "Maven"
},
{
"id": "MySQL",
"name": "MySQL"
},
{
"id": "Kotlin/Probable bugs",
"name": "Probable bugs",
"relationships": [
{
"target": {
"id": "Kotlin",
"index": 2,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Threading issues",
"name": "Threading issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Numeric issues",
"name": "Numeric issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Control flow issues",
"name": "Control flow issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "JPA",
"name": "JPA"
},
{
"id": "Java/Initialization",
"name": "Initialization",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "HTML",
"name": "HTML"
},
{
"id": "Java/Security",
"name": "Security",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Properties files",
"name": "Properties files"
},
{
"id": "Java/Java language level migration aids",
"name": "Java language level migration aids",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level migration aids/Java 15",
"name": "Java 15",
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids",
"index": 33,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy/Naming conventions",
"name": "Naming conventions",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Packaging issues",
"name": "Packaging issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Verbose or redundant code constructs",
"name": "Verbose or redundant code constructs",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "General",
"name": "General"
},
{
"id": "FreeMarker",
"name": "FreeMarker"
},
{
"id": "EditorConfig",
"name": "EditorConfig"
},
{
"id": "Java/Code maturity",
"name": "Code maturity",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "SQL",
"name": "SQL"
},
{
"id": "Groovy/Probable bugs",
"name": "Probable bugs",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Data flow",
"name": "Data flow",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "CDI (Contexts and Dependency Injection)",
"name": "CDI (Contexts and Dependency Injection)"
},
{
"id": "Velocity",
"name": "Velocity"
},
{
"id": "Java/JUnit",
"name": "JUnit",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Kotlin/Naming conventions",
"name": "Naming conventions",
"relationships": [
{
"target": {
"id": "Kotlin",
"index": 2,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "CSS",
"name": "CSS"
},
{
"id": "CSS/Invalid elements",
"name": "Invalid elements",
"relationships": [
{
"target": {
"id": "CSS",
"index": 49,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Finalization",
"name": "Finalization",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Logging",
"name": "Logging",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Modularization issues",
"name": "Modularization issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Javadoc",
"name": "Javadoc",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Kotlin/Java interop issues",
"name": "Java interop issues",
"relationships": [
{
"target": {
"id": "Kotlin",
"index": 2,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Naming conventions",
"name": "Naming conventions",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Naming conventions/Class",
"name": "Class",
"relationships": [
{
"target": {
"id": "Java/Naming conventions",
"index": 56,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Hibernate",
"name": "Hibernate"
},
{
"id": "Spring/Spring Integration",
"name": "Spring Integration",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Plugin DevKit",
"name": "Plugin DevKit"
},
{
"id": "Plugin DevKit/Plugin descriptor",
"name": "Plugin descriptor",
"relationships": [
{
"target": {
"id": "Plugin DevKit",
"index": 60,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Abstraction issues",
"name": "Abstraction issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Assignment issues",
"name": "Assignment issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level migration aids/Java 9",
"name": "Java 9",
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids",
"index": 33,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy/Threading issues",
"name": "Threading issues",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy/Control flow issues",
"name": "Control flow issues",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Spring/Spring Core/Setup",
"name": "Setup",
"relationships": [
{
"target": {
"id": "Spring/Spring Core",
"index": 9,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "XSLT",
"name": "XSLT"
},
{
"id": "JUnit",
"name": "JUnit"
},
{
"id": "Groovy/Style",
"name": "Style",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java EE",
"name": "Java EE"
},
{
"id": "Java/Portability",
"name": "Portability",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/TestNG",
"name": "TestNG",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Plugin DevKit/Code",
"name": "Code",
"relationships": [
{
"target": {
"id": "Plugin DevKit",
"index": 60,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "JSP",
"name": "JSP"
},
{
"id": "Java/Visibility",
"name": "Visibility",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Concurrency annotation issues",
"name": "Concurrency annotation issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "CSS/Probable bugs",
"name": "Probable bugs",
"relationships": [
{
"target": {
"id": "CSS",
"index": 49,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Lombok",
"name": "Lombok",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Lombok/Redundant modifiers",
"name": "Redundant modifiers",
"relationships": [
{
"target": {
"id": "Java/Lombok",
"index": 79,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "RegExp",
"name": "RegExp"
},
{
"id": "UI form",
"name": "UI form"
},
{
"id": "Java/Naming conventions/Method",
"name": "Method",
"relationships": [
{
"target": {
"id": "Java/Naming conventions",
"index": 56,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy/Annotations",
"name": "Annotations",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Proofreading",
"name": "Proofreading"
},
{
"id": "XML",
"name": "XML"
},
{
"id": "Java/Cloning issues",
"name": "Cloning issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Manifest",
"name": "Manifest"
},
{
"id": "Groovy/Potentially confusing code constructs",
"name": "Potentially confusing code constructs",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Ant",
"name": "Ant"
},
{
"id": "Groovy/Error handling",
"name": "Error handling",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level migration aids/Java 5",
"name": "Java 5",
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids",
"index": 33,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level migration aids/Java 8",
"name": "Java 8",
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids",
"index": 33,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Web services",
"name": "Web services"
},
{
"id": "Groovy/Assignment issues",
"name": "Assignment issues",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Class metrics",
"name": "Class metrics",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Encapsulation",
"name": "Encapsulation",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Test frameworks",
"name": "Test frameworks",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Reflective access",
"name": "Reflective access",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Spring/Spring AOP",
"name": "Spring AOP",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Method metrics",
"name": "Method metrics",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Resource management",
"name": "Resource management",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level migration aids/Java 14",
"name": "Java 14",
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids",
"index": 33,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Numeric issues/Cast",
"name": "Cast",
"relationships": [
{
"target": {
"id": "Java/Numeric issues",
"index": 26,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Plugin DevKit/Description file",
"name": "Description file",
"relationships": [
{
"target": {
"id": "Plugin DevKit",
"index": 60,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/JavaBeans issues",
"name": "JavaBeans issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Pattern validation",
"name": "Pattern validation"
},
{
"id": "JSON and JSON5",
"name": "JSON and JSON5"
},
{
"id": "Java/Dependency issues",
"name": "Dependency issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level issues",
"name": "Java language level issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "HTML/Accessibility",
"name": "Accessibility",
"relationships": [
{
"target": {
"id": "HTML",
"index": 30,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy/Method metrics",
"name": "Method metrics",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "XPath",
"name": "XPath"
},
{
"id": "Java/Inheritance issues",
"name": "Inheritance issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "AOP",
"name": "AOP"
},
{
"id": "Bean Validation",
"name": "Bean Validation"
},
{
"id": "Oracle",
"name": "Oracle"
},
{
"id": "Kotlin/Migration/Maven",
"name": "Maven",
"relationships": [
{
"target": {
"id": "Kotlin/Migration",
"index": 15,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Internationalization",
"name": "Internationalization"
},
{
"id": "Spring/Spring WebSocket",
"name": "Spring WebSocket",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level migration aids/Java 10",
"name": "Java 10",
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids",
"index": 33,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level migration aids/Java 7",
"name": "Java 7",
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids",
"index": 33,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Compiler issues",
"name": "Compiler issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Version control",
"name": "Version control"
},
{
"id": "MongoJS",
"name": "MongoJS"
},
{
"id": "Kotlin/Migration/Gradle",
"name": "Gradle",
"relationships": [
{
"target": {
"id": "Kotlin/Migration",
"index": 15,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Memory",
"name": "Memory",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Structural search",
"name": "Structural search"
},
{
"id": "Spring/Spring Security",
"name": "Spring Security",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Performance/Embedded",
"name": "Embedded",
"relationships": [
{
"target": {
"id": "Java/Performance",
"index": 7,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Feature usage statistics",
"name": "Feature usage statistics"
},
{
"id": "Spring/Spring Data",
"name": "Spring Data",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Probable bugs/Nullability problems",
"name": "Nullability problems",
"relationships": [
{
"target": {
"id": "Java/Probable bugs",
"index": 16,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "RELAX NG",
"name": "RELAX NG"
},
{
"id": "CSS/Code quality tools",
"name": "Code quality tools",
"relationships": [
{
"target": {
"id": "CSS",
"index": 49,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Properties files",
"name": "Properties files",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Gradle",
"name": "Gradle"
},
{
"id": "Gradle/Probable bugs",
"name": "Probable bugs",
"relationships": [
{
"target": {
"id": "Gradle",
"index": 137,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Spring/Spring Boot",
"name": "Spring Boot",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Java language level migration aids/Java 11",
"name": "Java 11",
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids",
"index": 33,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "PostgreSQL",
"name": "PostgreSQL"
},
{
"id": "Spring/Spring Web Services",
"name": "Spring Web Services",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "SQL server",
"name": "SQL server"
},
{
"id": "Groovy/Data flow",
"name": "Data flow",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Kotlin/Other problems",
"name": "Other problems",
"relationships": [
{
"target": {
"id": "Kotlin",
"index": 2,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Dependency analysis",
"name": "Dependency analysis"
},
{
"id": "EL",
"name": "EL"
},
{
"id": "WSDL",
"name": "WSDL"
},
{
"id": "Java/Lombok/Redundant definitions",
"name": "Redundant definitions",
"relationships": [
{
"target": {
"id": "Java/Lombok",
"index": 79,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Spring/Spring MVC",
"name": "Spring MVC",
"relationships": [
{
"target": {
"id": "Spring",
"index": 8,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "CSS/Code style issues",
"name": "Code style issues",
"relationships": [
{
"target": {
"id": "CSS",
"index": 49,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy/Other",
"name": "Other",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/Bitwise operation issues",
"name": "Bitwise operation issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy/Validity issues",
"name": "Validity issues",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Kotlin/Logging",
"name": "Logging",
"relationships": [
{
"target": {
"id": "Kotlin",
"index": 2,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Java/toString() issues",
"name": "toString() issues",
"relationships": [
{
"target": {
"id": "Java",
"index": 5,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "Groovy/Declaration redundancy",
"name": "Declaration redundancy",
"relationships": [
{
"target": {
"id": "Groovy",
"index": 19,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
}
],
"language": "en-US",
"contents": [
"localizedData",
"nonLocalizedData"
],
"isComprehensive": false
},
"extensions": [
{
"name": "org.intellij.intelliLang",
"version": "221.5921.22",
"rules": [
{
"id": "InjectionNotApplicable",
"shortDescription": {
"text": "Injection Annotation not applicable"
},
"fullDescription": {
"text": "Reports when a '@Language' annotation is applied to an element with a type other than 'String' or 'String[]'. Example: '@Language(\"HTML\") int i;' After the quick-fix is applied: 'int i;'",
"markdown": "Reports when a `@Language` annotation is applied to an element with a type other than `String` or `String[]`.\n\n**Example:**\n\n\n @Language(\"HTML\") int i;\n\nAfter the quick-fix is applied:\n\n\n int i;\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "error",
"parameters": {
"ideaSeverity": "ERROR",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Language injection",
"index": 0,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "PatternOverriddenByNonAnnotatedMethod",
"shortDescription": {
"text": "Non-annotated Method overrides @Pattern Method"
},
"fullDescription": {
"text": "Reports when a method without any '@Pattern' annotation overrides a '@Pattern' annotated method. This does not prevent error-highlighting inside the editor, however the overriding method will not be checked at runtime. A quick fix is provided to add a '@Pattern' annotation that matches the one from the superclass method. This ensures the runtime-check instrumentation works correctly. Example: 'abstract class Parent {\n abstract @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId();\n }\n class Child extends Parent {\n @Override String getId() { // warning here\n return \"12-345\";\n }\n }'",
"markdown": "Reports when a method without any `@Pattern` annotation overrides a `@Pattern` annotated method. This does not prevent error-highlighting inside the editor, however the overriding method will not be checked at runtime.\n\n\nA quick fix is provided to add a `@Pattern` annotation that matches the one from the superclass method. This ensures the\nruntime-check instrumentation works correctly.\n\n**Example:**\n\n\n abstract class Parent {\n abstract @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId();\n }\n class Child extends Parent {\n @Override String getId() { // warning here\n return \"12-345\";\n }\n }\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Pattern validation",
"index": 107,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "InjectedReferences",
"shortDescription": {
"text": "Injected references"
},
"fullDescription": {
"text": "Reports unresolved references injected by Language Injections. Example: @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist",
"markdown": "Reports unresolved references injected by [Language Injections](https://www.jetbrains.com/help/idea/using-language-injections.html).\n\nExample:\n\n```\n @Language(\"file-reference\")\n String fileName = \"/home/user/nonexistent.file\"; // highlighted if file doesn't exist\n```"
},
"defaultConfiguration": {
"enabled": true,
"level": "error",
"parameters": {
"ideaSeverity": "ERROR",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "General",
"index": 38,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "PatternNotApplicable",
"shortDescription": {
"text": "Pattern Annotation not applicable"
},
"fullDescription": {
"text": "Reports when a '@Pattern' annotation is applied to an element with a type other than 'String'. Example: '@Pattern(\"\\\\d\\\\d\") int i;'",
"markdown": "Reports when a `@Pattern` annotation is applied to an element with a type other than `String`.\n\n**Example:**\n\n\n @Pattern(\"\\\\d\\\\d\") int i;\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "error",
"parameters": {
"ideaSeverity": "ERROR",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Pattern validation",
"index": 107,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "UnknownLanguage",
"shortDescription": {
"text": "Unknown Language ID"
},
"fullDescription": {
"text": "Reports when the ID of the language used in a '@Language' annotation is unknown. Example: '@Language(\"HMTL\") String html;'",
"markdown": "Reports when the ID of the language used in a `@Language` annotation is unknown.\n\n**Example:**\n\n\n @Language(\"HMTL\") String html;\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "error",
"parameters": {
"ideaSeverity": "ERROR",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Language injection",
"index": 0,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "PatternValidation",
"shortDescription": {
"text": "Validate annotated patterns"
},
"fullDescription": {
"text": "Reports expressions passed as arguments for '@Pattern' parameters and returned from '@Pattern'-annotated methods that do not match the specified pattern. Example: '@Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId() {\n return \"1\";\n }'",
"markdown": "Reports expressions passed as arguments for `@Pattern` parameters and returned from `@Pattern`-annotated methods that do not match the specified pattern.\n\n**Example:**\n\n\n @Pattern(\"\\\\d\\\\d-\\\\d\\\\d\\\\d\") String getId() {\n return \"1\";\n }\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Pattern validation",
"index": 107,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "LanguageMismatch",
"shortDescription": {
"text": "Language mismatch"
},
"fullDescription": {
"text": "Reports when the language of a reference does not match the expected language of the usage context. Example: '@Language(\"JavaScript\")\n String JS_CODE = \"var x;\";\n\n @Language(\"XPath\")\n String XPATH_CODE = JS_CODE; // warning here'",
"markdown": "Reports when the language of a reference does not match the expected language of the usage context.\n\nExample:\n\n\n @Language(\"JavaScript\")\n String JS_CODE = \"var x;\";\n\n @Language(\"XPath\")\n String XPATH_CODE = JS_CODE; // warning here\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Language injection",
"index": 0,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
}
],
"language": "en-US",
"contents": [
"localizedData",
"nonLocalizedData"
],
"isComprehensive": false
},
{
"name": "com.intellij.java",
"version": "221.5921.22",
"rules": [
{
"id": "OverrideOnly",
"shortDescription": {
"text": "Method can only be overridden"
},
"fullDescription": {
"text": "Reports calls to API methods marked with '@ApiStatus.OverrideOnly'. The '@ApiStatus.OverrideOnly' annotation indicates that the method is part of SPI (Service Provider Interface). Clients of the declaring library should implement or override such methods, not call them directly. Marking a class or interface with this annotation is the same as marking every method with it.",
"markdown": "Reports calls to API methods marked with `@ApiStatus.OverrideOnly`.\n\n\nThe `@ApiStatus.OverrideOnly` annotation indicates that the method is part of SPI (Service Provider Interface).\nClients of the declaring library should implement or override such methods, not call them directly.\nMarking a class or interface with this annotation is the same as marking every method with it."
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "JVM languages",
"index": 1,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "CallToSuspiciousStringMethod",
"shortDescription": {
"text": "Call to suspicious 'String' method"
},
"fullDescription": {
"text": "Reports calls of: 'equals()' 'equalsIgnoreCase()' 'compareTo()' 'compareToIgnoreCase()' and 'trim()' on 'String' objects. Comparison of internationalized strings should probably use a 'java.text.Collator' instead. 'String.trim()' only removes control characters between 0x00 and 0x20. The 'String.strip()' method introduced in Java 11 is more Unicode aware and can be used as a replacement.",
"markdown": "Reports calls of:\n\n* `equals()`\n* `equalsIgnoreCase()`\n* `compareTo()`\n* `compareToIgnoreCase()` and\n* `trim()`\n\n\non `String` objects.\nComparison of internationalized strings should probably use a `java.text.Collator` instead.\n`String.trim()` only removes control characters between 0x00 and 0x20.\nThe `String.strip()` method introduced in Java 11 is more Unicode aware and can be used as a replacement."
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Internationalization",
"index": 6,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "KeySetIterationMayUseEntrySet",
"shortDescription": {
"text": "Iteration over 'keySet()' can be optimized"
},
"fullDescription": {
"text": "Reports iterations over the 'keySet()' of a 'java.util.Map' instance, where the iterated keys are used to retrieve the values from the map. Such iteration may be more efficient when replaced with an iteration over the 'entrySet()' or 'values()' (if the key is not actually used). Similarly, 'keySet().forEach(key -> ...)' can be replaced with 'forEach((key, value) -> ...)' if values are retrieved inside a lambda. Example: 'for (Object key : map.keySet()) {\n Object val = map.get(key);\n }' After the quick-fix is applied: 'for (Object val : map.values()) {}'",
"markdown": "Reports iterations over the `keySet()` of a `java.util.Map` instance, where the iterated keys are used to retrieve the values from the map.\n\n\nSuch iteration may be more efficient when replaced with an iteration over the\n`entrySet()` or `values()` (if the key is not actually used).\n\n\nSimilarly, `keySet().forEach(key -> ...)`\ncan be replaced with `forEach((key, value) -> ...)` if values are retrieved\ninside a lambda.\n\n**Example:**\n\n\n for (Object key : map.keySet()) {\n Object val = map.get(key);\n }\n\nAfter the quick-fix is applied:\n\n\n for (Object val : map.values()) {}\n"
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Performance",
"index": 7,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "UnnecessaryQualifierForThis",
"shortDescription": {
"text": "Unnecessary qualifier for 'this' or 'super'"
},
"fullDescription": {
"text": "Reports unnecessary qualification of 'this' or 'super'. Using a qualifier on 'this' or 'super' to disambiguate a code reference may easily become unnecessary via automatic refactorings and should be deleted for clarity. Example: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n Bar.super.foo();\n }\n }' After the quick-fix is applied: 'class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }'",
"markdown": "Reports unnecessary qualification of `this` or `super`.\n\n\nUsing a qualifier on `this` or `super` to\ndisambiguate a code reference may easily become unnecessary via automatic refactorings and should be deleted for clarity.\n\n**Example:**\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n Bar.super.foo();\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo {\n void foo() {}\n }\n\n class Bar extends Foo {\n void bar() {\n super.foo();\n }\n }\n"
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Code style issues",
"index": 11,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "UncheckedExceptionClass",
"shortDescription": {
"text": "Unchecked 'Exception' class"
},
"fullDescription": {
"text": "Reports subclasses of 'java.lang.RuntimeException'. Some coding standards require that all user-defined exception classes are checked. Example: 'class EnigmaException extends RuntimeException {} // warning: Unchecked exception class 'EnigmaException''",
"markdown": "Reports subclasses of `java.lang.RuntimeException`.\n\nSome coding standards require that all user-defined exception classes are checked.\n\n**Example:**\n\n\n class EnigmaException extends RuntimeException {} // warning: Unchecked exception class 'EnigmaException'\n"
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Error handling",
"index": 12,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "UnusedReturnValue",
"shortDescription": {
"text": "Method can be made 'void'"
},
"fullDescription": {
"text": "Reports methods whose return values are never used when called. The return type of such methods can be made 'void'. Methods annotated with Error Prone's or AssertJ's '@CanIgnoreReturnValue' annotation will not be reported. The quick-fix updates the method signature and removes 'return' statements from inside the method. Example: '// reported if visibility setting is Protected or Public\n protected String myToUpperCase(String s) {\n return s.toUpperCase();\n }\n\n // simple setter, reporting depends on setting\n public String setStr(String str) {\n myStr = str;\n return myStr;\n }\n\n void test() {\n setStr(\"value\"); // return value is unused\n myToUpperCase(\"result\"); // return value is unused\n }' After the quick-fix is applied to both methods: 'protected void myToUpperCase(String s) {\n // 'return' removed completely\n // as 's.toUpperCase()' has no side effect\n }\n\n public void setStr(String str) {\n myStr = str;\n // 'return' removed\n }\n ...' NOTE: Some methods might not be reported during in-editor highlighting due to performance reasons. To see all results, run the inspection using Code | Inspect Code or Code | Analyze Code | Run Inspection by Name> Use the Ignore simple setters option to ignore unused return values from simple setter calls. Use the Maximal reported method visibility option to control the maximum visibility of methods to be reported.",
"markdown": "Reports methods whose return values are never used when called. The return type of such methods can be made `void`.\n\nMethods annotated with Error Prone's or AssertJ's `@CanIgnoreReturnValue` annotation will not be reported.\nThe quick-fix updates the method signature and removes `return` statements from inside the method.\n\n**Example:**\n\n\n // reported if visibility setting is Protected or Public\n protected String myToUpperCase(String s) {\n return s.toUpperCase();\n }\n\n // simple setter, reporting depends on setting\n public String setStr(String str) {\n myStr = str;\n return myStr;\n }\n\n void test() {\n setStr(\"value\"); // return value is unused\n myToUpperCase(\"result\"); // return value is unused\n }\n\nAfter the quick-fix is applied to both methods:\n\n\n protected void myToUpperCase(String s) {\n // 'return' removed completely\n // as 's.toUpperCase()' has no side effect\n }\n\n public void setStr(String str) {\n myStr = str;\n // 'return' removed\n }\n ...\n\n\n**NOTE:** Some methods might not be reported during in-editor highlighting due to performance reasons.\nTo see all results, run the inspection using **Code \\| Inspect Code** or **Code \\| Analyze Code \\| Run Inspection by Name**\\>\n\nUse the **Ignore simple setters** option to ignore unused return values from simple setter calls.\n\nUse the **Maximal reported method visibility** option to control the maximum visibility of methods to be reported."
},
"defaultConfiguration": {
"enabled": false,
"level": "note",
"parameters": {
"ideaSeverity": "INFORMATION",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Declaration redundancy",
"index": 13,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "SizeReplaceableByIsEmpty",
"shortDescription": {
"text": "'size() == 0' can be replaced with 'isEmpty()'"
},
"fullDescription": {
"text": "Reports '.size()' or '.length()' comparisons with a '0' literal that can be replaced with a call to '.isEmpty()'. Example: 'boolean emptyList = list.size() == 0;' After the quick-fix is applied: 'boolean emptyList = list.isEmpty();' Use the Ignored classes table to add classes for which any '.size()' or '.length()' comparisons should not be replaced. Use the Ignore expressions which would be replaced with '!isEmpty()' option to ignore any expressions which would be replaced with '!isEmpty()'.",
"markdown": "Reports `.size()` or `.length()` comparisons with a `0` literal that can be replaced with a call to `.isEmpty()`.\n\n**Example:**\n\n\n boolean emptyList = list.size() == 0;\n\nAfter the quick-fix is applied:\n\n\n boolean emptyList = list.isEmpty();\n \n\nUse the **Ignored classes** table to add classes for which any `.size()` or `.length()` comparisons should not be replaced.\n\nUse the **Ignore expressions which would be replaced with `!isEmpty()`** option to ignore any expressions which would be replaced with `!isEmpty()`."
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Code style issues",
"index": 11,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "NumberEquality",
"shortDescription": {
"text": "Number comparison using '==', instead of 'equals()'"
},
"fullDescription": {
"text": "Reports code that uses == or != instead of 'equals()' to test for 'Number' equality. With auto-boxing, it is easy to make the mistake of comparing two instances of a wrapper type instead of two primitives, for example 'Integer' instead of 'int'. Example: 'void foo(Integer a, Integer b) {\n final boolean bool = a == b;\n }' If 'a' is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following: 'void foo(Integer a, Integer b) {\n final boolean bool = a.equals(b);\n }'",
"markdown": "Reports code that uses **==** or **!=** instead of `equals()` to test for `Number` equality.\n\n\nWith auto-boxing, it is easy\nto make the mistake of comparing two instances of a wrapper type instead of two primitives, for example `Integer` instead of\n`int`.\n\n**Example:**\n\n void foo(Integer a, Integer b) {\n final boolean bool = a == b;\n }\n\nIf `a` is known to be non-null, then it's safe to apply the \"unsafe\" quick-fix and get the result similar to the following:\n\n void foo(Integer a, Integer b) {\n final boolean bool = a.equals(b);\n }\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Probable bugs",
"index": 16,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "ComparatorNotSerializable",
"shortDescription": {
"text": "'Comparator' class not declared 'Serializable'"
},
"fullDescription": {
"text": "Reports classes that implement 'java.lang.Comparator', but do not implement 'java.io.Serializable'. If a non-serializable comparator is used to construct an ordered collection such as a 'java.util.TreeMap' or 'java.util.TreeSet', then the collection will also be non-serializable. This can result in unexpected and difficult-to-diagnose bugs. Since subclasses of 'java.lang.Comparator' are often stateless, simply marking them serializable is a small cost to avoid such issues. Example: 'class Foo implements Comparator { // warning\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }' After the quick-fix is applied: 'class Foo implements Comparator, Serializable { // no warning here\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }'",
"markdown": "Reports classes that implement `java.lang.Comparator`, but do not implement `java.io.Serializable`.\n\n\nIf a non-serializable comparator is used to construct an ordered collection such\nas a `java.util.TreeMap` or `java.util.TreeSet`, then the\ncollection will also be non-serializable. This can result in unexpected and\ndifficult-to-diagnose bugs.\n\n\nSince subclasses of `java.lang.Comparator` are often stateless,\nsimply marking them serializable is a small cost to avoid such issues.\n\n**Example:**\n\n\n class Foo implements Comparator { // warning\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }\n\nAfter the quick-fix is applied:\n\n\n class Foo implements Comparator, Serializable { // no warning here\n @Override\n public int compare(Object o1, Object o2) {\n /* ... */\n }\n }\n"
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Serialization issues",
"index": 17,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "ClassWithOnlyPrivateConstructors",
"shortDescription": {
"text": "Class with only 'private' constructors should be declared 'final'"
},
"fullDescription": {
"text": "Reports classes with only 'private' constructors. A class that only has 'private' constructors cannot be extended outside a file and should be declared as 'final'.",
"markdown": "Reports classes with only `private` constructors.\n\nA class that only has `private` constructors cannot be extended outside a file and should be declared as `final`."
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Class structure",
"index": 18,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "UNUSED_IMPORT",
"shortDescription": {
"text": "Unused import"
},
"fullDescription": {
"text": "Reports redundant 'import' statements. Regular 'import' statements are unnecessary when not using imported classes and packages in the source file. The same applies to imported 'static' fields and methods that aren't used in the source file. Example: 'import java.util.ArrayList;\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }' After the quick fix is applied: 'public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }'",
"markdown": "Reports redundant `import` statements.\n\nRegular `import` statements are unnecessary when not using imported classes and packages in the source file.\nThe same applies to imported `static` fields and methods that aren't used in the source file.\n\n**Example:**\n\n\n import java.util.ArrayList;\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }\n\nAfter the quick fix is applied:\n\n\n public class Example {\n public static void main(String[] args) {\n System.out.println(\"Hello World!\");\n }\n }\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Imports",
"index": 21,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "FieldAccessedSynchronizedAndUnsynchronized",
"shortDescription": {
"text": "Field accessed in both 'synchronized' and unsynchronized contexts"
},
"fullDescription": {
"text": "Reports non-final fields that are accessed in both 'synchronized' and non-'synchronized' contexts. 'volatile' fields as well as accesses in constructors and initializers are ignored by this inspection. Such \"partially synchronized\" access is often the result of a coding oversight and may lead to unexpectedly inconsistent data structures. Example: 'public class Program {\n Console console; // warning: Field 'console' is accessed in both synchronized and unsynchronized contexts\n\n public synchronized void execute() {\n console.print(\"running\");\n }\n\n public void check() {\n console.check();\n }\n }'\n Use the option to specify if simple getters and setters are counted as accesses too.",
"markdown": "Reports non-final fields that are accessed in both `synchronized` and non-`synchronized` contexts. `volatile` fields as well as accesses in constructors and initializers are ignored by this inspection.\n\n\nSuch \"partially synchronized\" access is often the result of a coding oversight\nand may lead to unexpectedly inconsistent data structures.\n\n**Example:**\n\n\n public class Program {\n Console console; // warning: Field 'console' is accessed in both synchronized and unsynchronized contexts\n\n public synchronized void execute() {\n console.print(\"running\");\n }\n\n public void check() {\n console.check();\n }\n }\n\n\nUse the option to specify if simple getters and setters are counted as accesses too."
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Threading issues",
"index": 25,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "RemoveLiteralUnderscores",
"shortDescription": {
"text": "Underscores in numeric literal"
},
"fullDescription": {
"text": "Reports numeric literals with underscores and suggests removing them with a quick-fix. This may be useful if you need to lower the language level. The quick-fix removes underscores from numeric literals. For example '1_000_000' will be converted to '1000000'. This inspection only reports if the language level of the project or module is 7 or higher. New in 2020.2",
"markdown": "Reports numeric literals with underscores and suggests removing them with a quick-fix. This may be useful if you need to lower the language level.\n\nThe quick-fix removes underscores from numeric literals. For example `1_000_000` will be converted to `1000000`.\n\nThis inspection only reports if the language level of the project or module is 7 or higher.\n\nNew in 2020.2"
},
"defaultConfiguration": {
"enabled": true,
"level": "note",
"parameters": {
"ideaSeverity": "INFORMATION",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Numeric issues",
"index": 26,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "NegatedEqualityExpression",
"shortDescription": {
"text": "Negated equality expression"
},
"fullDescription": {
"text": "Reports equality expressions which are negated by a prefix expression. Such expressions can be simplified using the '!=' operator. Example: '!(i == 1)' After the quick-fix is applied: 'i != 1'",
"markdown": "Reports equality expressions which are negated by a prefix expression.\n\nSuch expressions can be simplified using the `!=` operator.\n\nExample:\n\n\n !(i == 1)\n\nAfter the quick-fix is applied:\n\n\n i != 1\n"
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Control flow issues",
"index": 27,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "MathRandomCastToInt",
"shortDescription": {
"text": "'Math.random()' cast to 'int'"
},
"fullDescription": {
"text": "Reports calls to 'Math.random()' which are immediately cast to 'int'. Casting a 'double' between '0.0' (inclusive) and '1.0' (exclusive) to 'int' will always round down to zero. The value should first be multiplied by some factor before casting it to an 'int' to get a value between zero (inclusive) and the multiplication factor (exclusive). Another possible solution is to use the 'nextInt()' method of 'java.util.Random'. Example: 'int r = (int)Math.random() * 10;' After the quick fix is applied: 'int r = (int)(Math.random() * 10);'",
"markdown": "Reports calls to `Math.random()` which are immediately cast to `int`.\n\nCasting a `double` between `0.0` (inclusive) and\n`1.0` (exclusive) to `int` will always round down to zero. The value\nshould first be multiplied by some factor before casting it to an `int` to\nget a value between zero (inclusive) and the multiplication factor (exclusive).\nAnother possible solution is to use the `nextInt()` method of\n`java.util.Random`.\n\n**Example:**\n\n int r = (int)Math.random() * 10;\n\nAfter the quick fix is applied:\n\n int r = (int)(Math.random() * 10);\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Probable bugs",
"index": 16,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "DoubleBraceInitialization",
"shortDescription": {
"text": "Double brace initialization"
},
"fullDescription": {
"text": "Reports Double Brace Initialization. Double brace initialization may cause memory leaks when used in a non-static context because it creates an anonymous class that will reference the surrounding object. Compared to regular initialization, double brace initialization provides worse performance since it requires loading an additional class. It may also cause failure of 'equals()' comparisons if the 'equals()' method doesn't accept subclasses as parameters. In addition, before Java 9, double brace initialization couldn't be combined with the diamond operator since it was incompatible with anonymous classes. Example: 'List<Integer> list = new ArrayList<>() {{\n add(1);\n add(2);\n }};' After the quick-fix is applied: 'List<Integer> list = new ArrayList<>();\n list.add(1);\n list.add(2);'",
"markdown": "Reports [Double Brace Initialization](https://www.c2.com/cgi/wiki?DoubleBraceInitialization).\n\nDouble brace initialization may cause memory leaks when used in a non-static context because it creates an anonymous class\nthat will reference the surrounding object.\n\nCompared to regular initialization, double brace initialization provides worse performance since it requires loading an\nadditional class.\n\nIt may also cause failure of `equals()` comparisons if the `equals()` method doesn't accept subclasses as\nparameters.\n\nIn addition, before Java 9, double brace initialization couldn't be combined with the diamond operator since it was incompatible\nwith anonymous classes.\n\n**Example:**\n\n\n List<Integer> list = new ArrayList<>() {{\n add(1);\n add(2);\n }};\n\nAfter the quick-fix is applied:\n\n\n List<Integer> list = new ArrayList<>();\n list.add(1);\n list.add(2);\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "note",
"parameters": {
"ideaSeverity": "INFORMATION",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Initialization",
"index": 29,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "StringConcatenationInLoops",
"shortDescription": {
"text": "String concatenation in loop"
},
"fullDescription": {
"text": "Reports String concatenation in loops. As every String concatenation copies the whole string, usually it is preferable to replace it with explicit calls to 'StringBuilder.append()' or 'StringBuffer.append()'. Example: 'String str = \"\";\n for(int i=0; i<10; i++) {\n str += i;\n }' After the quick-fix is applied: 'String str = \"\";\n StringBuilder strBuilder = new StringBuilder(str);\n for(int i = 0; i<10; i++) {\n strBuilder.append(i);\n }\n str = strBuilder.toString();' Sometimes, the quick-fixes allow you to convert a 'String' variable to a 'StringBuilder' or introduce a new 'StringBuilder'. Be careful if the original code specially handles the 'null' value, as the replacement may change semantics. If 'null' is possible, null-safe fixes that generate necessary null-checks are suggested. Also, it's not guaranteed that the automatic replacement will always be more performant.",
"markdown": "Reports String concatenation in loops.\n\n\nAs every String concatenation copies the whole\nstring, usually it is preferable to replace it with explicit calls to `StringBuilder.append()` or\n`StringBuffer.append()`.\n\n**Example:**\n\n\n String str = \"\";\n for(int i=0; i<10; i++) {\n str += i;\n }\n\nAfter the quick-fix is applied:\n\n\n String str = \"\";\n StringBuilder strBuilder = new StringBuilder(str);\n for(int i = 0; i<10; i++) {\n strBuilder.append(i);\n }\n str = strBuilder.toString();\n\n\nSometimes, the quick-fixes allow you to convert a `String` variable to a `StringBuilder` or\nintroduce a new `StringBuilder`. Be careful if the original code specially handles the `null` value, as the\nreplacement may change semantics. If `null` is possible, null-safe fixes that generate\nnecessary null-checks are suggested. Also, it's not guaranteed that the automatic replacement will always be more performant."
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Performance",
"index": 7,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "CloneableClassInSecureContext",
"shortDescription": {
"text": "Cloneable class in secure context"
},
"fullDescription": {
"text": "Reports classes which may be cloned. A class may be cloned if it supports the 'Cloneable' interface, and its 'clone()' method is not defined to immediately throw an error. Cloneable classes may be dangerous in code intended for secure use. Example: 'class SecureBean implements Cloneable {}' After the quick-fix is applied: 'class SecureBean {}' When the class extends an existing cloneable class or implements a cloneable interface, then after the quick-fix is applied, the code may look like: 'class SecureBean extends ParentBean {\n @Override\n protected SecureBean clone() throws CloneNotSupportedException {\n throw new CloneNotSupportedException();\n }\n}'",
"markdown": "Reports classes which may be cloned.\n\n\nA class\nmay be cloned if it supports the `Cloneable` interface,\nand its `clone()` method is not defined to immediately\nthrow an error. Cloneable classes may be dangerous in code intended for secure use.\n\n**Example:**\n`class SecureBean implements Cloneable {}`\n\nAfter the quick-fix is applied:\n`class SecureBean {}`\n\n\nWhen the class extends an existing cloneable class or implements a cloneable interface,\nthen after the quick-fix is applied, the code may look like:\n\n class SecureBean extends ParentBean {\n @Override\n protected SecureBean clone() throws CloneNotSupportedException {\n throw new CloneNotSupportedException();\n }\n }\n"
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Security",
"index": 31,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "InconsistentTextBlockIndent",
"shortDescription": {
"text": "Inconsistent whitespace indentation in text block"
},
"fullDescription": {
"text": "Reports text blocks that are indented using both spaces and tabs. Such cases produce unexpected results since spaces and tabs are treated equally during text block processing. In the following example, spaces and tabs are visualized as '·' and '␉' respectively, and a tab is equal to 4 spaces in the editor. Example: 'String colors = \"\"\"\n········red\n␉ ␉ green\n········blue\"\"\";' After printing such string, the result will be: 'red\n······green\nblue' After the compiler removes 2 spaces or tabs from the beginning of each line, the lines end up with extra whitespaces at the beginning. This inspection only reports if the configured language level is 15 or higher. New in 2021.1",
"markdown": "Reports text blocks that are indented using both spaces and tabs.\n\nSuch cases produce unexpected results since spaces and tabs are treated equally during text block processing.\n\nIn the following example, spaces and tabs are visualized as `·` and `␉` respectively, and a tab is equal to 4 spaces in the editor.\n\n**Example:**\n\n\n String colors = \"\"\"\n ········red\n ␉ ␉ green\n ········blue\"\"\";\n\nAfter printing such string, the result will be:\n\n\n red\n ······green\n blue\n\nAfter the compiler removes 2 spaces or tabs from the beginning of each line, the lines end up with extra whitespaces at the beginning.\n\nThis inspection only reports if the configured language level is 15 or higher.\n\nNew in 2021.1"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Java language level migration aids/Java 15",
"index": 34,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "DoubleNegation",
"shortDescription": {
"text": "Double negation"
},
"fullDescription": {
"text": "Reports double negations that can be simplified. Example: 'if (!!functionCall()) {}' After the quick-fix is applied: 'if (functionCall()) {}' Example: 'if (!(a != b)) {}' After the quick-fix is applied: 'if (a == b) {}'",
"markdown": "Reports double negations that can be simplified.\n\nExample:\n\n\n if (!!functionCall()) {}\n\nAfter the quick-fix is applied:\n\n\n if (functionCall()) {}\n\nExample:\n\n\n if (!(a != b)) {}\n\nAfter the quick-fix is applied:\n\n\n if (a == b) {}\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Control flow issues",
"index": 27,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "AssertionCanBeIf",
"shortDescription": {
"text": "Assertion can be replaced with 'if' statement"
},
"fullDescription": {
"text": "Reports 'assert' statements and suggests replacing them with 'if' statements that throw 'java.lang.AssertionError'. Example: 'assert param != null;' After the quick-fix is applied: 'if (param == null) throw new AssertionError();'",
"markdown": "Reports `assert` statements and suggests replacing them with `if` statements that throw `java.lang.AssertionError`.\n\nExample:\n\n\n assert param != null;\n\nAfter the quick-fix is applied:\n\n\n if (param == null) throw new AssertionError();\n"
},
"defaultConfiguration": {
"enabled": true,
"level": "note",
"parameters": {
"ideaSeverity": "INFORMATION",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Control flow issues",
"index": 27,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "PackageWithTooFewClasses",
"shortDescription": {
"text": "Package with too few classes"
},
"fullDescription": {
"text": "Reports packages that contain fewer classes than the specified minimum. Packages which contain subpackages are not reported. Overly small packages may indicate a fragmented design. Available only from Code | Inspect Code or Code | Analyze Code | Run Inspection by Name and isn't reported in the editor. Use the Minimum number of classes field to specify the minimum allowed number of classes in a package.",
"markdown": "Reports packages that contain fewer classes than the specified minimum.\n\nPackages which contain subpackages are not reported. Overly small packages may indicate a fragmented design.\n\nAvailable only from **Code \\| Inspect Code** or\n**Code \\| Analyze Code \\| Run Inspection by Name** and isn't reported in the editor.\n\nUse the **Minimum number of classes** field to specify the minimum allowed number of classes in a package."
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Packaging issues",
"index": 36,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "ReplaceOnLiteralHasNoEffect",
"shortDescription": {
"text": "Replacement operation has no effect"
},
"fullDescription": {
"text": "Reports calls to the 'String' methods 'replace()', 'replaceAll()' or 'replaceFirst()' that have no effect. Such calls can be guaranteed to have no effect when the qualifier and search string are compile-time constants and the search string is not found in the qualifier. This is redundant and may indicate an error. Example: '// replacement does nothing\n \"hello\".replace(\"$value$\", value);' New in 2022.1",
"markdown": "Reports calls to the `String` methods `replace()`, `replaceAll()` or `replaceFirst()` that have no effect. Such calls can be guaranteed to have no effect when the qualifier and search string are compile-time constants and the search string is not found in the qualifier. This is redundant and may indicate an error.\n\n**Example:**\n\n\n // replacement does nothing\n \"hello\".replace(\"$value$\", value);\n\nNew in 2022.1"
},
"defaultConfiguration": {
"enabled": true,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Verbose or redundant code constructs",
"index": 37,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]
}
]
},
{
"id": "SingleClassImport",
"shortDescription": {
"text": "Single class import"
},
"fullDescription": {
"text": "Reports 'import' statements that import single classes (as opposed to entire packages). Some coding standards prohibit such 'import' statements. You can configure IntelliJ IDEA to detect and fix such statements with its Optimize Imports command. Go to Settings | Editor | Code Style | Java | Imports and clear the Use single class import checkbox. Thus this inspection is mostly useful for offline reporting on code bases that you don't intend to change.",
"markdown": "Reports `import` statements that import single classes (as opposed to entire packages).\n\nSome coding standards prohibit such `import` statements.\n\n\nYou can configure IntelliJ IDEA to detect and fix such statements with its **Optimize Imports** command. Go to\n[Settings \\| Editor \\| Code Style \\| Java \\| Imports](settings://preferences.sourceCode.Java?Use%20single%20class%20import)\nand clear the **Use single class import** checkbox. Thus this inspection is mostly useful for\noffline reporting on code bases that you don't intend to change."
},
"defaultConfiguration": {
"enabled": false,
"level": "warning",
"parameters": {
"ideaSeverity": "WARNING",
"tags": [
"ideaSeverity"
]
}
},
"relationships": [
{
"target": {
"id": "Java/Imports",
"index": 21,
"toolComponent": {
"name": "QDJVM"
}
},
"kinds": [
"superset"
]