From 1e0746ebcd46c2d5a7e488b4c0d49565887ee76c Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 8 Nov 2018 14:42:08 +0300 Subject: [PATCH] Unused symbol: handle internal constructor used in Java #KT-27708 Fixed --- .../kotlin/idea/inspections/UnusedSymbolInspection.kt | 2 +- .../internalConstructorUsedInJava/after/User.java | 5 +++++ .../unusedSymbol/internalConstructorUsedInJava/after/test.kt | 3 +++ .../internalConstructorUsedInJava/before/User.java | 5 +++++ .../internalConstructorUsedInJava/before/test.kt | 3 +++ .../internalConstructorUsedInJava.test | 5 +++++ .../inspections/MultiFileLocalInspectionTestGenerated.java | 5 +++++ 7 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/after/User.java create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/after/test.kt create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/before/User.java create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/before/test.kt create mode 100644 idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/internalConstructorUsedInJava.test diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index 1cbee1058f6..c85fe29ff7c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -326,9 +326,9 @@ class UnusedSymbolInspection : AbstractKotlinInspection() { private fun KtCallableDeclaration.canBeHandledByLightMethods(descriptor: DeclarationDescriptor?): Boolean { return when { + descriptor is ConstructorDescriptor -> !descriptor.constructedClass.isInline hasModifier(KtTokens.INTERNAL_KEYWORD) -> false descriptor !is FunctionDescriptor -> true - descriptor is ConstructorDescriptor -> !descriptor.constructedClass.isInline else -> !descriptor.hasInlineClassParameters() } } diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/after/User.java b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/after/User.java new file mode 100644 index 00000000000..1aa69cb66ab --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/after/User.java @@ -0,0 +1,5 @@ +public class User { + public static void main(String[] args) { + new WithInternalConstructor(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/after/test.kt b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/after/test.kt new file mode 100644 index 00000000000..d83e62eebc3 --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/after/test.kt @@ -0,0 +1,3 @@ +class WithInternalConstructor(val x: Int) { + internal constructor() : this(42) +} \ No newline at end of file diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/before/User.java b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/before/User.java new file mode 100644 index 00000000000..1aa69cb66ab --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/before/User.java @@ -0,0 +1,5 @@ +public class User { + public static void main(String[] args) { + new WithInternalConstructor(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/before/test.kt b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/before/test.kt new file mode 100644 index 00000000000..ea960d4c955 --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/before/test.kt @@ -0,0 +1,3 @@ +class WithInternalConstructor(val x: Int) { + internal constructor() : this(42) +} \ No newline at end of file diff --git a/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/internalConstructorUsedInJava.test b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/internalConstructorUsedInJava.test new file mode 100644 index 00000000000..c2bdad89914 --- /dev/null +++ b/idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/internalConstructorUsedInJava.test @@ -0,0 +1,5 @@ +{ + "inspectionClass": "org.jetbrains.kotlin.idea.inspections.UnusedSymbolInspection", + "problem": "none", + "mainFile": "test.kt" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/MultiFileLocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/MultiFileLocalInspectionTestGenerated.java index c0f6c7c16e3..4e52d8d49f9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/MultiFileLocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/MultiFileLocalInspectionTestGenerated.java @@ -93,4 +93,9 @@ public class MultiFileLocalInspectionTestGenerated extends AbstractMultiFileLoca public void testUnusedSymbol_inlineClassesImplInterface_InlineClassesImplInterface() throws Exception { runTest("idea/testData/multiFileLocalInspections/unusedSymbol/inlineClassesImplInterface/inlineClassesImplInterface.test"); } + + @TestMetadata("unusedSymbol/internalConstructorUsedInJava/internalConstructorUsedInJava.test") + public void testUnusedSymbol_internalConstructorUsedInJava_InternalConstructorUsedInJava() throws Exception { + runTest("idea/testData/multiFileLocalInspections/unusedSymbol/internalConstructorUsedInJava/internalConstructorUsedInJava.test"); + } }