diff --git a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorPreferencesKeys.java b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorPreferencesKeys.java index f02eb8641d1a..14a5a191b485 100644 --- a/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorPreferencesKeys.java +++ b/ide/editor.lib2/src/org/netbeans/modules/editor/lib2/EditorPreferencesKeys.java @@ -537,7 +537,13 @@ private EditorPreferencesKeys() { public static final String JAVADOC_PREFERRED_SIZE = SimpleValueNames.JAVADOC_PREFERRED_SIZE; public static final String POPUP_MENU_ENABLED = SimpleValueNames.POPUP_MENU_ENABLED; public static final String SHOW_DEPRECATED_MEMBERS = SimpleValueNames.SHOW_DEPRECATED_MEMBERS; - + + /** + * Whether the code completion should insert text for the parameters of executable items. + * Values: java.lang.Boolean + */ + public static final String COMPLETION_INSERT_TEXT_PARAMETERS = "completion-insert-text-parameters"; // NOI18N + /** List of the action names that should be shown in the popup menu. * Null name means separator. * Values: java.util.List containing java.lang.String instances diff --git a/ide/editor/src/org/netbeans/modules/editor/resources/NetBeans-preferences.xml b/ide/editor/src/org/netbeans/modules/editor/resources/NetBeans-preferences.xml index 1ebbd77682f3..1eea67cddc87 100644 --- a/ide/editor/src/org/netbeans/modules/editor/resources/NetBeans-preferences.xml +++ b/ide/editor/src/org/netbeans/modules/editor/resources/NetBeans-preferences.xml @@ -52,6 +52,9 @@ + + + diff --git a/java/java.completion/nbproject/org-netbeans-modules-java-completion.sig b/java/java.completion/nbproject/org-netbeans-modules-java-completion.sig index f440d4a50a63..3c7b3007411b 100644 --- a/java/java.completion/nbproject/org-netbeans-modules-java-completion.sig +++ b/java/java.completion/nbproject/org-netbeans-modules-java-completion.sig @@ -1,5 +1,5 @@ #Signature file v4.1 -#Version 2.17.0 +#Version 2.19.0 CLSS public abstract interface java.io.Serializable @@ -24,7 +24,6 @@ meth public final java.util.Optional meth public java.lang.String toString() meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Class<{%%0}>,java.lang.String) supr java.lang.Object -hfds name,ordinal CLSS public abstract interface !annotation java.lang.FunctionalInterface anno 0 java.lang.annotation.Documented() @@ -107,7 +106,7 @@ meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$It meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createAttributeValueItem(org.netbeans.api.java.source.CompilationInfo,java.lang.String,java.lang.String,javax.lang.model.element.TypeElement,int,org.netbeans.api.java.source.support.ReferencesCount) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createChainedMembersItem(org.netbeans.api.java.source.CompilationInfo,java.util.List,java.util.List,int,boolean,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createDefaultConstructorItem(javax.lang.model.element.TypeElement,int,boolean) -meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createExecutableItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,boolean,boolean,int,boolean) +meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createExecutableItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,boolean,boolean,int,boolean,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createGetterSetterMethodItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.VariableElement,javax.lang.model.type.TypeMirror,int,java.lang.String,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createInitializeAllConstructorItem(org.netbeans.api.java.source.CompilationInfo,boolean,java.lang.Iterable,javax.lang.model.element.ExecutableElement,javax.lang.model.element.TypeElement,int) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createKeywordItem(java.lang.String,java.lang.String,int,boolean) @@ -116,13 +115,13 @@ meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$It meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createParametersItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,int,boolean,int,java.lang.String) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createStaticMemberItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.type.DeclaredType,javax.lang.model.element.Element,javax.lang.model.type.TypeMirror,boolean,int,boolean,boolean,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createStaticMemberItem(org.netbeans.api.java.source.ElementHandle,java.lang.String,int,boolean,org.netbeans.api.java.source.support.ReferencesCount,org.netbeans.modules.parsing.api.Source,boolean) -meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createThisOrSuperConstructorItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,int,boolean,java.lang.String) +meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createThisOrSuperConstructorItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,int,boolean,java.lang.String,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createTypeItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.TypeElement,javax.lang.model.type.DeclaredType,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,boolean,boolean,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createTypeItem(org.netbeans.api.java.source.ElementHandle,java.util.EnumSet,int,org.netbeans.api.java.source.support.ReferencesCount,org.netbeans.modules.parsing.api.Source,boolean,boolean,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createTypeParameterItem(javax.lang.model.element.TypeParameterElement,int) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createVariableItem(org.netbeans.api.java.source.CompilationInfo,java.lang.String,int,boolean,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createVariableItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.VariableElement,javax.lang.model.type.TypeMirror,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,int) -meth public {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createExecutableItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,boolean,boolean,boolean,int,boolean) +meth public {org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory%0} createExecutableItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,boolean,boolean,boolean,int,boolean,boolean) CLSS public abstract interface static org.netbeans.modules.java.completion.JavaCompletionTask$LambdaItemFactory<%0 extends java.lang.Object> outer org.netbeans.modules.java.completion.JavaCompletionTask @@ -151,7 +150,7 @@ meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$Re CLSS public abstract interface static org.netbeans.modules.java.completion.JavaCompletionTask$TypeCastableItemFactory<%0 extends java.lang.Object> outer org.netbeans.modules.java.completion.JavaCompletionTask intf org.netbeans.modules.java.completion.JavaCompletionTask$ItemFactory<{org.netbeans.modules.java.completion.JavaCompletionTask$TypeCastableItemFactory%0}> -meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$TypeCastableItemFactory%0} createTypeCastableExecutableItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,javax.lang.model.type.TypeMirror,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,boolean,boolean,int,boolean) +meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$TypeCastableItemFactory%0} createTypeCastableExecutableItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.ExecutableElement,javax.lang.model.type.ExecutableType,javax.lang.model.type.TypeMirror,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,boolean,boolean,int,boolean,boolean) meth public abstract {org.netbeans.modules.java.completion.JavaCompletionTask$TypeCastableItemFactory%0} createTypeCastableVariableItem(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.VariableElement,javax.lang.model.type.TypeMirror,javax.lang.model.type.TypeMirror,int,org.netbeans.api.java.source.support.ReferencesCount,boolean,boolean,boolean,int) CLSS public final org.netbeans.modules.java.completion.JavaDocumentationTask<%0 extends java.lang.Object> @@ -190,6 +189,7 @@ hfds INIT,SUPER_KEYWORD,THIS_KEYWORD,activeSignatureIndex,anchorOffset,toolTipDa CLSS public final org.netbeans.modules.java.completion.Utilities meth public static boolean isCaseSensitive() +meth public static boolean isCompletionInsertTextParameters() meth public static boolean isExcludeMethods() meth public static boolean isExcluded(java.lang.CharSequence) meth public static boolean isShowDeprecatedMembers() @@ -199,7 +199,7 @@ meth public static boolean startsWithCamelCase(java.lang.String,java.lang.String meth public static java.util.List varNamesSuggestions(javax.lang.model.type.TypeMirror,javax.lang.model.element.ElementKind,java.util.Set,java.lang.String,java.lang.String,javax.lang.model.util.Types,javax.lang.model.util.Elements,java.lang.Iterable,org.netbeans.api.java.source.CodeStyle) meth public static void exclude(java.lang.CharSequence) supr java.lang.Object -hfds COMPLETION_CASE_SENSITIVE,COMPLETION_CASE_SENSITIVE_DEFAULT,EMPTY,ERROR,JAVA_COMPLETION_BLACKLIST,JAVA_COMPLETION_BLACKLIST_DEFAULT,JAVA_COMPLETION_EXCLUDER_METHODS,JAVA_COMPLETION_EXCLUDER_METHODS_DEFAULT,JAVA_COMPLETION_SUBWORDS,JAVA_COMPLETION_SUBWORDS_DEFAULT,JAVA_COMPLETION_WHITELIST,SHOW_DEPRECATED_MEMBERS,SHOW_DEPRECATED_MEMBERS_DEFAULT,cachedCamelCasePattern,cachedPrefix,cachedSubwordsPattern,caseSensitive,excludeRef,includeRef,inited,javaCompletionExcluderMethods,javaCompletionSubwords,preferences,preferencesTracker,showDeprecatedMembers +hfds COMPLETION_CASE_SENSITIVE,COMPLETION_CASE_SENSITIVE_DEFAULT,COMPLETION_INSERT_TEXT_PARAMETERS,COMPLETION_INSERT_TEXT_PARAMETERS_DEFAULT,EMPTY,ERROR,JAVA_COMPLETION_BLACKLIST,JAVA_COMPLETION_BLACKLIST_DEFAULT,JAVA_COMPLETION_EXCLUDER_METHODS,JAVA_COMPLETION_EXCLUDER_METHODS_DEFAULT,JAVA_COMPLETION_SUBWORDS,JAVA_COMPLETION_SUBWORDS_DEFAULT,JAVA_COMPLETION_WHITELIST,SHOW_DEPRECATED_MEMBERS,SHOW_DEPRECATED_MEMBERS_DEFAULT,cachedCamelCasePattern,cachedPrefix,cachedSubwordsPattern,caseSensitive,completionInsertTextParameters,excludeRef,includeRef,inited,javaCompletionExcluderMethods,javaCompletionSubwords,preferences,preferencesTracker,showDeprecatedMembers CLSS public abstract interface org.netbeans.modules.parsing.api.ResultProcessor anno 0 java.lang.FunctionalInterface() diff --git a/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java b/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java index cce5ec31232a..4fe4b4cc2595 100644 --- a/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java +++ b/java/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java @@ -88,13 +88,13 @@ public static interface ItemFactory { T createVariableItem(CompilationInfo info, String varName, int substitutionOffset, boolean newVarName, boolean smartType); - T createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef); + T createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams); - default T createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef) { - return createExecutableItem(info, elem, type, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, smartType, assignToVarOffset, memberRef); + default T createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { + return createExecutableItem(info, elem, type, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, smartType, assignToVarOffset, memberRef, insertTextParams); } - T createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name); + T createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name, boolean insertTextParams); T createOverrideMethodItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean implement); @@ -123,7 +123,7 @@ public static interface TypeCastableItemFactory extends ItemFactory { T createTypeCastableVariableItem(CompilationInfo info, VariableElement elem, TypeMirror type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean smartType, int assignToVarOffset); - T createTypeCastableExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef); + T createTypeCastableExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams); } public static interface LambdaItemFactory extends ItemFactory { @@ -3701,7 +3701,7 @@ public boolean accept(Element e, TypeMirror t) { if (e.getEnclosingElement() != enclClass && conflictsWithLocalMethods(e.getSimpleName(), enclClass, methodsIn)) { results.add(itemFactory.createStaticMemberItem(env.getController(), (DeclaredType)e.getEnclosingElement().asType(), e, et, false, anchorOffset, elements.isDeprecated(e), env.addSemicolon(), true)); } else { - results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, null, env.getScope().getEnclosingClass() != e.getEnclosingElement(), elements.isDeprecated(e), false, env.addSemicolon(), isOfSmartType(env, getCorrectedReturnType(env, et, (ExecutableElement) e, enclClass != null ? enclClass.asType() : null), smartTypes), env.assignToVarPos(), false)); + results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, null, env.getScope().getEnclosingClass() != e.getEnclosingElement(), elements.isDeprecated(e), false, env.addSemicolon(), isOfSmartType(env, getCorrectedReturnType(env, et, (ExecutableElement) e, enclClass != null ? enclClass.asType() : null), smartTypes), env.assignToVarPos(), false, Utilities.isCompletionInsertTextParameters())); } break; } @@ -4065,7 +4065,7 @@ public boolean accept(Element e, TypeMirror t) { switch (e.getKind()) { case METHOD: ExecutableType et = (ExecutableType) asMemberOf(e, type, types); - results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, null, typeElem != e.getEnclosingElement(), elements.isDeprecated(e), false, false, isOfSmartType(env, et, smartTypes), env.assignToVarPos(), true)); + results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, null, typeElem != e.getEnclosingElement(), elements.isDeprecated(e), false, false, isOfSmartType(env, et, smartTypes), env.assignToVarPos(), true, false)); // insertTextParams is hard-coded to false because memberRef is true for method-references, thus, irrelevant. break; } } @@ -4222,16 +4222,16 @@ && isOfKindAndType(e.getEnclosingElement().asType(), e, kinds, baseType, scope, break; case CONSTRUCTOR: ExecutableType et = (ExecutableType) asMemberOf(e, actualType, types); - results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, autoImport ? env.getReferencesCount() : null, typeElem != e.getEnclosingElement(), elements.isDeprecated(e), inImport, false, afterConstructorTypeParams, isOfSmartType(env, actualType, smartTypes), env.assignToVarPos(), false)); + results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, autoImport ? env.getReferencesCount() : null, typeElem != e.getEnclosingElement(), elements.isDeprecated(e), inImport, false, afterConstructorTypeParams, isOfSmartType(env, actualType, smartTypes), env.assignToVarPos(), false, Utilities.isCompletionInsertTextParameters())); break; case METHOD: et = (ExecutableType) asMemberOf(e, actualType, types); if (addCast && itemFactory instanceof TypeCastableItemFactory && !types.isSubtype(type, e.getEnclosingElement().asType()) && type.getKind() == TypeKind.DECLARED && !hasBaseMethod(elements, (DeclaredType) type, (ExecutableElement) e)) { - results.add(((TypeCastableItemFactory)itemFactory).createTypeCastableExecutableItem(env.getController(), (ExecutableElement) e, et, actualType, anchorOffset, autoImport ? env.getReferencesCount() : null, typeElem != e.getEnclosingElement(), elements.isDeprecated(e), inImport, env.addSemicolon(), isOfSmartType(env, getCorrectedReturnType(env, et, (ExecutableElement) e, actualType), smartTypes), env.assignToVarPos(), false)); + results.add(((TypeCastableItemFactory)itemFactory).createTypeCastableExecutableItem(env.getController(), (ExecutableElement) e, et, actualType, anchorOffset, autoImport ? env.getReferencesCount() : null, typeElem != e.getEnclosingElement(), elements.isDeprecated(e), inImport, env.addSemicolon(), isOfSmartType(env, getCorrectedReturnType(env, et, (ExecutableElement) e, actualType), smartTypes), env.assignToVarPos(), false, Utilities.isCompletionInsertTextParameters())); } else { - results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, autoImport ? env.getReferencesCount() : null, typeElem != e.getEnclosingElement(), elements.isDeprecated(e), inImport, env.addSemicolon(), isOfSmartType(env, getCorrectedReturnType(env, et, (ExecutableElement) e, actualType), smartTypes), env.assignToVarPos(), false)); + results.add(itemFactory.createExecutableItem(env.getController(), (ExecutableElement) e, et, anchorOffset, autoImport ? env.getReferencesCount() : null, typeElem != e.getEnclosingElement(), elements.isDeprecated(e), inImport, env.addSemicolon(), isOfSmartType(env, getCorrectedReturnType(env, et, (ExecutableElement) e, actualType), smartTypes), env.assignToVarPos(), false, Utilities.isCompletionInsertTextParameters())); } break; case CLASS: @@ -4290,7 +4290,7 @@ public boolean accept(Element e, TypeMirror t) { for (Element e : controller.getElementUtilities().getMembers(type, acceptor)) { if (e.getKind() == CONSTRUCTOR) { ExecutableType et = (ExecutableType) asMemberOf(e, type, types); - results.add(itemFactory.createThisOrSuperConstructorItem(env.getController(), (ExecutableElement) e, et, anchorOffset, elements.isDeprecated(e), name)); + results.add(itemFactory.createThisOrSuperConstructorItem(env.getController(), (ExecutableElement) e, et, anchorOffset, elements.isDeprecated(e), name, Utilities.isCompletionInsertTextParameters())); } } } diff --git a/java/java.completion/src/org/netbeans/modules/java/completion/Utilities.java b/java/java.completion/src/org/netbeans/modules/java/completion/Utilities.java index 7b92de86b851..5678e97435f4 100644 --- a/java/java.completion/src/org/netbeans/modules/java/completion/Utilities.java +++ b/java/java.completion/src/org/netbeans/modules/java/completion/Utilities.java @@ -51,6 +51,8 @@ public final class Utilities { private static final String ERROR = ""; //NOI18N private static final String COMPLETION_CASE_SENSITIVE = "completion-case-sensitive"; // NOI18N private static final boolean COMPLETION_CASE_SENSITIVE_DEFAULT = true; + private static final String COMPLETION_INSERT_TEXT_PARAMETERS = "completion-insert-text-parameters"; // NOI18N + private static final boolean COMPLETION_INSERT_TEXT_PARAMETERS_DEFAULT = true; private static final String SHOW_DEPRECATED_MEMBERS = "show-deprecated-members"; // NOI18N private static final boolean SHOW_DEPRECATED_MEMBERS_DEFAULT = true; private static final String JAVA_COMPLETION_WHITELIST = "javaCompletionWhitelist"; //NOI18N @@ -62,6 +64,7 @@ public final class Utilities { private static final boolean JAVA_COMPLETION_SUBWORDS_DEFAULT = false; private static boolean caseSensitive = COMPLETION_CASE_SENSITIVE_DEFAULT; + private static boolean completionInsertTextParameters = COMPLETION_INSERT_TEXT_PARAMETERS_DEFAULT; private static boolean showDeprecatedMembers = SHOW_DEPRECATED_MEMBERS_DEFAULT; private static boolean javaCompletionExcluderMethods = JAVA_COMPLETION_EXCLUDER_METHODS_DEFAULT; private static boolean javaCompletionSubwords = JAVA_COMPLETION_SUBWORDS_DEFAULT; @@ -92,6 +95,9 @@ public void preferenceChange(PreferenceChangeEvent evt) { if (settingName == null || JAVA_COMPLETION_SUBWORDS.equals(settingName)) { javaCompletionSubwords = preferences.getBoolean(JAVA_COMPLETION_SUBWORDS, JAVA_COMPLETION_SUBWORDS_DEFAULT); } + if (settingName == null || COMPLETION_INSERT_TEXT_PARAMETERS.equals(settingName)) { + completionInsertTextParameters = preferences.getBoolean(COMPLETION_INSERT_TEXT_PARAMETERS, COMPLETION_INSERT_TEXT_PARAMETERS_DEFAULT); + } } }; @@ -208,6 +214,11 @@ public static boolean isShowDeprecatedMembers() { return showDeprecatedMembers; } + public static boolean isCompletionInsertTextParameters() { + lazyInit(); + return completionInsertTextParameters; + } + private static final AtomicReference> excludeRef = new AtomicReference<>(); private static final AtomicReference> includeRef = new AtomicReference<>(); diff --git a/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/CompletionTestBase.java b/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/CompletionTestBase.java index 1dd98f80c89c..fc6a1fe62627 100644 --- a/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/CompletionTestBase.java +++ b/java/java.completion/test/unit/src/org/netbeans/modules/java/completion/CompletionTestBase.java @@ -246,7 +246,7 @@ public CI createVariableItem(CompilationInfo info, String varName, int substitut } @Override - public CI createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef) { + public CI createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { String simpleName = elem.getKind() == ElementKind.CONSTRUCTOR ? elem.getEnclosingElement().getSimpleName().toString() : elem.getSimpleName().toString(); StringBuilder sb = new StringBuilder(); StringBuilder sortParams = new StringBuilder(); @@ -297,7 +297,7 @@ public CI createExecutableItem(CompilationInfo info, ExecutableElement elem, Exe } @Override - public CI createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name) { + public CI createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name, boolean insertTextParams) { if (elem.getKind() == ElementKind.CONSTRUCTOR) { StringBuilder sb = new StringBuilder(); StringBuilder sortParams = new StringBuilder(); diff --git a/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionCollector.java b/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionCollector.java index 83c9aa8bd5fe..1eee82207a22 100644 --- a/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionCollector.java +++ b/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionCollector.java @@ -527,28 +527,28 @@ public Completion createVariableItem(CompilationInfo info, String varName, int s } @Override - public Completion createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef) { - return createExecutableItem(info, elem, type, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, false, smartType, assignToVarOffset, memberRef); + public Completion createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { + return createExecutableItem(info, elem, type, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, false, smartType, assignToVarOffset, memberRef, insertTextParams); } @Override - public Completion createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef) { - return createExecutableItem(info, elem, type, null, null, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, afterConstructorTypeParams, smartType, assignToVarOffset, memberRef); + public Completion createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { + return createExecutableItem(info, elem, type, null, null, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, afterConstructorTypeParams, smartType, assignToVarOffset, memberRef, insertTextParams); } @Override - public Completion createTypeCastableExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef) { - return createExecutableItem(info, elem, type, null, castType, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, false, smartType, assignToVarOffset, memberRef); + public Completion createTypeCastableExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { + return createExecutableItem(info, elem, type, null, castType, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, false, smartType, assignToVarOffset, memberRef, insertTextParams); } @Override - public Completion createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name) { - return createExecutableItem(info, elem, type, name, null, substitutionOffset, null, false, isDeprecated, false, false, false, false, -1, false); + public Completion createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name, boolean insertTextParams) { + return createExecutableItem(info, elem, type, name, null, substitutionOffset, null, false, isDeprecated, false, false, false, false, -1, false, insertTextParams); } @Override public Completion createOverrideMethodItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean implement) { - Completion item = createExecutableItem(info, elem, type, substitutionOffset, null, false, false, false, false, false, -1, false); + Completion item = createExecutableItem(info, elem, type, substitutionOffset, null, false, false, false, false, false, -1, false, true); CompletionCollector.Builder builder = CompletionCollector.newBuilder(item.getLabel()) .kind(elementKind2CompletionItemKind(elem.getKind())) .labelDetail(String.format("%s - %s", item.getLabelDetail(), implement ? "implement" : "override")) @@ -639,7 +639,7 @@ public Completion createDefaultConstructorItem(TypeElement elem, int substitutio } else { insertText.append("\n{\n$0}"); } - builder.command(new Command("Complete Abstract Methods", "java.complete.abstract.methods")); + builder.command(new Command("Complete Abstract Methods", "nbls.java.complete.abstract.methods")); } catch (IOException ioe) { } builder.insertTextFormat(Completion.TextFormat.Snippet); @@ -1110,7 +1110,7 @@ private Completion createTypeItem(CompilationInfo info, String prefix, ElementHa return builder.build(); } - private Completion createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, String name, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef) { + private Completion createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, String name, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { String simpleName = name != null ? name : (elem.getKind() == ElementKind.METHOD ? elem : elem.getEnclosingElement()).getSimpleName().toString(); Iterator it = elem.getParameters().iterator(); Iterator tIt = type.getParameterTypes().iterator(); @@ -1134,7 +1134,7 @@ private Completion createExecutableItem(CompilationInfo info, ExecutableElement if (tm == null) { break; } - if (!inImport && !memberRef && cnt == 0 && cs.spaceWithinMethodCallParens()) { + if (!inImport && !memberRef && insertTextParams && cnt == 0 && cs.spaceWithinMethodCallParens()) { insertText.append(' '); } cnt++; @@ -1143,14 +1143,19 @@ private Completion createExecutableItem(CompilationInfo info, ExecutableElement labelDetail.append(paramTypeName).append(' ').append(paramName); sortParams.append(paramTypeName); if (!inImport && !memberRef) { - VariableElement inst = instanceOf(tm, paramName); - insertText.append("${").append(cnt).append(":").append(inst != null ? inst.getSimpleName() : paramName).append("}"); asTemplate = true; + if (insertTextParams) { + VariableElement inst = instanceOf(tm, paramName); + insertText.append("${").append(cnt).append(":").append(inst != null ? inst.getSimpleName() : paramName).append("}"); + } else if (cnt == 1) { + // Ensure that the cursor is placed in-between the inserted parentheses i.e. "(|)" + insertText.append("$1"); + } } if (tIt.hasNext()) { labelDetail.append(", "); sortParams.append(','); - if (!inImport && !memberRef) { + if (!inImport && !memberRef && insertTextParams) { if (cs.spaceBeforeComma()) { insertText.append(' '); } @@ -1159,7 +1164,7 @@ private Completion createExecutableItem(CompilationInfo info, ExecutableElement insertText.append(' '); } } - } else if (!inImport && !memberRef && cs.spaceWithinMethodCallParens()) { + } else if (!inImport && !memberRef && insertTextParams && cs.spaceWithinMethodCallParens()) { insertText.append(' '); } } @@ -1182,7 +1187,7 @@ private Completion createExecutableItem(CompilationInfo info, ExecutableElement } else { insertText.append("\n{\n$0}"); } - command = new Command("Complete Abstract Methods", "java.complete.abstract.methods"); + command = new Command("Complete Abstract Methods", "nbls.java.complete.abstract.methods"); asTemplate = true; } else if (asTemplate) { insertText.append("$0"); @@ -1231,6 +1236,12 @@ private Completion createExecutableItem(CompilationInfo info, ExecutableElement if (isDeprecated) { builder.addTag(Completion.Tag.Deprecated); } + if (command == null && !insertTextParams && cnt > 0) { + command = new Command("Show Signature Help", "editor.action.triggerParameterHints"); + } + if (command != null) { + builder.command(command); + } return builder.build(); } diff --git a/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionItem.java b/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionItem.java index 859e9c3b92cc..206290be7d62 100644 --- a/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionItem.java +++ b/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionItem.java @@ -189,20 +189,20 @@ public static JavaCompletionItem createVariableItem(CompilationInfo info, String return new VariableItem(info, null, varName, substitutionOffset, newVarName, smartType, -1); } - public static JavaCompletionItem createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef, WhiteListQuery.WhiteList whiteList) { + public static JavaCompletionItem createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef, boolean substituteTextParams, WhiteListQuery.WhiteList whiteList) { switch (elem.getKind()) { case METHOD: - return new MethodItem(info, elem, type, castType, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, smartType, assignToVarOffset, memberRef, whiteList); + return new MethodItem(info, elem, type, castType, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, smartType, assignToVarOffset, memberRef, substituteTextParams, whiteList); case CONSTRUCTOR: - return new ConstructorItem(info, elem, type, substitutionOffset, isDeprecated, afterConstructorTypeParams, smartType, null, whiteList); + return new ConstructorItem(info, elem, type, substitutionOffset, isDeprecated, afterConstructorTypeParams, smartType, null, substituteTextParams, whiteList); default: throw new IllegalArgumentException("kind=" + elem.getKind()); } } - public static JavaCompletionItem createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name, WhiteListQuery.WhiteList whiteList) { + public static JavaCompletionItem createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name, boolean substituteTextParams, WhiteListQuery.WhiteList whiteList) { if (elem.getKind() == ElementKind.CONSTRUCTOR) { - return new ConstructorItem(info, elem, type, substitutionOffset, isDeprecated, false, false, name, whiteList); + return new ConstructorItem(info, elem, type, substitutionOffset, isDeprecated, false, false, name, substituteTextParams, whiteList); } throw new IllegalArgumentException("kind=" + elem.getKind()); } @@ -1838,8 +1838,9 @@ static class MethodItem extends WhiteListJavaCompletionItem { private CharSequence castText; private int startOffset; private CharSequence assignToVarText; + private final boolean substituteTextParams; - private MethodItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, WhiteListQuery.WhiteList whiteList) { + private MethodItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, boolean substituteTextParams, WhiteListQuery.WhiteList whiteList) { super(substitutionOffset, ElementHandle.create(elem), whiteList); Color c = LFCustoms.getTextFgColor(); this.isInherited = isInherited; @@ -1885,6 +1886,7 @@ private MethodItem(CompilationInfo info, ExecutableElement elem, ExecutableType } else { this.castEndOffset = -1; } + this.substituteTextParams = !memberRef && substituteTextParams; } @Override @@ -2067,7 +2069,8 @@ protected CharSequence substituteText(final JTextComponent c, final int offset, sb.append(' '); //NOI18N } sb.append('('); //NOI18N - if (params.isEmpty()) { + if (params.isEmpty() || !substituteTextParams) { + // Ensure that the cursor is placed in-between the inserted parentheses i.e. "(|)" sb.append("${cursor}"); //NOI18N } else { boolean guessArgs = Utilities.guessMethodArguments(); @@ -2179,7 +2182,7 @@ static class OverrideMethodItem extends MethodItem { private String leftText; private OverrideMethodItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean implement, WhiteListQuery.WhiteList whiteList) { - super(info, elem, type, null, substitutionOffset, null, false, false, false, false, false, -1, false, whiteList); + super(info, elem, type, null, substitutionOffset, null, false, false, false, false, false, -1, false, true, whiteList); CodeStyle cs = null; try { cs = CodeStyle.getDefault(info.getDocument()); @@ -2495,8 +2498,9 @@ static class ConstructorItem extends WhiteListJavaCompletionItem it = params.iterator(); it.hasNext();) { - ParamDesc paramDesc = it.next(); - sb.append("${"); //NOI18N - sb.append(paramDesc.name); - if (guessArgs) { - sb.append(" named instanceof=\""); //NOI18N - sb.append(paramDesc.fullTypeName); - sb.append("\""); //NOI18N - } - sb.append("}"); //NOI18N - if (it.hasNext()) { - sb.append(", "); //NOI18N + if (substituteTextParams) { + boolean guessArgs = Utilities.guessMethodArguments(); + for (Iterator it = params.iterator(); it.hasNext(); ) { + ParamDesc paramDesc = it.next(); + sb.append("${"); //NOI18N + sb.append(paramDesc.name); + if (guessArgs) { + sb.append(" named instanceof=\""); //NOI18N + sb.append(paramDesc.fullTypeName); + sb.append("\""); //NOI18N + } + sb.append("}"); //NOI18N + if (it.hasNext()) { + sb.append(", "); //NOI18N + } } + } else { + // Ensure that the cursor is placed in-between the inserted parentheses i.e. "(|)" + sb.append("${cursor}"); //NOI18N } c.select(startPos.getOffset() + (insertName ? text.length() : 0) + toAddText.indexOf('(') + 1, endPos.getOffset()); sb.append(c.getSelectedText()); diff --git a/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionItemFactory.java b/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionItemFactory.java index 3078d30455a7..ccecf14c9e4a 100644 --- a/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionItemFactory.java +++ b/java/java.editor/src/org/netbeans/modules/editor/java/JavaCompletionItemFactory.java @@ -108,23 +108,23 @@ public JavaCompletionItem createVariableItem(CompilationInfo info, String varNam } @Override - public JavaCompletionItem createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef) { - return createExecutableItem(info, elem, type, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, false, smartType, assignToVarOffset, memberRef); + public JavaCompletionItem createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { + return createExecutableItem(info, elem, type, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, false, smartType, assignToVarOffset, memberRef, insertTextParams); } @Override - public JavaCompletionItem createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef) { - return JavaCompletionItem.createExecutableItem(info, elem, type, null, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, afterConstructorTypeParams, smartType, assignToVarOffset, memberRef, whiteList); + public JavaCompletionItem createExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean afterConstructorTypeParams, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { + return JavaCompletionItem.createExecutableItem(info, elem, type, null, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, afterConstructorTypeParams, smartType, assignToVarOffset, memberRef, insertTextParams, whiteList); } @Override - public JavaCompletionItem createTypeCastableExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef) { - return JavaCompletionItem.createExecutableItem(info, elem, type, castType, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, false, smartType, assignToVarOffset, memberRef, whiteList); + public JavaCompletionItem createTypeCastableExecutableItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, TypeMirror castType, int substitutionOffset, ReferencesCount referencesCount, boolean isInherited, boolean isDeprecated, boolean inImport, boolean addSemicolon, boolean smartType, int assignToVarOffset, boolean memberRef, boolean insertTextParams) { + return JavaCompletionItem.createExecutableItem(info, elem, type, castType, substitutionOffset, referencesCount, isInherited, isDeprecated, inImport, addSemicolon, false, smartType, assignToVarOffset, memberRef, insertTextParams, whiteList); } @Override - public JavaCompletionItem createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name) { - return JavaCompletionItem.createThisOrSuperConstructorItem(info, elem, type, substitutionOffset, isDeprecated, name, whiteList); + public JavaCompletionItem createThisOrSuperConstructorItem(CompilationInfo info, ExecutableElement elem, ExecutableType type, int substitutionOffset, boolean isDeprecated, String name, boolean insertTextParams) { + return JavaCompletionItem.createThisOrSuperConstructorItem(info, elem, type, substitutionOffset, isDeprecated, name, insertTextParams, whiteList); } @Override diff --git a/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionItem.java b/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionItem.java index 9f35779388b7..c03e6eca7d8f 100644 --- a/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionItem.java +++ b/java/java.editor/src/org/netbeans/modules/java/editor/javadoc/JavadocCompletionItem.java @@ -212,7 +212,7 @@ public CompletionItem createNameItem(String name, int startOffset) { @Override public CompletionItem createJavadocExecutableItem(CompilationInfo info, ExecutableElement e, ExecutableType et, int startOffset, boolean isInherited, boolean isDeprecated) { CompletionItem delegate = JavaCompletionItem.createExecutableItem( - info, e, et, null, startOffset, null, isInherited, isDeprecated, false, false, false, false, -1, false, null); + info, e, et, null, startOffset, null, isInherited, isDeprecated, false, false, false, false, -1, false, true, null); return new JavadocExecutableItem(delegate, e, startOffset); } diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java index 93de647abc5e..a417cf6ca2c0 100644 --- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java +++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java @@ -307,6 +307,8 @@ public class TextDocumentServiceImpl implements TextDocumentService, LanguageCli private static final String NETBEANS_COMPLETION_WARNING_TIME = "completion.warning.time";// NOI18N private static final String NETBEANS_JAVA_ON_SAVE_ORGANIZE_IMPORTS = "java.onSave.organizeImports";// NOI18N private static final String NETBEANS_CODE_COMPLETION_COMMIT_CHARS = "java.completion.commit.chars";// NOI18N + private static final String CLIENT_JAVA_COMPLETION_DISABLE_INSERT_METHOD_PARAMS = "java.completion.disable.insertMethodParameters";// NOI18N + private static final String NETBEANS_JAVA_COMPLETION_INSERT_TEXT_PARAMS = "completion-insert-text-parameters";// NOI18N private static final String URL = "url";// NOI18N private static final String INDEX = "index";// NOI18N @@ -422,7 +424,7 @@ public CompletableFuture, CompletionList>> completio return CompletableFuture.completedFuture(Either.forRight(completionList)); } StyledDocument doc = (StyledDocument)rawDoc; - List configValues = List.of(NETBEANS_JAVADOC_LOAD_TIMEOUT, NETBEANS_COMPLETION_WARNING_TIME, NETBEANS_CODE_COMPLETION_COMMIT_CHARS); + List configValues = List.of(NETBEANS_JAVADOC_LOAD_TIMEOUT, NETBEANS_COMPLETION_WARNING_TIME, NETBEANS_CODE_COMPLETION_COMMIT_CHARS, CLIENT_JAVA_COMPLETION_DISABLE_INSERT_METHOD_PARAMS); return client.getClientConfigurationManager().getConfigurations(configValues, uri).thenApply(c -> { if (c != null && !c.isEmpty()) { if (c.get(0).isJsonPrimitive()) { @@ -439,6 +441,14 @@ public CompletableFuture, CompletionList>> completio JsonArray commitCharsJsonArray = (JsonArray) c.get(2); codeCompletionCommitChars.set(commitCharsJsonArray.asList().stream().map(ch -> ch.toString()).collect(Collectors.toList())); } + if (c.size() >= 4 && c.get(3) instanceof JsonPrimitive) { + boolean extDisabledSetting = ((JsonPrimitive) c.get(3)).getAsBoolean(); + Preferences langPreferences = MimeLookup.getLookup(JavaTokenId.language().mimeType()).lookup(Preferences.class); + boolean insertTextParams = langPreferences == null || langPreferences.getBoolean(NETBEANS_JAVA_COMPLETION_INSERT_TEXT_PARAMS, true); + if (langPreferences != null && extDisabledSetting == insertTextParams) { + langPreferences.putBoolean(NETBEANS_JAVA_COMPLETION_INSERT_TEXT_PARAMS, !extDisabledSetting); + } + } } final int caret = Utils.getOffset(doc, params.getPosition()); List items = new ArrayList<>(); @@ -446,7 +456,7 @@ public CompletableFuture, CompletionList>> completio ? new Completion.Context(Completion.TriggerKind.valueOf(params.getContext().getTriggerKind().name()), params.getContext().getTriggerCharacter() == null || params.getContext().getTriggerCharacter().isEmpty() ? null : params.getContext().getTriggerCharacter().charAt(0)) : null; - Preferences prefs = CodeStylePreferences.get(doc, "text/x-java").getPreferences(); + Preferences prefs = CodeStylePreferences.get(doc, JavaTokenId.language().mimeType()).getPreferences(); String point = prefs.get("classMemberInsertionPoint", null); try { prefs.put("classMemberInsertionPoint", CodeStyle.InsertionPoint.CARET_LOCATION.name());