Do not render redundant Nullable annotations when generating declarations
#KT-36321 fixed
This commit is contained in:
+11
-1
@@ -6,20 +6,26 @@
|
||||
package org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder
|
||||
|
||||
import com.intellij.refactoring.psi.SearchUtils
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||
import org.jetbrains.kotlin.cfg.pseudocode.*
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.idea.project.builtIns
|
||||
import org.jetbrains.kotlin.idea.util.getDataFlowAwareTypes
|
||||
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
|
||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||
import org.jetbrains.kotlin.load.java.NULLABILITY_ANNOTATIONS
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsStatement
|
||||
import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor
|
||||
@@ -77,7 +83,11 @@ private fun KotlinType.renderSingle(typeParameterNameMap: Map<TypeParameterDescr
|
||||
.mapKeys { it.key.typeConstructor }
|
||||
|
||||
val typeToRender = TypeSubstitutor.create(substitution).substitute(this, Variance.INVARIANT)!!
|
||||
val renderer = if (fq) IdeDescriptorRenderers.SOURCE_CODE else IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_NO_ANNOTATIONS
|
||||
val renderer =
|
||||
if (fq) IdeDescriptorRenderers.SOURCE_CODE.withOptions {
|
||||
excludedTypeAnnotationClasses = NULLABILITY_ANNOTATIONS
|
||||
}
|
||||
else IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_NO_ANNOTATIONS
|
||||
return renderer.renderType(typeToRender)
|
||||
}
|
||||
|
||||
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// "Create function 'bar'" "true"
|
||||
// ERROR: Unresolved reference: bar
|
||||
|
||||
fun foo(foo: Foo) {
|
||||
val s = foo.eval()
|
||||
bar(s)
|
||||
}
|
||||
|
||||
fun bar(s: String?) {
|
||||
<selection>TODO("Not yet implemented")<caret></selection>
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
public class Foo {
|
||||
public @org.jetbrains.annotations.Nullable String eval() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
// "Create function 'bar'" "true"
|
||||
// ERROR: Unresolved reference: bar
|
||||
|
||||
fun foo(foo: Foo) {
|
||||
val s = foo.eval()
|
||||
<caret>bar(s)
|
||||
}
|
||||
+5
@@ -1965,6 +1965,11 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes
|
||||
runTest("idea/testData/quickfix/createFromUsage/createFunction/call/genericFunOnJavaType.before.Main.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("javaNullabilityAnnotation.before.Main.kt")
|
||||
public void testJavaNullabilityAnnotation() throws Exception {
|
||||
runTest("idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Main.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("staticExtensionFunOnJavaClass.before.Main.kt")
|
||||
public void testStaticExtensionFunOnJavaClass() throws Exception {
|
||||
runTest("idea/testData/quickfix/createFromUsage/createFunction/call/staticExtensionFunOnJavaClass.before.Main.kt");
|
||||
|
||||
Reference in New Issue
Block a user