mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 14:23:28 +07:00
[java-console] IDEA-344708 JVM Log navigation doesn't support nested classes
GitOrigin-RevId: 80c2c932b4630df848b7ff897a1ac50c988b8bcc
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d5da0ada2b
commit
199e367dbd
@@ -13,6 +13,14 @@ import com.intellij.psi.search.PsiShortNamesCache
|
||||
class ClassInfoResolver(val project: Project, private val mySearchScope: GlobalSearchScope) {
|
||||
|
||||
companion object {
|
||||
internal fun findSubclassName(className: String): String? {
|
||||
val probablySubclassIndex = className.lastIndexOf('$')
|
||||
if (probablySubclassIndex != -1 && probablySubclassIndex != 0 && className.length > probablySubclassIndex + 1) {
|
||||
return className.substring(probablySubclassIndex + 1)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun findClasses(project: Project,
|
||||
scope: GlobalSearchScope,
|
||||
shortClassName: String,
|
||||
@@ -28,6 +36,13 @@ class ClassInfoResolver(val project: Project, private val mySearchScope: GlobalS
|
||||
result.add(clazz)
|
||||
}
|
||||
}
|
||||
if (result.isEmpty()) {
|
||||
val newShortClassName = findSubclassName(shortClassName)
|
||||
if (newShortClassName != null) {
|
||||
val newTargetPackageName = targetPackageName + "." + shortClassName.substring(0, newShortClassName.length + 1)
|
||||
return findClasses(project, scope, newShortClassName, newTargetPackageName)
|
||||
}
|
||||
}
|
||||
return result.toList()
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,8 @@ internal class LogFinderHyperlinkHandler(private val probableClassName: Probable
|
||||
val document = PsiDocumentManager.getInstance(element.getProject()).getDocument(element.containingFile) ?: return text
|
||||
val lineNumber = document.getLineNumber(element.textRange.endOffset)
|
||||
val textRange = element.textRange
|
||||
.intersection(TextRange(document.getLineStartOffset(lineNumber), document.getLineEndOffset(lineNumber))) ?: element.textRange
|
||||
.intersection(TextRange(document.getLineStartOffset(lineNumber), document.getLineEndOffset(lineNumber)))
|
||||
?: element.textRange
|
||||
val trimmedText = document.getText(textRange).trim()
|
||||
return StringUtil.shortenTextWithEllipsis(trimmedText, 30, 0)
|
||||
}
|
||||
@@ -105,11 +106,20 @@ internal class LogFinderHyperlinkHandler(private val probableClassName: Probable
|
||||
internal class LogVisitor(private val probableClassName: ProbableClassName) : PsiRecursiveElementVisitor() {
|
||||
val similarClasses = mutableSetOf<UClass>()
|
||||
val similarCalls = mutableSetOf<UCallExpression>()
|
||||
val shortClassName = probableClassName.fullClassName.substringAfterLast('.')
|
||||
private val shortClassNames = mutableSetOf<String>()
|
||||
|
||||
init {
|
||||
val shortClassName = probableClassName.fullClassName.substringAfterLast('.')
|
||||
shortClassNames.add(shortClassName)
|
||||
val subclassName = ClassInfoResolver.findSubclassName(shortClassName)
|
||||
if (subclassName != null) {
|
||||
shortClassNames.add(subclassName)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitElement(element: PsiElement) {
|
||||
val uClass = element.toUElementOfType<UClass>()
|
||||
if (uClass != null && shortClassName == uClass.javaPsi.name) {
|
||||
if (uClass != null && shortClassNames.contains(uClass.javaPsi.name)) {
|
||||
similarClasses.add(uClass)
|
||||
}
|
||||
val uCall = element.toUElementOfType<UCallExpression>()
|
||||
|
||||
@@ -285,4 +285,39 @@ public final class EmptySpringApplication {
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun testNestedClasses() {
|
||||
LoggingTestUtils.addSlf4J(myFixture)
|
||||
checkColumnFinderJava(
|
||||
fileName = "UpperClass",
|
||||
classText = """
|
||||
package com.example;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public final class UpperClass {
|
||||
public static class Inner{
|
||||
private static final Logger log = org.slf4j.LoggerFactory.getLogger(Inner.class);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
request1("1");
|
||||
}
|
||||
|
||||
|
||||
private static void request1(String number) {
|
||||
System.out.println("com.example.UpperClass${"\$Inner"} test");
|
||||
Inner.log.info("new request1 {}", number);
|
||||
}
|
||||
}
|
||||
""".trimIndent(),
|
||||
logItems = listOf(
|
||||
LogItem("java.exe", null),
|
||||
LogItem("1", null),
|
||||
LogItem("com.example.UpperClass${"\$Inner"} test", LogicalPosition(6, 24)),
|
||||
LogItem("[main] INFO com.example.UpperClass${"\$Inner"} -- new request1 1", LogicalPosition(17, 8)),
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user