Parameter Info: Do not render nullability annotations

#KT-23408 Fixed
This commit is contained in:
Alexey Sedunov
2018-04-05 20:17:22 +03:00
parent e5b915661a
commit c1d8ba9c2b
6 changed files with 40 additions and 3 deletions
@@ -48,6 +48,8 @@ val NOT_NULL_ANNOTATIONS = listOf(
FqName("io.reactivex.annotations.NonNull")
)
val NULLABILITY_ANNOTATIONS = NULLABLE_ANNOTATIONS + JAVAX_NONNULL_ANNOTATION + NOT_NULL_ANNOTATIONS
val COMPATQUAL_NULLABLE_ANNOTATION = FqName("org.checkerframework.checker.nullness.compatqual.NullableDecl")
val COMPATQUAL_NONNULL_ANNOTATION = FqName("org.checkerframework.checker.nullness.compatqual.NonNullDecl")
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.idea.core.resolveCandidates
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.util.ShadowedDeclarationsFilter
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.load.java.NULLABILITY_ANNOTATIONS
import org.jetbrains.kotlin.load.java.sam.SamAdapterDescriptor
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.allChildren
@@ -254,9 +255,13 @@ abstract class KotlinParameterInfoWithCallHandlerBase<TArgumentList : KtElement,
return buildString {
if (named) append("[")
parameter.annotations.getAllAnnotations().forEach {
it.annotation.fqName?.let { append("@${it.shortName().asString()} ") }
}
parameter
.annotations
.getAllAnnotations()
.filterNot { it.annotation.fqName in NULLABILITY_ANNOTATIONS }
.forEach {
it.annotation.fqName?.let { append("@${it.shortName().asString()} ") }
}
if (parameter.varargElementType != null) {
append("vararg ")
@@ -0,0 +1,8 @@
import org.jetbrains.annotations.Nullable
import org.jetbrains.annotations.NotNull
class J {
static void foo(@Nullable String s1, @NotNull String s2, String s3) {
}
}
@@ -0,0 +1,7 @@
fun test() {
J.foo(<caret>"1", "2", "3")
}
/*
Text: (<highlight>s1: String?</highlight>, s2: String, s3: String!), Disabled: false, Strikeout: false, Green: true
*/
@@ -18,11 +18,13 @@ package org.jetbrains.kotlin.idea.parameterInfo
import com.intellij.codeInsight.hint.ShowParameterInfoContext
import com.intellij.codeInsight.hint.ShowParameterInfoHandler
import com.intellij.openapi.util.io.FileUtil
import com.intellij.psi.PsiDocumentManager
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiWhiteSpace
import com.intellij.testFramework.LightProjectDescriptor
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
import com.intellij.util.PathUtil
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.test.SdkAndMockLibraryProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
@@ -33,6 +35,7 @@ import org.jetbrains.kotlin.psi.psiUtil.allChildren
import org.jetbrains.kotlin.test.InTextDirectivesUtils
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.junit.Assert
import java.io.File
abstract class AbstractParameterInfoTest : LightCodeInsightFixtureTestCase() {
override fun getProjectDescriptor(): LightProjectDescriptor {
@@ -50,6 +53,12 @@ abstract class AbstractParameterInfoTest : LightCodeInsightFixtureTestCase() {
}
protected fun doTest(fileName: String) {
val prefix = FileUtil.getNameWithoutExtension(PathUtil.getFileName(fileName))
val mainFile = File(FileUtil.toSystemDependentName(fileName))
mainFile.parentFile
.listFiles { dir, name -> name.startsWith("$prefix.") }
.forEach { myFixture.configureByFile(FileUtil.toSystemIndependentName(it.path)) }
myFixture.configureByFile(fileName)
val file = myFixture.file as KtFile
@@ -231,6 +231,12 @@ public class ParameterInfoTestGenerated extends AbstractParameterInfoTest {
doTest(fileName);
}
@TestMetadata("Nullability.kt")
public void testNullability() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/parameterInfo/functionCall/Nullability.kt");
doTest(fileName);
}
@TestMetadata("NullableTypeCall.kt")
public void testNullableTypeCall() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/parameterInfo/functionCall/NullableTypeCall.kt");