From 0fe5694cb761e9de55ea76062a258b99677adaea Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 4 Feb 2020 19:19:22 +0300 Subject: [PATCH] Do not render redundant Nullable annotations when generating declarations #KT-36321 fixed --- .../createFromUsage/callableBuilder/typeUtils.kt | 12 +++++++++++- .../call/javaNullabilityAnnotation.after.kt | 11 +++++++++++ .../javaNullabilityAnnotation.before.Dependency.java | 5 +++++ .../call/javaNullabilityAnnotation.before.Main.kt | 7 +++++++ .../quickfix/QuickFixMultiFileTestGenerated.java | 5 +++++ 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.after.kt create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Dependency.java create mode 100644 idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Main.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/typeUtils.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/typeUtils.kt index 97021ae14a8..b51dd2137ff 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/typeUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/typeUtils.kt @@ -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: MapTODO("Not yet implemented") +} diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Dependency.java b/idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Dependency.java new file mode 100644 index 00000000000..d535d8a9316 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Dependency.java @@ -0,0 +1,5 @@ +public class Foo { + public @org.jetbrains.annotations.Nullable String eval() { + return null; + } +} diff --git a/idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Main.kt b/idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Main.kt new file mode 100644 index 00000000000..27192ab09a8 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createFunction/call/javaNullabilityAnnotation.before.Main.kt @@ -0,0 +1,7 @@ +// "Create function 'bar'" "true" +// ERROR: Unresolved reference: bar + +fun foo(foo: Foo) { + val s = foo.eval() + bar(s) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index 46f29932626..73d100a0272 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -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");