Introduct "Redundant 'with' call" inspection #KT-6633 Fixed
This commit is contained in:
committed by
Natalia Selezneva
parent
58becffb1f
commit
4c34ced1fa
@@ -0,0 +1,5 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
This inspection reports a redundant <b>with</b> function call that don't access anything from the receiver.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -2944,6 +2944,15 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
language="kotlin"
|
language="kotlin"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.RedundantWithInspection"
|
||||||
|
displayName="Redundant 'with' call"
|
||||||
|
groupPath="Kotlin"
|
||||||
|
groupName="Redundant constructs"
|
||||||
|
enabledByDefault="true"
|
||||||
|
level="WEAK WARNING"
|
||||||
|
language="kotlin"
|
||||||
|
/>
|
||||||
|
|
||||||
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
||||||
|
|
||||||
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
||||||
|
|||||||
@@ -2941,6 +2941,15 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
language="kotlin"
|
language="kotlin"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.RedundantWithInspection"
|
||||||
|
displayName="Redundant 'with' call"
|
||||||
|
groupPath="Kotlin"
|
||||||
|
groupName="Redundant constructs"
|
||||||
|
enabledByDefault="true"
|
||||||
|
level="WEAK WARNING"
|
||||||
|
language="kotlin"
|
||||||
|
/>
|
||||||
|
|
||||||
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
||||||
|
|
||||||
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
||||||
|
|||||||
@@ -2944,6 +2944,15 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
language="kotlin"
|
language="kotlin"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.RedundantWithInspection"
|
||||||
|
displayName="Redundant 'with' call"
|
||||||
|
groupPath="Kotlin"
|
||||||
|
groupName="Redundant constructs"
|
||||||
|
enabledByDefault="true"
|
||||||
|
level="WEAK WARNING"
|
||||||
|
language="kotlin"
|
||||||
|
/>
|
||||||
|
|
||||||
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
||||||
|
|
||||||
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
||||||
|
|||||||
@@ -2945,6 +2945,15 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
language="kotlin"
|
language="kotlin"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.RedundantWithInspection"
|
||||||
|
displayName="Redundant 'with' call"
|
||||||
|
groupPath="Kotlin"
|
||||||
|
groupName="Redundant constructs"
|
||||||
|
enabledByDefault="true"
|
||||||
|
level="WEAK WARNING"
|
||||||
|
language="kotlin"
|
||||||
|
/>
|
||||||
|
|
||||||
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
||||||
|
|
||||||
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
||||||
|
|||||||
@@ -2944,6 +2944,15 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
language="kotlin"
|
language="kotlin"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.RedundantWithInspection"
|
||||||
|
displayName="Redundant 'with' call"
|
||||||
|
groupPath="Kotlin"
|
||||||
|
groupName="Redundant constructs"
|
||||||
|
enabledByDefault="true"
|
||||||
|
level="WEAK WARNING"
|
||||||
|
language="kotlin"
|
||||||
|
/>
|
||||||
|
|
||||||
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
||||||
|
|
||||||
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
||||||
|
|||||||
@@ -2944,6 +2944,15 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
language="kotlin"
|
language="kotlin"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.RedundantWithInspection"
|
||||||
|
displayName="Redundant 'with' call"
|
||||||
|
groupPath="Kotlin"
|
||||||
|
groupName="Redundant constructs"
|
||||||
|
enabledByDefault="true"
|
||||||
|
level="WEAK WARNING"
|
||||||
|
language="kotlin"
|
||||||
|
/>
|
||||||
|
|
||||||
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
||||||
|
|
||||||
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
||||||
|
|||||||
@@ -2941,6 +2941,15 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
|||||||
language="kotlin"
|
language="kotlin"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<localInspection implementationClass="org.jetbrains.kotlin.idea.inspections.RedundantWithInspection"
|
||||||
|
displayName="Redundant 'with' call"
|
||||||
|
groupPath="Kotlin"
|
||||||
|
groupName="Redundant constructs"
|
||||||
|
enabledByDefault="true"
|
||||||
|
level="WEAK WARNING"
|
||||||
|
language="kotlin"
|
||||||
|
/>
|
||||||
|
|
||||||
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
||||||
|
|
||||||
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.idea.inspections
|
||||||
|
|
||||||
|
import com.intellij.codeInspection.LocalQuickFix
|
||||||
|
import com.intellij.codeInspection.ProblemDescriptor
|
||||||
|
import com.intellij.codeInspection.ProblemHighlightType
|
||||||
|
import com.intellij.codeInspection.ProblemsHolder
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.psi.PsiElementVisitor
|
||||||
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
|
import org.jetbrains.kotlin.idea.core.moveCaret
|
||||||
|
import org.jetbrains.kotlin.idea.core.replaced
|
||||||
|
import org.jetbrains.kotlin.idea.util.getThisReceiverOwner
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
|
|
||||||
|
class RedundantWithInspection : AbstractKotlinInspection() {
|
||||||
|
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor =
|
||||||
|
callExpressionVisitor(fun(callExpression) {
|
||||||
|
val callee = callExpression.calleeExpression ?: return
|
||||||
|
if (callee.text != "with") return
|
||||||
|
|
||||||
|
val valueArguments = callExpression.valueArguments
|
||||||
|
if (valueArguments.size != 2) return
|
||||||
|
val receiver = valueArguments[0].getArgumentExpression() ?: return
|
||||||
|
val lambda = valueArguments[1].lambdaExpression() ?: return
|
||||||
|
val lambdaBody = lambda.bodyExpression ?: return
|
||||||
|
|
||||||
|
val context = callExpression.analyze(BodyResolveMode.PARTIAL_WITH_CFA)
|
||||||
|
if (lambdaBody.statements.size > 1 && context[BindingContext.USED_AS_EXPRESSION, callExpression] == true) return
|
||||||
|
if (callExpression.getResolvedCall(context)?.resultingDescriptor?.fqNameSafe != FqName("kotlin.with")) return
|
||||||
|
|
||||||
|
val lambdaDescriptor = context[BindingContext.FUNCTION, lambda.functionLiteral] ?: return
|
||||||
|
val lambdaExtensionReceiver = lambdaDescriptor.extensionReceiverParameter
|
||||||
|
var used = false
|
||||||
|
lambda.functionLiteral.acceptChildren(object : KtVisitorVoid() {
|
||||||
|
override fun visitKtElement(element: KtElement) {
|
||||||
|
if (used) return
|
||||||
|
element.acceptChildren(this)
|
||||||
|
|
||||||
|
if (element is KtReturnExpression && element.getLabelName() == "with") {
|
||||||
|
used = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val resolvedCall = element.getResolvedCall(context) ?: return
|
||||||
|
if (isUsageOfReceiver(resolvedCall, context)) {
|
||||||
|
used = true
|
||||||
|
} else if (resolvedCall is VariableAsFunctionResolvedCall && isUsageOfReceiver(resolvedCall.variableCall, context)) {
|
||||||
|
used = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isUsageOfReceiver(resolvedCall: ResolvedCall<*>, bindingContext: BindingContext): Boolean {
|
||||||
|
// As receiver of call
|
||||||
|
if (resolvedCall.dispatchReceiver.getThisReceiverOwner(bindingContext) == lambdaDescriptor ||
|
||||||
|
resolvedCall.extensionReceiver.getThisReceiverOwner(bindingContext) == lambdaDescriptor
|
||||||
|
) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// As explicit "this"
|
||||||
|
if (resolvedCall.candidateDescriptor == lambdaExtensionReceiver) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (!used) {
|
||||||
|
val quickfix = when (receiver) {
|
||||||
|
is KtSimpleNameExpression, is KtStringTemplateExpression, is KtConstantExpression -> RemoveRedundantWithFix()
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
holder.registerProblem(
|
||||||
|
callee,
|
||||||
|
"Redundant 'with' call",
|
||||||
|
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
|
||||||
|
quickfix
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun KtValueArgument.lambdaExpression(): KtLambdaExpression? =
|
||||||
|
(this as? KtLambdaArgument)?.getLambdaExpression() ?: this.getArgumentExpression() as? KtLambdaExpression
|
||||||
|
|
||||||
|
private class RemoveRedundantWithFix : LocalQuickFix {
|
||||||
|
override fun getName() = "Remove redundant 'with' call"
|
||||||
|
|
||||||
|
override fun getFamilyName() = name
|
||||||
|
|
||||||
|
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
||||||
|
val callExpression = descriptor.psiElement.parent as? KtCallExpression ?: return
|
||||||
|
val lambdaBody = callExpression.valueArguments.getOrNull(1)?.lambdaExpression()?.bodyExpression ?: return
|
||||||
|
val replaced = callExpression.replaced(lambdaBody)
|
||||||
|
replaced.findExistingEditor()?.moveCaret(replaced.startOffset)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fun test() {
|
||||||
|
with(foo()) {
|
||||||
|
println("test")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo(): String {
|
||||||
|
println("foo")
|
||||||
|
return ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<problems>
|
||||||
|
<problem>
|
||||||
|
<file>callReceiver.kt</file>
|
||||||
|
<line>2</line>
|
||||||
|
<entry_point TYPE="file" FQNAME="temp:///src/callReceiver.kt" />
|
||||||
|
<problem_class severity="WEAK WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant 'with' call</problem_class>
|
||||||
|
<description>Redundant 'with' call</description>
|
||||||
|
</problem>
|
||||||
|
</problems>
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.RedundantWithInspection
|
||||||
|
// WITH_RUNTIME
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
org.jetbrains.kotlin.idea.inspections.RedundantWithInspection
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
return <caret>with (1) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("") {
|
||||||
|
with ("a") {
|
||||||
|
this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("a") {
|
||||||
|
this
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("") {
|
||||||
|
this
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("") {
|
||||||
|
this.length
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
val c = MyClass()
|
||||||
|
<caret>with(c) {
|
||||||
|
println(f())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyClass {
|
||||||
|
fun f(): String = ""
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("") {
|
||||||
|
length
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
val b = 1 == <caret>with ("") {
|
||||||
|
println()
|
||||||
|
1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() = <caret>with("") {
|
||||||
|
println()
|
||||||
|
1
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
val i = <caret>with ("") {
|
||||||
|
println()
|
||||||
|
1
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
val a: Int
|
||||||
|
get() = <caret>with("") {
|
||||||
|
println()
|
||||||
|
1
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test(): Int {
|
||||||
|
return <caret>with ("") {
|
||||||
|
println()
|
||||||
|
1
|
||||||
|
}
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun foo(i: Int) {}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
foo(<caret>with("") {
|
||||||
|
println()
|
||||||
|
1
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("") {
|
||||||
|
return@with
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test(): String {
|
||||||
|
<caret>with("") {
|
||||||
|
return this@with
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("") {
|
||||||
|
this@with
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("") {
|
||||||
|
this@with.length
|
||||||
|
}
|
||||||
|
}
|
||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
val c = MyClass()
|
||||||
|
<caret>with(c) {
|
||||||
|
println(f())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyClass {
|
||||||
|
val f: () -> String = { "" }
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>with ("") {
|
||||||
|
println("1")
|
||||||
|
println("2")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test() {
|
||||||
|
<caret>println("1")
|
||||||
|
println("2")
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test(s: String) {
|
||||||
|
with<caret> (s, {
|
||||||
|
println("1")
|
||||||
|
println("2")
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test(s: String) {
|
||||||
|
<caret>println("1")
|
||||||
|
println("2")
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test(): Int {
|
||||||
|
return <caret>with (1) {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun test(): Int {
|
||||||
|
return 2
|
||||||
|
}
|
||||||
+5
@@ -304,6 +304,11 @@ public class InspectionTestGenerated extends AbstractInspectionTest {
|
|||||||
runTest("idea/testData/inspections/redundantVisibilityModifier/inspectionData/inspections.test");
|
runTest("idea/testData/inspections/redundantVisibilityModifier/inspectionData/inspections.test");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("redundantWith/inspectionData/inspections.test")
|
||||||
|
public void testRedundantWith_inspectionData_Inspections_test() throws Exception {
|
||||||
|
runTest("idea/testData/inspections/redundantWith/inspectionData/inspections.test");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("reformat/inspectionData/inspections.test")
|
@TestMetadata("reformat/inspectionData/inspections.test")
|
||||||
public void testReformat_inspectionData_Inspections_test() throws Exception {
|
public void testReformat_inspectionData_Inspections_test() throws Exception {
|
||||||
runTest("idea/testData/inspections/reformat/inspectionData/inspections.test");
|
runTest("idea/testData/inspections/reformat/inspectionData/inspections.test");
|
||||||
|
|||||||
+113
@@ -3779,6 +3779,119 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("idea/testData/inspectionsLocal/redundantWith")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
public static class RedundantWith extends AbstractLocalInspectionTest {
|
||||||
|
private void runTest(String testDataFilePath) throws Exception {
|
||||||
|
KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testAllFilesPresentInRedundantWith() throws Exception {
|
||||||
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/inspectionsLocal/redundantWith"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("emptyExpressionInReturn.kt")
|
||||||
|
public void testEmptyExpressionInReturn() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/emptyExpressionInReturn.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nested.kt")
|
||||||
|
public void testNested() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/nested.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_explicitThis.kt")
|
||||||
|
public void testNotApplicable_explicitThis() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_explicitThis.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_explicitThis2.kt")
|
||||||
|
public void testNotApplicable_explicitThis2() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_explicitThis2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_functionCall.kt")
|
||||||
|
public void testNotApplicable_functionCall() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_functionCall.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_implicitThis.kt")
|
||||||
|
public void testNotApplicable_implicitThis() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_implicitThis.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_inBinaryExpression.kt")
|
||||||
|
public void testNotApplicable_inBinaryExpression() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_inBinaryExpression.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_inFunctionBody.kt")
|
||||||
|
public void testNotApplicable_inFunctionBody() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_inFunctionBody.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_inProperty.kt")
|
||||||
|
public void testNotApplicable_inProperty() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_inProperty.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_inPropertyGetter.kt")
|
||||||
|
public void testNotApplicable_inPropertyGetter() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_inPropertyGetter.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_inReturn.kt")
|
||||||
|
public void testNotApplicable_inReturn() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_inReturn.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_inValueArgument.kt")
|
||||||
|
public void testNotApplicable_inValueArgument() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_inValueArgument.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_labeledReturn.kt")
|
||||||
|
public void testNotApplicable_labeledReturn() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_labeledReturn.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_labeledReturn2.kt")
|
||||||
|
public void testNotApplicable_labeledReturn2() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_labeledReturn2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_labeledThis.kt")
|
||||||
|
public void testNotApplicable_labeledThis() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_labeledThis.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_labeledThis2.kt")
|
||||||
|
public void testNotApplicable_labeledThis2() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_labeledThis2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("notApplicable_variableFunctionCall.kt")
|
||||||
|
public void testNotApplicable_variableFunctionCall() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/notApplicable_variableFunctionCall.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("simple.kt")
|
||||||
|
public void testSimple() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/simple.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("simple2.kt")
|
||||||
|
public void testSimple2() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/simple2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("singleExpressionInReturn.kt")
|
||||||
|
public void testSingleExpressionInReturn() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/redundantWith/singleExpressionInReturn.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("idea/testData/inspectionsLocal/removeRedundantBackticks")
|
@TestMetadata("idea/testData/inspectionsLocal/removeRedundantBackticks")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
Reference in New Issue
Block a user