From 3fb34c26ef0748a64408255dd9ad9dcefe5f1712 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 2 Oct 2012 18:44:54 +0400 Subject: [PATCH] Allow annotate constructors with default value in format "fun ()" #KT-2774 In Progress --- .../AddKotlinSignatureAnnotation.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java index 440653ea56e..1453db52218 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java @@ -35,6 +35,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.di.InjectorForJavaSemanticServices; import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -137,6 +138,17 @@ public class AddKotlinSignatureAnnotation extends BaseIntentionAction implements assert qualifiedName != null; FqName classFqName = new FqName(qualifiedName); + if (method.getReturnType() == null) { + // For constructor + ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(classFqName); + assert classDescriptor != null: "Couldn't resolve class descriptor for " + classFqName; + classDescriptor.getConstructors(); + + ConstructorDescriptor constructorDescriptor = injector.getBindingTrace().getBindingContext().get(BindingContext.CONSTRUCTOR, method); + assert constructorDescriptor != null: "Couldn't find constructor descriptor for " + method.getName() + " in " + classFqName; + return getDefaultConstructorAnnotation(constructorDescriptor, classFqName); + } + if (method.getModifierList().hasModifierProperty(PsiModifier.STATIC)) { NamespaceDescriptor namespaceDescriptor = javaDescriptorResolver.resolveNamespace(classFqName); assert namespaceDescriptor != null: "Couldn't resolve namespace descriptor for " + classFqName; @@ -153,12 +165,15 @@ public class AddKotlinSignatureAnnotation extends BaseIntentionAction implements return RENDERER.render(functionDescriptor); } + private static String getDefaultConstructorAnnotation(ConstructorDescriptor constructorDescriptor, FqName classFqName) { + return String.format("fun %s%s", classFqName.shortName(), RENDERER.renderFunctionParameters(constructorDescriptor)); + } + @Nullable private static PsiMethod findMethod(@NotNull PsiFile file, int offset) { PsiElement element = file.findElementAt(offset); PsiMethod res = PsiTreeUtil.getParentOfType(element, PsiMethod.class); if (res == null) return null; - if (res.getReturnType() == null) return null; // disabled for constructors //Not available in method's body PsiCodeBlock body = res.getBody();