Fix false positive ReplaceJavaStaticMethodWithKotlinAnalog for java.io.PrintStream

This commit is contained in:
Dmitry Gridin
2019-04-15 18:20:44 +07:00
parent fd47dc9b88
commit d738a12b86
3 changed files with 20 additions and 6 deletions
@@ -12,17 +12,16 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.TextRange
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
import org.jetbrains.kotlin.idea.core.ShortenReferences
import org.jetbrains.kotlin.idea.core.replaced
import org.jetbrains.kotlin.idea.inspections.collections.isCalling
import org.jetbrains.kotlin.idea.intentions.callExpression
import org.jetbrains.kotlin.idea.util.ImportInsertHelper
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.psi.callExpressionVisitor
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
@@ -121,8 +120,8 @@ class ReplaceJavaStaticMethodWithKotlinAnalogInspection : AbstractKotlinInspecti
}
private val JAVA_IO = listOf(
Replacement("java.io.PrintStream.print", "kotlin.io.print"),
Replacement("java.io.PrintStream.println", "kotlin.io.println")
Replacement("java.io.PrintStream.print", "kotlin.io.print", filter = ::isJavaSystemOut),
Replacement("java.io.PrintStream.println", "kotlin.io.println", filter = ::isJavaSystemOut)
)
private val JAVA_SYSTEM = listOf(
@@ -182,3 +181,8 @@ class ReplaceJavaStaticMethodWithKotlinAnalogInspection : AbstractKotlinInspecti
).groupBy { it.javaMethodShortName }
}
}
private fun isJavaSystemOut(callExpression: KtCallExpression): Boolean = (callExpression.calleeExpression as? KtSimpleNameExpression)
?.getReceiverExpression()
?.resolveToCall()
?.isCalling(FqName("java.lang.System.out")) ?: false
@@ -0,0 +1,5 @@
// WITH_RUNTIME
// PROBLEM: none
fun test() {
<caret>System.err.print("foo")
}
@@ -7263,6 +7263,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/io"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true);
}
@TestMetadata("notApplicablePrint.kt")
public void testNotApplicablePrint() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/io/notApplicablePrint.kt");
}
@TestMetadata("print.kt")
public void testPrint() throws Exception {
runTest("idea/testData/inspectionsLocal/replaceJavaStaticMethodWithKotlinAnalog/io/print.kt");