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
|
package org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder
|
||||||
|
|
||||||
import com.intellij.refactoring.psi.SearchUtils
|
import com.intellij.refactoring.psi.SearchUtils
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||||
import org.jetbrains.kotlin.cfg.pseudocode.*
|
import org.jetbrains.kotlin.cfg.pseudocode.*
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
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.project.builtIns
|
||||||
import org.jetbrains.kotlin.idea.util.getDataFlowAwareTypes
|
import org.jetbrains.kotlin.idea.util.getDataFlowAwareTypes
|
||||||
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
|
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
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.FqName
|
||||||
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
|
import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
|
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsStatement
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsStatement
|
||||||
import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor
|
import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor
|
||||||
@@ -77,7 +83,11 @@ private fun KotlinType.renderSingle(typeParameterNameMap: Map<TypeParameterDescr
|
|||||||
.mapKeys { it.key.typeConstructor }
|
.mapKeys { it.key.typeConstructor }
|
||||||
|
|
||||||
val typeToRender = TypeSubstitutor.create(substitution).substitute(this, Variance.INVARIANT)!!
|
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)
|
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");
|
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")
|
@TestMetadata("staticExtensionFunOnJavaClass.before.Main.kt")
|
||||||
public void testStaticExtensionFunOnJavaClass() throws Exception {
|
public void testStaticExtensionFunOnJavaClass() throws Exception {
|
||||||
runTest("idea/testData/quickfix/createFromUsage/createFunction/call/staticExtensionFunOnJavaClass.before.Main.kt");
|
runTest("idea/testData/quickfix/createFromUsage/createFunction/call/staticExtensionFunOnJavaClass.before.Main.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user