diff --git a/plugins/markdown/core/src/org/intellij/plugins/markdown/lang/references/backtick/BacktickReference.kt b/plugins/markdown/core/src/org/intellij/plugins/markdown/lang/references/backtick/BacktickReference.kt index e46c151a94c1..72341a488e5d 100644 --- a/plugins/markdown/core/src/org/intellij/plugins/markdown/lang/references/backtick/BacktickReference.kt +++ b/plugins/markdown/core/src/org/intellij/plugins/markdown/lang/references/backtick/BacktickReference.kt @@ -33,7 +33,7 @@ class BacktickReference(element: MarkdownCodeSpan, range: TextRange) : override fun isReferenceTo(element: PsiElement): Boolean { val name = canonicalText - if (!shouldSearchInSymbols(name)) { + if (!shouldSearchInSymbols(name) || !shouldSearchInClasses(name)) { return super.isReferenceTo(element) } @@ -60,7 +60,9 @@ class BacktickReference(element: MarkdownCodeSpan, range: TextRange) : if (isFile()) { resolveWithContributor(name, name, element.project, ChooseByNameContributorEx.FILE_EP_NAME, navigationItems) } else { - resolveWithContributor(name, name, element.project, ChooseByNameContributorEx.CLASS_EP_NAME, navigationItems) + if (shouldSearchInClasses(name)) { + resolveWithContributor(name, name, element.project, ChooseByNameContributorEx.CLASS_EP_NAME, navigationItems) + } if (shouldSearchInSymbols(name)) { resolveWithContributor(name, name, element.project, ChooseByNameContributorEx.SYMBOL_EP_NAME, navigationItems) } @@ -81,7 +83,7 @@ class BacktickReference(element: MarkdownCodeSpan, range: TextRange) : pattern: String, project: Project, contributors: ExtensionPointName, - items: MutableList, + items: MutableList ) { if (items.size > MAX_RESOLVED_ITEMS) return for (contributor in DumbService.getInstance(project).filterByDumbAwareness(contributors.extensionList)) { @@ -103,7 +105,9 @@ class BacktickReference(element: MarkdownCodeSpan, range: TextRange) : } private fun shouldSearchInSymbols(elementName: String): Boolean = - elementName.length >= Registry.intValue("markdown.backtick.reference.symbol.length") || NameUtil.nameToWordList(elementName).size > 1 + elementName.length >= Registry.intValue("markdown.backtick.reference.symbol.length") && NameUtil.nameToWordList(elementName).size > 1 + + private fun shouldSearchInClasses(elementName: String): Boolean = elementName.length > 2 private fun isFile(): Boolean { val filetype = FileTypeRegistry.getInstance().getFileTypeByFileName(canonicalText) diff --git a/plugins/markdown/test/src/org/intellij/plugins/markdown/reference/BacktickReferenceTest.kt b/plugins/markdown/test/src/org/intellij/plugins/markdown/reference/BacktickReferenceTest.kt index 0838d26aca84..cd941a7b42fe 100644 --- a/plugins/markdown/test/src/org/intellij/plugins/markdown/reference/BacktickReferenceTest.kt +++ b/plugins/markdown/test/src/org/intellij/plugins/markdown/reference/BacktickReferenceTest.kt @@ -42,6 +42,12 @@ class BacktickReferenceTest : BasePlatformTestCase() { assertTrue(myFixture.psiManager.areElementsEquivalent(javaClass, reference!!.resolve())) } + @Test + fun `test short class reference is not resolved`() { + createJavaClass("SS") + assertNull(configureAndGetReferenceAtCaret("There is an `SS` backtick")?.resolve()) + } + @Test fun `test reference with extension resolves to original element`() { val file = createFile("JavaClass.java", "class JavaClass {}") @@ -87,11 +93,11 @@ class BacktickReferenceTest : BasePlatformTestCase() { "JavaClass1.java", """ class JavaClass1 { - public void longlonglong() {} + public void longLongLong() {} } """.trimIndent() ) - assertResolvesToPsiMethod("some1.md", "There is an `longlonglong` backtick") + assertResolvesToPsiMethod("some1.md", "There is an `longLongLong` backtick") } @Test @@ -100,21 +106,21 @@ class BacktickReferenceTest : BasePlatformTestCase() { "JavaClass.java", """ class JavaClass { - public void sho_test() {} + public void boundary_test() {} } """.trimIndent() ) - assertResolvesToPsiMethod("some.md", "There is an `sho_test` backtick") + assertResolvesToPsiMethod("some.md", "There is an `boundary_test` backtick") createFile( "JavaClass1.java", """ class JavaClass1 { - public void shoTest() {} + public void boundaryTest() {} } """.trimIndent() ) - assertResolvesToPsiMethod("some1.md", "There is an `shoTest` backtick") + assertResolvesToPsiMethod("some1.md", "There is an `boundaryTest` backtick") } @Test @@ -371,8 +377,8 @@ class BacktickReferenceTest : BasePlatformTestCase() { assertNull(reference?.resolve()) } - private fun createJavaClass(): PsiClass { - val file = createFile("JavaClass.java", "class JavaClass {}") + private fun createJavaClass(name: String = "JavaClass"): PsiClass { + val file = createFile("$name.java", "class $name {}") return file.children.single { it is PsiClass } as PsiClass }