mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] provide renderer aware of real java names
- for java parameter inconsistency comments ^KTIJ-37477 fixed (cherry picked from commit 3bbb9238087ed80742ec729c6d4be0fc4f77bf9d) IJ-CR-192831 GitOrigin-RevId: 5d1a4936e619bb34f8ee39076329a92be0230368
This commit is contained in:
committed by
intellij-monorepo-bot
parent
190fb56dde
commit
706f4ff95f
+8
-5
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.analysis.api.resolution.successfulFunctionCallOrNull
|
||||
import org.jetbrains.kotlin.analysis.api.resolution.symbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KaValueParameterSymbol
|
||||
import org.jetbrains.kotlin.idea.base.analysis.api.utils.isJavaSourceOrLibrary
|
||||
import org.jetbrains.kotlin.idea.util.realName
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtCallElement
|
||||
@@ -40,7 +41,7 @@ fun KtValueArgument.getBlockCommentWithName(): PsiComment? =
|
||||
@ApiStatus.Internal
|
||||
class ArgumentNameCommentInfo(val argumentName: Name, val comment: String) {
|
||||
@ApiStatus.Internal
|
||||
constructor(symbol: KaValueParameterSymbol): this(symbol.name, symbol.toArgumentNameComment())
|
||||
constructor(symbol: KaValueParameterSymbol, analysisSession: KaSession): this(with(analysisSession) { symbol.realName } ?: symbol.name, symbol.toArgumentNameComment(analysisSession))
|
||||
}
|
||||
|
||||
typealias NameCommentsByArgument = Map<SmartPsiElementPointer<KtValueArgument>, ArgumentNameCommentInfo>
|
||||
@@ -50,7 +51,7 @@ typealias NameCommentsByArgument = Map<SmartPsiElementPointer<KtValueArgument>,
|
||||
* is indexed by [KtValueArgument], though the [SmartPsiElementPointer]s need to be dereferenced first. The [SmartPsiElementPointer] allows
|
||||
* the map to be stored in applicable intention contexts.
|
||||
*/
|
||||
context(_: KaSession)
|
||||
context(session: KaSession)
|
||||
fun getArgumentNameComments(element: KtCallElement): NameCommentsByArgument? {
|
||||
val arguments = element.getNonLambdaArguments()
|
||||
val resolvedCall = element.resolveToCall()?.successfulFunctionCallOrNull() ?: return null
|
||||
@@ -69,15 +70,17 @@ fun getArgumentNameComments(element: KtCallElement): NameCommentsByArgument? {
|
||||
// subsequent varargs.
|
||||
.takeWhileInclusive { !it.second.isVararg }
|
||||
.associate { (argument, symbol) ->
|
||||
argument.createSmartPointer() to ArgumentNameCommentInfo(symbol)
|
||||
argument.createSmartPointer() to ArgumentNameCommentInfo(symbol, session)
|
||||
}
|
||||
}
|
||||
|
||||
private fun KtCallElement.getNonLambdaArguments(): List<KtValueArgument> =
|
||||
valueArguments.filterIsInstance<KtValueArgument>().filterNot { it is KtLambdaArgument }
|
||||
|
||||
private fun KaValueParameterSymbol.toArgumentNameComment(): String =
|
||||
canonicalArgumentNameComment(if (isVararg) "...$name" else name.toString())
|
||||
private fun KaValueParameterSymbol.toArgumentNameComment(analysisSession: KaSession): String {
|
||||
val realName = with(analysisSession) { realName } ?: name
|
||||
return canonicalArgumentNameComment(if (isVararg) "...$realName" else realName.toString())
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
fun PsiComment.isExpectedArgumentNameComment(info: ArgumentNameCommentInfo): Boolean {
|
||||
|
||||
+5
@@ -3697,6 +3697,11 @@ public abstract class K2LocalInspectionTestGenerated extends AbstractK2LocalInsp
|
||||
runTest("../../../idea/tests/testData/inspectionsLocal/inconsistentCommentForJavaParameter/annotation.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("clsParameter.kt")
|
||||
public void testClsParameter() throws Exception {
|
||||
runTest("../../../idea/tests/testData/inspectionsLocal/inconsistentCommentForJavaParameter/clsParameter.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("comment.kt")
|
||||
public void testComment() throws Exception {
|
||||
runTest("../../../idea/tests/testData/inspectionsLocal/inconsistentCommentForJavaParameter/comment.kt");
|
||||
|
||||
+4
-4
@@ -178,7 +178,7 @@ class KtParameterHintsProvider : AbstractKtInlayHintsProvider() {
|
||||
}
|
||||
|
||||
@OptIn(KaExperimentalApi::class)
|
||||
context(_: KaSession)
|
||||
context(session: KaSession)
|
||||
private fun collectFromParameters(
|
||||
callElement: KtCallElement,
|
||||
functionCall: KaFunctionCall<*>,
|
||||
@@ -217,7 +217,7 @@ class KtParameterHintsProvider : AbstractKtInlayHintsProvider() {
|
||||
continue
|
||||
}
|
||||
|
||||
if (argument.isArgumentNamed(symbol)) {
|
||||
if (argument.isArgumentNamed(symbol, session)) {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -354,7 +354,7 @@ class KtParameterHintsProvider : AbstractKtInlayHintsProvider() {
|
||||
text(symbolPsi, targetPsi?.asNavigatablePsiLoad())
|
||||
}
|
||||
|
||||
private fun KtValueArgument.isArgumentNamed(symbol: KaValueParameterSymbol): Boolean {
|
||||
private fun KtValueArgument.isArgumentNamed(symbol: KaValueParameterSymbol, session: KaSession): Boolean {
|
||||
// avoid cases like "`value =` value"
|
||||
val argumentText = this.text
|
||||
val symbolName = symbol.name.asString()
|
||||
@@ -367,7 +367,7 @@ class KtParameterHintsProvider : AbstractKtInlayHintsProvider() {
|
||||
while (sibling != null) {
|
||||
when(sibling) {
|
||||
is PsiComment -> {
|
||||
val argumentNameCommentInfo = ArgumentNameCommentInfo(symbol)
|
||||
val argumentNameCommentInfo = ArgumentNameCommentInfo(symbol, session)
|
||||
return sibling.isExpectedArgumentNameComment(argumentNameCommentInfo)
|
||||
}
|
||||
!is PsiWhiteSpace -> break
|
||||
|
||||
+5
@@ -6585,6 +6585,11 @@ public abstract class LocalInspectionTestGenerated extends AbstractK1LocalInspec
|
||||
runTest("testData/inspectionsLocal/inconsistentCommentForJavaParameter/annotation.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("clsParameter.kt")
|
||||
public void testClsParameter() throws Exception {
|
||||
runTest("testData/inspectionsLocal/inconsistentCommentForJavaParameter/clsParameter.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("comment.kt")
|
||||
public void testComment() throws Exception {
|
||||
runTest("testData/inspectionsLocal/inconsistentCommentForJavaParameter/comment.kt");
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
// WITH_LIBRARY: javaCls
|
||||
fun foo() {
|
||||
val lib = MyLibrary()
|
||||
lib.foo(<caret>/* p0 = */ 1)
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
// WITH_LIBRARY: javaCls
|
||||
fun foo() {
|
||||
val lib = MyLibrary()
|
||||
lib.foo(<caret>/* index = */ 1)
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
public class MyLibrary {
|
||||
public void foo(int index) {}
|
||||
}
|
||||
Reference in New Issue
Block a user