diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt
index 02d7b543643..a2e3be2c9be 100644
--- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt
@@ -31,6 +31,9 @@ import org.jetbrains.kotlin.idea.JetBundle
import com.intellij.codeInspection.ProblemHighlightType
import com.intellij.codeInspection.deadCode.UnusedDeclarationInspection
import org.jetbrains.kotlin.asJava.LightClassUtil
+import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler
+import com.intellij.psi.search.GlobalSearchScope
+import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
public class UnusedSymbolInspection : AbstractKotlinInspection() {
private val javaInspection = UnusedDeclarationInspection()
@@ -45,8 +48,10 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() {
val lightClass = LightClassUtil.getPsiClass(klass)
if (lightClass != null && javaInspection.isEntryPoint(lightClass)) return
+ val classUseScope = klass.getUseScope()
+
val usagesSearchHelper = KotlinClassFindUsagesOptions(holder.getProject()).toClassHelper()
- val request = usagesSearchHelper.newRequest(UsagesSearchTarget(klass, klass.getUseScope()))
+ val request = usagesSearchHelper.newRequest(UsagesSearchTarget(klass, classUseScope))
val query = UsagesSearch.search(request)
var foundNonTrivialUsage = false
@@ -61,6 +66,16 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() {
}
})
+ // Finding text usages
+ if (classUseScope is GlobalSearchScope) {
+ val findClassUsagesHandler = KotlinFindClassUsagesHandler(klass, KotlinFindUsagesHandlerFactory(klass.getProject()))
+ findClassUsagesHandler.processUsagesInText(
+ klass,
+ { foundNonTrivialUsage = true; false },
+ classUseScope
+ )
+ }
+
if (!foundNonTrivialUsage) {
holder.registerProblem(
klass.getNameIdentifier(),
diff --git a/idea/testData/inspections/unusedSymbol/class/inspectionData/expected.xml b/idea/testData/inspections/unusedSymbol/class/inspectionData/expected.xml
index 327bb5f3ea4..a9f965e3f52 100644
--- a/idea/testData/inspections/unusedSymbol/class/inspectionData/expected.xml
+++ b/idea/testData/inspections/unusedSymbol/class/inspectionData/expected.xml
@@ -23,4 +23,12 @@
Unused Symbol
Class 'Local' is never used
+
+ usedInTextByShortName.kt
+ 3
+ light_idea_test_case
+
+ Unused Symbol
+ Class 'UsedInTextByShortName' is never used
+
diff --git a/idea/testData/inspections/unusedSymbol/class/usedInText.kt b/idea/testData/inspections/unusedSymbol/class/usedInText.kt
new file mode 100644
index 00000000000..aab19201893
--- /dev/null
+++ b/idea/testData/inspections/unusedSymbol/class/usedInText.kt
@@ -0,0 +1,3 @@
+package foo
+
+class UsedInTextOnly
diff --git a/idea/testData/inspections/unusedSymbol/class/usedInText.txt b/idea/testData/inspections/unusedSymbol/class/usedInText.txt
new file mode 100644
index 00000000000..0a76f6e9bc2
--- /dev/null
+++ b/idea/testData/inspections/unusedSymbol/class/usedInText.txt
@@ -0,0 +1 @@
+foo.UsedInTextOnly
\ No newline at end of file
diff --git a/idea/testData/inspections/unusedSymbol/class/usedInTextByShortName.kt b/idea/testData/inspections/unusedSymbol/class/usedInTextByShortName.kt
new file mode 100644
index 00000000000..4884dc491d1
--- /dev/null
+++ b/idea/testData/inspections/unusedSymbol/class/usedInTextByShortName.kt
@@ -0,0 +1,3 @@
+package foo
+
+class UsedInTextByShortName
diff --git a/idea/testData/inspections/unusedSymbol/class/usedInTextByShortName.txt b/idea/testData/inspections/unusedSymbol/class/usedInTextByShortName.txt
new file mode 100644
index 00000000000..026fb14799d
--- /dev/null
+++ b/idea/testData/inspections/unusedSymbol/class/usedInTextByShortName.txt
@@ -0,0 +1 @@
+UsedInTextByShortName
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractJetInspectionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractJetInspectionTest.kt
index c7a581e4adb..00e85b87fcb 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractJetInspectionTest.kt
+++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/AbstractJetInspectionTest.kt
@@ -53,11 +53,15 @@ public abstract class AbstractJetInspectionTest: LightCodeInsightFixtureTestCase
setTestDataPath("${JetTestUtils.getHomeDirectory()}/$srcDir")
val psiFiles = srcDir
- .listFiles { it.getName().endsWith(".kt") }!!
+ .listFiles { it.getName().endsWith(".kt") || it.getName().endsWith(".txt") }!!
.map {
file ->
val text = FileUtil.loadFile(file, true)
- val fileText = if (text.startsWith("package")) text else "package ${file.getName().trimTrailing(".kt")};$text"
+ val fileText =
+ if (text.startsWith("package") || !file.getName().endsWith(".kt"))
+ text
+ else
+ "package ${file.getName().trimTrailing(".kt")};$text"
configureByText(file.getName(), fileText)!!
}