This is an automated email from the ASF dual-hosted git repository.

junichi11 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 24ba6df45f Fix the named argument code completion for constructors
     new d81235cc25 Merge pull request #6911 from 
junichi11/php-named-argument-cc-for-constructor
24ba6df45f is described below

commit 24ba6df45f395f1cbec9459526befa6f48345de9
Author: Junichi Yamamoto <junich...@apache.org>
AuthorDate: Wed Jan 3 16:33:13 2024 +0900

    Fix the named argument code completion for constructors
    
    - Show argument names in consturctors
    - Don't add `:` if an existing name has `:` (an improvement)
    
    e.g. ^maxLength: (^: caret)
    We are unsure whether a user expects to add or override an item in this 
context.
    So, just add a name. (i.e. don't add ":")
    This behavior is useful when the consuming completion(<kbd>Ctrl</kbd> + 
<kbd>Enter</kbd>) is used.
    
    - Add unit tests
---
 .../editor/completion/CompletionContextFinder.java |  4 +-
 .../php/editor/completion/PHPCodeCompletion.java   | 79 ++++++++++++------
 .../php/editor/completion/PHPCompletionItem.java   | 37 ++++++++-
 .../namedArgumentsConstructor01.php                | 25 ++++++
 ....php.testNamedArgumentsConstructor01.completion | 92 +++++++++++++++++++++
 .../namedArgumentsConstructor02.php                | 26 ++++++
 ...hp.testNamedArgumentsConstructor02_a.completion |  6 ++
 ...hp.testNamedArgumentsConstructor02_b.completion | 92 +++++++++++++++++++++
 .../namedArgumentsConstructor03.php                | 25 ++++++
 ....php.testNamedArgumentsConstructor03.completion | 92 +++++++++++++++++++++
 .../namedArgumentsConstructor04.php                | 25 ++++++
 ....php.testNamedArgumentsConstructor04.completion |  6 ++
 .../namedArgumentsConstructor05.php                | 26 ++++++
 ...edArgumentsConstructor05_Template01.cccustomtpl |  2 +
 ...edArgumentsConstructor05_Template02.cccustomtpl |  2 +
 ...hp.testNamedArgumentsConstructor05_a.completion | 92 +++++++++++++++++++++
 ...hp.testNamedArgumentsConstructor05_b.completion | 92 +++++++++++++++++++++
 ...hp.testNamedArgumentsConstructor05_c.completion |  6 ++
 .../namedArgumentsConstructor06.php                | 33 ++++++++
 ....php.testNamedArgumentsConstructor06.completion | 96 ++++++++++++++++++++++
 .../editor/completion/PHP80CodeCompletionTest.java | 46 +++++++++++
 .../completion/PHPCodeCompletionTestBase.java      | 13 +++
 22 files changed, 888 insertions(+), 29 deletions(-)

diff --git 
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/CompletionContextFinder.java
 
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/CompletionContextFinder.java
index 8babca1a2d..81c2724532 100644
--- 
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/CompletionContextFinder.java
+++ 
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/CompletionContextFinder.java
@@ -235,7 +235,7 @@ final class CompletionContextFinder {
         HTML, CLASS_NAME, INTERFACE_NAME, BACKING_TYPE,
         TYPE_NAME, RETURN_TYPE_NAME, RETURN_UNION_OR_INTERSECTION_TYPE_NAME, 
FIELD_TYPE_NAME, CONST_TYPE_NAME, VISIBILITY_MODIFIER_OR_TYPE_NAME, STRING,
         CLASS_MEMBER, STATIC_CLASS_MEMBER, PHPDOC, INHERITANCE, EXTENDS, 
IMPLEMENTS, METHOD_NAME,
-        CLASS_MEMBER_PARAMETER_NAME, STATIC_CLASS_MEMBER_PARAMETER_NAME, 
FUNCTION_PARAMETER_NAME,
+        CLASS_MEMBER_PARAMETER_NAME, STATIC_CLASS_MEMBER_PARAMETER_NAME, 
FUNCTION_PARAMETER_NAME, CONSTRUCTOR_PARAMETER_NAME,
         CLASS_CONTEXT_KEYWORDS, SERVER_ENTRY_CONSTANTS, NONE, NEW_CLASS, 
GLOBAL, NAMESPACE_KEYWORD,
         GROUP_USE_KEYWORD, GROUP_USE_CONST_KEYWORD, GROUP_USE_FUNCTION_KEYWORD,
         USE_KEYWORD, USE_CONST_KEYWORD, USE_FUNCTION_KEYWORD, 
DEFAULT_PARAMETER_VALUE, OPEN_TAG, THROW, THROW_NEW, CATCH, 
CLASS_MEMBER_IN_STRING,
@@ -1608,6 +1608,8 @@ final class CompletionContextFinder {
                 retval = CompletionContext.CLASS_MEMBER_PARAMETER_NAME;
             } else if (acceptTokenChains(ts, STATIC_CLASS_MEMBER_TOKENCHAINS, 
true)) {
                 retval = CompletionContext.STATIC_CLASS_MEMBER_PARAMETER_NAME;
+            } else if (acceptTokenChains(ts, CLASS_NAME_TOKENCHAINS, true)) {
+                retval = CompletionContext.CONSTRUCTOR_PARAMETER_NAME;
             } else {
                 retval = CompletionContext.FUNCTION_PARAMETER_NAME;
             }
diff --git 
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java
 
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java
index cc1039a784..4df5313c8a 100644
--- 
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java
+++ 
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletion.java
@@ -57,6 +57,7 @@ import org.netbeans.modules.csl.spi.support.CancelSupport;
 import org.netbeans.modules.parsing.spi.indexing.support.QuerySupport;
 import org.netbeans.modules.parsing.spi.indexing.support.QuerySupport.Kind;
 import org.netbeans.modules.php.api.PhpVersion;
+import org.netbeans.modules.php.api.util.StringUtils;
 import org.netbeans.modules.php.editor.CodeUtils;
 import org.netbeans.modules.php.editor.NavUtils;
 import org.netbeans.modules.php.editor.PredefinedSymbols;
@@ -432,6 +433,10 @@ public class PHPCodeCompletion implements 
CodeCompletionHandler2 {
             case EXPRESSION:
                 autoCompleteExpression(completionResult, request);
                 break;
+            case CONSTRUCTOR_PARAMETER_NAME:
+                autoCompleteExpression(completionResult, request);
+                autoCompleteConstructorParameterName(completionResult, 
request);
+                break;
             case CLASS_MEMBER_PARAMETER_NAME:
                 autoCompleteExpression(completionResult, request);
                 autoCompleteClassMethodParameterName(completionResult, 
request, false);
@@ -1604,6 +1609,32 @@ public class PHPCodeCompletion implements 
CodeCompletionHandler2 {
         }
     }
 
+    private void autoCompleteConstructorParameterName(final 
PHPCompletionResult completionResult, final PHPCompletionItem.CompletionRequest 
request) {
+        if (CancelSupport.getDefault().isCancelled()) {
+            return;
+        }
+        TokenHierarchy<?> th = request.info.getSnapshot().getTokenHierarchy();
+        TokenSequence<PHPTokenId> tokenSequence = 
LexUtilities.getPHPTokenSequence(th, request.anchor);
+        if (tokenSequence == null) {
+            return;
+        }
+        Token<? extends PHPTokenId> constructorTypeName = 
CompletionContextFinder.findFunctionInvocationName(tokenSequence, 
request.anchor);
+        if (constructorTypeName != null) {
+            Model model = request.result.getModel();
+            NamespaceScope namespaceScope = 
ModelUtils.getNamespaceScope(model.getFileScope(), request.anchor);
+            String fqTypeName = 
VariousUtils.qualifyTypeNames(constructorTypeName.text().toString(), 
request.anchor, namespaceScope);
+            Set<AliasedName> aliasedNames = ModelUtils.getAliasedNames(model, 
request.anchor);
+            Set<MethodElement> constructors = 
request.index.getConstructors(NameKind.exact(fqTypeName), aliasedNames, 
Trait.ALIAS);
+            Set<String> duplicateCheck = new HashSet<>();
+            for (MethodElement constructor : constructors) {
+                if (CancelSupport.getDefault().isCancelled()) {
+                    return;
+                }
+                addParameterNameItems(completionResult, request, 
constructor.getParameters(), duplicateCheck);
+            }
+        }
+    }
+
     private void autoCompleteClassMethodParameterName(
             final PHPCompletionResult completionResult,
             PHPCompletionItem.CompletionRequest request,
@@ -1685,6 +1716,7 @@ public class PHPCodeCompletion implements 
CodeCompletionHandler2 {
                             
accessibleTypeMembers.addAll(request.index.getAccessibleMixinTypeMembers(typeScope,
 enclosingType));
                         }
                     }
+                    Set<String> duplicateCheck = new HashSet<>();
                     for (final PhpElement phpElement : accessibleTypeMembers) {
                         if (CancelSupport.getDefault().isCancelled()) {
                             return;
@@ -1692,19 +1724,7 @@ public class PHPCodeCompletion implements 
CodeCompletionHandler2 {
                         if (duplicateElementCheck.add(phpElement)) {
                             if (methodsFilter.isAccepted(phpElement)) {
                                 MethodElement method = (MethodElement) 
phpElement;
-                                for (ParameterElement parameter : 
method.getParameters()) {
-                                    if 
(CancelSupport.getDefault().isCancelled()) {
-                                        return;
-                                    }
-                                    String name = parameter.getName();
-                                    if (name != null) {
-                                        name = name.substring(1);
-                                    }
-                                    if (name != null
-                                            && 
name.startsWith(request.prefix)) {
-                                        completionResult.add(new 
PHPCompletionItem.ParameterNameItem(parameter, request));
-                                    }
-                                }
+                                addParameterNameItems(completionResult, 
request, method.getParameters(), duplicateCheck);
                             }
                         }
                     }
@@ -1739,25 +1759,30 @@ public class PHPCodeCompletion implements 
CodeCompletionHandler2 {
                     if (functionElement.isAnonymous()) {
                         continue;
                     }
-                    for (ParameterElement parameter : 
functionElement.getParameters()) {
-                        if (CancelSupport.getDefault().isCancelled()) {
-                            return;
-                        }
-                        String name = parameter.getName();
-                        if (name != null) {
-                            name = name.substring(1);
-                        }
-                        if (name != null
-                                && name.startsWith(request.prefix)
-                                && duplicateCheck.add(name)) {
-                            completionResult.add(new 
PHPCompletionItem.ParameterNameItem(parameter, request));
-                        }
-                    }
+                    addParameterNameItems(completionResult, request, 
functionElement.getParameters(), duplicateCheck);
                 }
             }
         }
     }
 
+    private void addParameterNameItems(final PHPCompletionResult 
completionResult, final PHPCompletionItem.CompletionRequest request,
+            List<ParameterElement> parameters, Set<String> duplicateCheck) {
+        for (ParameterElement parameter : parameters) {
+            if (CancelSupport.getDefault().isCancelled()) {
+                return;
+            }
+            String name = parameter.getName();
+            if (!StringUtils.isEmpty(name)) {
+                name = name.substring(1);
+            }
+            if (!StringUtils.isEmpty(name)
+                    && name.startsWith(request.prefix)
+                    && duplicateCheck.add(name)) {
+                completionResult.add(new 
PHPCompletionItem.ParameterNameItem(parameter, request));
+            }
+        }
+    }
+
     private void autoCompleteClassConstants(final PHPCompletionResult 
completionResult, final PHPCompletionItem.CompletionRequest request) {
         // NETBANS-1855
         // complete access prefix i.e. add "self::" to the top of constant 
names
diff --git 
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java
 
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java
index 48eec495b1..89c5bd2737 100644
--- 
a/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java
+++ 
b/php/php.editor/src/org/netbeans/modules/php/editor/completion/PHPCompletionItem.java
@@ -408,6 +408,31 @@ public abstract class PHPCompletionItem implements 
CompletionProposal {
         return null;
     }
 
+    public static boolean insertOnlyParameterName(CompletionRequest request) {
+        boolean result = false;
+        TokenHierarchy<?> tokenHierarchy = 
request.result.getSnapshot().getTokenHierarchy();
+        TokenSequence<PHPTokenId> tokenSequence = (TokenSequence<PHPTokenId>) 
tokenHierarchy.tokenSequence();
+        if (tokenSequence != null) {
+            tokenSequence.move(request.anchor);
+            // na^me: -> only parameter name
+            // n^ age: -> add also ":"
+            while (tokenSequence.moveNext()) {
+                Token<PHPTokenId> token = tokenSequence.token();
+                PHPTokenId id = token.id();
+                if (id == PHPTokenId.PHP_STRING) {
+                    continue;
+                }
+                if (id == PHPTokenId.PHP_TOKEN
+                        && TokenUtilities.textEquals(token.text(), ":")) { // 
NOI18N
+                    result = true;
+                    break;
+                }
+                break;
+            }
+        }
+        return result;
+    }
+
     public static boolean insertOnlyMethodsName(CompletionRequest request) {
         if (request.insertOnlyMethodsName != null) {
             return request.insertOnlyMethodsName;
@@ -2048,7 +2073,11 @@ public abstract class PHPCompletionItem implements 
CompletionProposal {
 
         @Override
         public String getName() {
-            return parameterElement.getName().substring(1) + ":"; // NOI18N
+            return getParameterName() + ":"; // NOI18N
+        }
+
+        private String getParameterName() {
+            return parameterElement.getName().substring(1);
         }
 
         @Override
@@ -2091,6 +2120,12 @@ public abstract class PHPCompletionItem implements 
CompletionProposal {
 
         @Override
         public String getCustomInsertTemplate() {
+            if (insertOnlyParameterName(request)) {
+                // ^maxLength: (^: caret)
+                // we are unsure whether a user expects to add or override an 
item in this context
+                // so, just add a name (i.e. don't add ":")
+                return getParameterName();
+            }
             return getName() + " "; // NOI18N
         }
     }
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php
new file mode 100644
index 0000000000..c560e0cb5e
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+    public function __construct(int $param1, int|array|null $array, $default = 
"default") {
+    }
+}
+
+$instance = new NamedArguments();
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php.testNamedArgumentsConstructor01.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php.testNamedArgumentsConstructor01.completion
new file mode 100644
index 0000000000..278fd6b214
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor01/namedArgumentsConstructor01.php.testNamedArgumentsConstructor01.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(|);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS      NamedArguments                  [PUBLIC]   
namedArgumentsConstructor01.php
+VARIABLE   NamedArguments $instance        [PUBLIC]   
namedArgumentsConstructor01.php
+PARAMETER  array:                                     Parameter Name
+PARAMETER  default:                                   Parameter Name
+PARAMETER  param1:                                    Parameter Name
+------------------------------------
+VARIABLE   $GLOBALS                                   PHP Platform
+VARIABLE   $HTTP_RAW_POST_DATA                        PHP Platform
+VARIABLE   $_COOKIE                                   PHP Platform
+VARIABLE   $_ENV                                      PHP Platform
+VARIABLE   $_FILES                                    PHP Platform
+VARIABLE   $_GET                                      PHP Platform
+VARIABLE   $_POST                                     PHP Platform
+VARIABLE   $_REQUEST                                  PHP Platform
+VARIABLE   $_SERVER                                   PHP Platform
+VARIABLE   $_SESSION                                  PHP Platform
+VARIABLE   $argc                                      PHP Platform
+VARIABLE   $argv                                      PHP Platform
+VARIABLE   $http_response_header                      PHP Platform
+VARIABLE   $php_errormsg                              PHP Platform
+KEYWORD    abstract                                   null
+KEYWORD    and                                        null
+KEYWORD    array                                      null
+KEYWORD    as                                         null
+KEYWORD    break                                      null
+KEYWORD    case                                       null
+KEYWORD    catch                                      null
+KEYWORD    class                                      null
+KEYWORD    clone                                      null
+KEYWORD    const                                      null
+KEYWORD    continue                                   null
+KEYWORD    declare                                    null
+KEYWORD    default                                    null
+KEYWORD    die()                                      Language Construct
+KEYWORD    do                                         null
+KEYWORD    echo '';                                   Language Construct
+KEYWORD    else                                       null
+KEYWORD    elseif                                     null
+KEYWORD    empty()                                    Language Construct
+KEYWORD    enddeclare                                 null
+KEYWORD    endfor                                     null
+KEYWORD    endforeach                                 null
+KEYWORD    endif                                      null
+KEYWORD    endswitch                                  null
+KEYWORD    endwhile                                   null
+KEYWORD    enum                                       null
+KEYWORD    eval()                                     Language Construct
+KEYWORD    exit()                                     Language Construct
+KEYWORD    extends                                    null
+KEYWORD    final                                      null
+KEYWORD    finally                                    null
+KEYWORD    fn                                         null
+KEYWORD    for                                        null
+KEYWORD    foreach                                    null
+KEYWORD    function                                   null
+KEYWORD    global                                     null
+KEYWORD    goto                                       null
+KEYWORD    if                                         null
+KEYWORD    implements                                 null
+KEYWORD    include '';                                Language Construct
+KEYWORD    include_once '';                           Language Construct
+KEYWORD    instanceof                                 null
+KEYWORD    interface                                  null
+KEYWORD    isset()                                    Language Construct
+KEYWORD    list()                                     Language Construct
+KEYWORD    match                                      null
+KEYWORD    namespace                                  null
+KEYWORD    new                                        null
+KEYWORD    or                                         null
+KEYWORD    print '';                                  Language Construct
+KEYWORD    private                                    null
+KEYWORD    protected                                  null
+KEYWORD    public                                     null
+KEYWORD    readonly                                   null
+KEYWORD    require '';                                Language Construct
+KEYWORD    require_once '';                           Language Construct
+KEYWORD    return ;                                   Language Construct
+KEYWORD    static                                     null
+KEYWORD    switch                                     null
+KEYWORD    throw                                      null
+KEYWORD    trait                                      null
+KEYWORD    try                                        null
+KEYWORD    unset()                                    Language Construct
+KEYWORD    use                                        null
+KEYWORD    var                                        null
+KEYWORD    while                                      null
+KEYWORD    xor                                        null
+KEYWORD    yield                                      null
+KEYWORD    yield from                                 null
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php
new file mode 100644
index 0000000000..1934835bd6
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+    public function __construct(int $param1, int|array|null $array, $default = 
"default") {
+    }
+}
+
+$instance = new NamedArguments(arr);
+$instance = new NamedArguments()
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_a.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_a.completion
new file mode 100644
index 0000000000..b541a3919c
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_a.completion
@@ -0,0 +1,6 @@
+Code completion result for source line:
+$instance = new NamedArguments(arr|);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+PARAMETER  array:                                     Parameter Name
+------------------------------------
+KEYWORD    array                                      null
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_b.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_b.completion
new file mode 100644
index 0000000000..e0c23761e7
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor02/namedArgumentsConstructor02.php.testNamedArgumentsConstructor02_b.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(|)
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS      NamedArguments                  [PUBLIC]   
namedArgumentsConstructor02.php
+VARIABLE   NamedArguments $instance        [PUBLIC]   
namedArgumentsConstructor02.php
+PARAMETER  array:                                     Parameter Name
+PARAMETER  default:                                   Parameter Name
+PARAMETER  param1:                                    Parameter Name
+------------------------------------
+VARIABLE   $GLOBALS                                   PHP Platform
+VARIABLE   $HTTP_RAW_POST_DATA                        PHP Platform
+VARIABLE   $_COOKIE                                   PHP Platform
+VARIABLE   $_ENV                                      PHP Platform
+VARIABLE   $_FILES                                    PHP Platform
+VARIABLE   $_GET                                      PHP Platform
+VARIABLE   $_POST                                     PHP Platform
+VARIABLE   $_REQUEST                                  PHP Platform
+VARIABLE   $_SERVER                                   PHP Platform
+VARIABLE   $_SESSION                                  PHP Platform
+VARIABLE   $argc                                      PHP Platform
+VARIABLE   $argv                                      PHP Platform
+VARIABLE   $http_response_header                      PHP Platform
+VARIABLE   $php_errormsg                              PHP Platform
+KEYWORD    abstract                                   null
+KEYWORD    and                                        null
+KEYWORD    array                                      null
+KEYWORD    as                                         null
+KEYWORD    break                                      null
+KEYWORD    case                                       null
+KEYWORD    catch                                      null
+KEYWORD    class                                      null
+KEYWORD    clone                                      null
+KEYWORD    const                                      null
+KEYWORD    continue                                   null
+KEYWORD    declare                                    null
+KEYWORD    default                                    null
+KEYWORD    die()                                      Language Construct
+KEYWORD    do                                         null
+KEYWORD    echo '';                                   Language Construct
+KEYWORD    else                                       null
+KEYWORD    elseif                                     null
+KEYWORD    empty()                                    Language Construct
+KEYWORD    enddeclare                                 null
+KEYWORD    endfor                                     null
+KEYWORD    endforeach                                 null
+KEYWORD    endif                                      null
+KEYWORD    endswitch                                  null
+KEYWORD    endwhile                                   null
+KEYWORD    enum                                       null
+KEYWORD    eval()                                     Language Construct
+KEYWORD    exit()                                     Language Construct
+KEYWORD    extends                                    null
+KEYWORD    final                                      null
+KEYWORD    finally                                    null
+KEYWORD    fn                                         null
+KEYWORD    for                                        null
+KEYWORD    foreach                                    null
+KEYWORD    function                                   null
+KEYWORD    global                                     null
+KEYWORD    goto                                       null
+KEYWORD    if                                         null
+KEYWORD    implements                                 null
+KEYWORD    include '';                                Language Construct
+KEYWORD    include_once '';                           Language Construct
+KEYWORD    instanceof                                 null
+KEYWORD    interface                                  null
+KEYWORD    isset()                                    Language Construct
+KEYWORD    list()                                     Language Construct
+KEYWORD    match                                      null
+KEYWORD    namespace                                  null
+KEYWORD    new                                        null
+KEYWORD    or                                         null
+KEYWORD    print '';                                  Language Construct
+KEYWORD    private                                    null
+KEYWORD    protected                                  null
+KEYWORD    public                                     null
+KEYWORD    readonly                                   null
+KEYWORD    require '';                                Language Construct
+KEYWORD    require_once '';                           Language Construct
+KEYWORD    return ;                                   Language Construct
+KEYWORD    static                                     null
+KEYWORD    switch                                     null
+KEYWORD    throw                                      null
+KEYWORD    trait                                      null
+KEYWORD    try                                        null
+KEYWORD    unset()                                    Language Construct
+KEYWORD    use                                        null
+KEYWORD    var                                        null
+KEYWORD    while                                      null
+KEYWORD    xor                                        null
+KEYWORD    yield                                      null
+KEYWORD    yield from                                 null
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php
new file mode 100644
index 0000000000..4e8fa0c991
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+    public function __construct(int $param1, int|array|null $array, $default = 
"default") {
+    }
+}
+
+$instance = new NamedArguments(1, );
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php.testNamedArgumentsConstructor03.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php.testNamedArgumentsConstructor03.completion
new file mode 100644
index 0000000000..5fdd60d3d7
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor03/namedArgumentsConstructor03.php.testNamedArgumentsConstructor03.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(1, |);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS      NamedArguments                  [PUBLIC]   
namedArgumentsConstructor03.php
+VARIABLE   NamedArguments $instance        [PUBLIC]   
namedArgumentsConstructor03.php
+PARAMETER  array:                                     Parameter Name
+PARAMETER  default:                                   Parameter Name
+PARAMETER  param1:                                    Parameter Name
+------------------------------------
+VARIABLE   $GLOBALS                                   PHP Platform
+VARIABLE   $HTTP_RAW_POST_DATA                        PHP Platform
+VARIABLE   $_COOKIE                                   PHP Platform
+VARIABLE   $_ENV                                      PHP Platform
+VARIABLE   $_FILES                                    PHP Platform
+VARIABLE   $_GET                                      PHP Platform
+VARIABLE   $_POST                                     PHP Platform
+VARIABLE   $_REQUEST                                  PHP Platform
+VARIABLE   $_SERVER                                   PHP Platform
+VARIABLE   $_SESSION                                  PHP Platform
+VARIABLE   $argc                                      PHP Platform
+VARIABLE   $argv                                      PHP Platform
+VARIABLE   $http_response_header                      PHP Platform
+VARIABLE   $php_errormsg                              PHP Platform
+KEYWORD    abstract                                   null
+KEYWORD    and                                        null
+KEYWORD    array                                      null
+KEYWORD    as                                         null
+KEYWORD    break                                      null
+KEYWORD    case                                       null
+KEYWORD    catch                                      null
+KEYWORD    class                                      null
+KEYWORD    clone                                      null
+KEYWORD    const                                      null
+KEYWORD    continue                                   null
+KEYWORD    declare                                    null
+KEYWORD    default                                    null
+KEYWORD    die()                                      Language Construct
+KEYWORD    do                                         null
+KEYWORD    echo '';                                   Language Construct
+KEYWORD    else                                       null
+KEYWORD    elseif                                     null
+KEYWORD    empty()                                    Language Construct
+KEYWORD    enddeclare                                 null
+KEYWORD    endfor                                     null
+KEYWORD    endforeach                                 null
+KEYWORD    endif                                      null
+KEYWORD    endswitch                                  null
+KEYWORD    endwhile                                   null
+KEYWORD    enum                                       null
+KEYWORD    eval()                                     Language Construct
+KEYWORD    exit()                                     Language Construct
+KEYWORD    extends                                    null
+KEYWORD    final                                      null
+KEYWORD    finally                                    null
+KEYWORD    fn                                         null
+KEYWORD    for                                        null
+KEYWORD    foreach                                    null
+KEYWORD    function                                   null
+KEYWORD    global                                     null
+KEYWORD    goto                                       null
+KEYWORD    if                                         null
+KEYWORD    implements                                 null
+KEYWORD    include '';                                Language Construct
+KEYWORD    include_once '';                           Language Construct
+KEYWORD    instanceof                                 null
+KEYWORD    interface                                  null
+KEYWORD    isset()                                    Language Construct
+KEYWORD    list()                                     Language Construct
+KEYWORD    match                                      null
+KEYWORD    namespace                                  null
+KEYWORD    new                                        null
+KEYWORD    or                                         null
+KEYWORD    print '';                                  Language Construct
+KEYWORD    private                                    null
+KEYWORD    protected                                  null
+KEYWORD    public                                     null
+KEYWORD    readonly                                   null
+KEYWORD    require '';                                Language Construct
+KEYWORD    require_once '';                           Language Construct
+KEYWORD    return ;                                   Language Construct
+KEYWORD    static                                     null
+KEYWORD    switch                                     null
+KEYWORD    throw                                      null
+KEYWORD    trait                                      null
+KEYWORD    try                                        null
+KEYWORD    unset()                                    Language Construct
+KEYWORD    use                                        null
+KEYWORD    var                                        null
+KEYWORD    while                                      null
+KEYWORD    xor                                        null
+KEYWORD    yield                                      null
+KEYWORD    yield from                                 null
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php
new file mode 100644
index 0000000000..2d3128f220
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php
@@ -0,0 +1,25 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+    public function __construct(int $param1, int|array|null $array, $default = 
"default") {
+    }
+}
+
+$instance = new NamedArguments(1, defa);
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php.testNamedArgumentsConstructor04.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php.testNamedArgumentsConstructor04.completion
new file mode 100644
index 0000000000..166c8e9cf5
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor04/namedArgumentsConstructor04.php.testNamedArgumentsConstructor04.completion
@@ -0,0 +1,6 @@
+Code completion result for source line:
+$instance = new NamedArguments(1, defa|);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+PARAMETER  default:                                   Parameter Name
+------------------------------------
+KEYWORD    default                                    null
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php
new file mode 100644
index 0000000000..a703afa960
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php
@@ -0,0 +1,26 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+class NamedArguments {
+    public function __construct(int $param1, int|array|null $array, $default = 
"default") {
+    }
+}
+
+$instance = new NamedArguments(param1: 1, default: "test");
+$instance = new NamedArguments(param1: 1, arrdefault: "test");
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template01.cccustomtpl
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template01.cccustomtpl
new file mode 100644
index 0000000000..a3c8bf98d7
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template01.cccustomtpl
@@ -0,0 +1,2 @@
+Name: array:
+array
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template02.cccustomtpl
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template02.cccustomtpl
new file mode 100644
index 0000000000..c097b8da38
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_Template02.cccustomtpl
@@ -0,0 +1,2 @@
+Name: array:
+array: 
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_a.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_a.completion
new file mode 100644
index 0000000000..592ed924b1
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_a.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(param1: 1,| default: "test");
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS      NamedArguments                  [PUBLIC]   
namedArgumentsConstructor05.php
+VARIABLE   NamedArguments $instance        [PUBLIC]   
namedArgumentsConstructor05.php
+PARAMETER  array:                                     Parameter Name
+PARAMETER  default:                                   Parameter Name
+PARAMETER  param1:                                    Parameter Name
+------------------------------------
+VARIABLE   $GLOBALS                                   PHP Platform
+VARIABLE   $HTTP_RAW_POST_DATA                        PHP Platform
+VARIABLE   $_COOKIE                                   PHP Platform
+VARIABLE   $_ENV                                      PHP Platform
+VARIABLE   $_FILES                                    PHP Platform
+VARIABLE   $_GET                                      PHP Platform
+VARIABLE   $_POST                                     PHP Platform
+VARIABLE   $_REQUEST                                  PHP Platform
+VARIABLE   $_SERVER                                   PHP Platform
+VARIABLE   $_SESSION                                  PHP Platform
+VARIABLE   $argc                                      PHP Platform
+VARIABLE   $argv                                      PHP Platform
+VARIABLE   $http_response_header                      PHP Platform
+VARIABLE   $php_errormsg                              PHP Platform
+KEYWORD    abstract                                   null
+KEYWORD    and                                        null
+KEYWORD    array                                      null
+KEYWORD    as                                         null
+KEYWORD    break                                      null
+KEYWORD    case                                       null
+KEYWORD    catch                                      null
+KEYWORD    class                                      null
+KEYWORD    clone                                      null
+KEYWORD    const                                      null
+KEYWORD    continue                                   null
+KEYWORD    declare                                    null
+KEYWORD    default                                    null
+KEYWORD    die()                                      Language Construct
+KEYWORD    do                                         null
+KEYWORD    echo '';                                   Language Construct
+KEYWORD    else                                       null
+KEYWORD    elseif                                     null
+KEYWORD    empty()                                    Language Construct
+KEYWORD    enddeclare                                 null
+KEYWORD    endfor                                     null
+KEYWORD    endforeach                                 null
+KEYWORD    endif                                      null
+KEYWORD    endswitch                                  null
+KEYWORD    endwhile                                   null
+KEYWORD    enum                                       null
+KEYWORD    eval()                                     Language Construct
+KEYWORD    exit()                                     Language Construct
+KEYWORD    extends                                    null
+KEYWORD    final                                      null
+KEYWORD    finally                                    null
+KEYWORD    fn                                         null
+KEYWORD    for                                        null
+KEYWORD    foreach                                    null
+KEYWORD    function                                   null
+KEYWORD    global                                     null
+KEYWORD    goto                                       null
+KEYWORD    if                                         null
+KEYWORD    implements                                 null
+KEYWORD    include '';                                Language Construct
+KEYWORD    include_once '';                           Language Construct
+KEYWORD    instanceof                                 null
+KEYWORD    interface                                  null
+KEYWORD    isset()                                    Language Construct
+KEYWORD    list()                                     Language Construct
+KEYWORD    match                                      null
+KEYWORD    namespace                                  null
+KEYWORD    new                                        null
+KEYWORD    or                                         null
+KEYWORD    print '';                                  Language Construct
+KEYWORD    private                                    null
+KEYWORD    protected                                  null
+KEYWORD    public                                     null
+KEYWORD    readonly                                   null
+KEYWORD    require '';                                Language Construct
+KEYWORD    require_once '';                           Language Construct
+KEYWORD    return ;                                   Language Construct
+KEYWORD    static                                     null
+KEYWORD    switch                                     null
+KEYWORD    throw                                      null
+KEYWORD    trait                                      null
+KEYWORD    try                                        null
+KEYWORD    unset()                                    Language Construct
+KEYWORD    use                                        null
+KEYWORD    var                                        null
+KEYWORD    while                                      null
+KEYWORD    xor                                        null
+KEYWORD    yield                                      null
+KEYWORD    yield from                                 null
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_b.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_b.completion
new file mode 100644
index 0000000000..bc2dc9805c
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_b.completion
@@ -0,0 +1,92 @@
+Code completion result for source line:
+$instance = new NamedArguments(param1: 1, |default: "test");
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+CLASS      NamedArguments                  [PUBLIC]   
namedArgumentsConstructor05.php
+VARIABLE   NamedArguments $instance        [PUBLIC]   
namedArgumentsConstructor05.php
+PARAMETER  array:                                     Parameter Name
+PARAMETER  default:                                   Parameter Name
+PARAMETER  param1:                                    Parameter Name
+------------------------------------
+VARIABLE   $GLOBALS                                   PHP Platform
+VARIABLE   $HTTP_RAW_POST_DATA                        PHP Platform
+VARIABLE   $_COOKIE                                   PHP Platform
+VARIABLE   $_ENV                                      PHP Platform
+VARIABLE   $_FILES                                    PHP Platform
+VARIABLE   $_GET                                      PHP Platform
+VARIABLE   $_POST                                     PHP Platform
+VARIABLE   $_REQUEST                                  PHP Platform
+VARIABLE   $_SERVER                                   PHP Platform
+VARIABLE   $_SESSION                                  PHP Platform
+VARIABLE   $argc                                      PHP Platform
+VARIABLE   $argv                                      PHP Platform
+VARIABLE   $http_response_header                      PHP Platform
+VARIABLE   $php_errormsg                              PHP Platform
+KEYWORD    abstract                                   null
+KEYWORD    and                                        null
+KEYWORD    array                                      null
+KEYWORD    as                                         null
+KEYWORD    break                                      null
+KEYWORD    case                                       null
+KEYWORD    catch                                      null
+KEYWORD    class                                      null
+KEYWORD    clone                                      null
+KEYWORD    const                                      null
+KEYWORD    continue                                   null
+KEYWORD    declare                                    null
+KEYWORD    default                                    null
+KEYWORD    die()                                      Language Construct
+KEYWORD    do                                         null
+KEYWORD    echo '';                                   Language Construct
+KEYWORD    else                                       null
+KEYWORD    elseif                                     null
+KEYWORD    empty()                                    Language Construct
+KEYWORD    enddeclare                                 null
+KEYWORD    endfor                                     null
+KEYWORD    endforeach                                 null
+KEYWORD    endif                                      null
+KEYWORD    endswitch                                  null
+KEYWORD    endwhile                                   null
+KEYWORD    enum                                       null
+KEYWORD    eval()                                     Language Construct
+KEYWORD    exit()                                     Language Construct
+KEYWORD    extends                                    null
+KEYWORD    final                                      null
+KEYWORD    finally                                    null
+KEYWORD    fn                                         null
+KEYWORD    for                                        null
+KEYWORD    foreach                                    null
+KEYWORD    function                                   null
+KEYWORD    global                                     null
+KEYWORD    goto                                       null
+KEYWORD    if                                         null
+KEYWORD    implements                                 null
+KEYWORD    include '';                                Language Construct
+KEYWORD    include_once '';                           Language Construct
+KEYWORD    instanceof                                 null
+KEYWORD    interface                                  null
+KEYWORD    isset()                                    Language Construct
+KEYWORD    list()                                     Language Construct
+KEYWORD    match                                      null
+KEYWORD    namespace                                  null
+KEYWORD    new                                        null
+KEYWORD    or                                         null
+KEYWORD    print '';                                  Language Construct
+KEYWORD    private                                    null
+KEYWORD    protected                                  null
+KEYWORD    public                                     null
+KEYWORD    readonly                                   null
+KEYWORD    require '';                                Language Construct
+KEYWORD    require_once '';                           Language Construct
+KEYWORD    return ;                                   Language Construct
+KEYWORD    static                                     null
+KEYWORD    switch                                     null
+KEYWORD    throw                                      null
+KEYWORD    trait                                      null
+KEYWORD    try                                        null
+KEYWORD    unset()                                    Language Construct
+KEYWORD    use                                        null
+KEYWORD    var                                        null
+KEYWORD    while                                      null
+KEYWORD    xor                                        null
+KEYWORD    yield                                      null
+KEYWORD    yield from                                 null
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_c.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_c.completion
new file mode 100644
index 0000000000..181826df37
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor05/namedArgumentsConstructor05.php.testNamedArgumentsConstructor05_c.completion
@@ -0,0 +1,6 @@
+Code completion result for source line:
+$instance = new NamedArguments(param1: 1, arr|default: "test");
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+PARAMETER  array:                                     Parameter Name
+------------------------------------
+KEYWORD    array                                      null
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php
new file mode 100644
index 0000000000..5a05bfecac
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+namespace Test1;
+
+class NamedArguments {
+    public function __construct(int $param1, int|array|null $array, $default = 
"default") {
+    }
+}
+
+namespace Test2;
+
+use Test1\NamedArguments;
+
+$test = "test";
+$int = 1;
+$instance = new NamedArguments();
diff --git 
a/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php.testNamedArgumentsConstructor06.completion
 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php.testNamedArgumentsConstructor06.completion
new file mode 100644
index 0000000000..d17c01ae6d
--- /dev/null
+++ 
b/php/php.editor/test/unit/data/testfiles/completion/lib/php80/testNamedArgumentsConstructor06/namedArgumentsConstructor06.php.testNamedArgumentsConstructor06.completion
@@ -0,0 +1,96 @@
+Code completion result for source line:
+$instance = new NamedArguments(|);
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+PACKAGE    Test1                           [PUBLIC]   null
+PACKAGE    Test2                           [PUBLIC]   null
+CLASS      NamedArguments                  [PUBLIC]   Test1
+VARIABLE   \Test1\NamedArguments $instanc  [PUBLIC]   
namedArgumentsConstructor06.php
+VARIABLE   int $int                        [PUBLIC]   
namedArgumentsConstructor06.php
+VARIABLE   string $test                    [PUBLIC]   
namedArgumentsConstructor06.php
+PARAMETER  array:                                     Parameter Name
+PARAMETER  default:                                   Parameter Name
+PARAMETER  param1:                                    Parameter Name
+------------------------------------
+VARIABLE   $GLOBALS                                   PHP Platform
+VARIABLE   $HTTP_RAW_POST_DATA                        PHP Platform
+VARIABLE   $_COOKIE                                   PHP Platform
+VARIABLE   $_ENV                                      PHP Platform
+VARIABLE   $_FILES                                    PHP Platform
+VARIABLE   $_GET                                      PHP Platform
+VARIABLE   $_POST                                     PHP Platform
+VARIABLE   $_REQUEST                                  PHP Platform
+VARIABLE   $_SERVER                                   PHP Platform
+VARIABLE   $_SESSION                                  PHP Platform
+VARIABLE   $argc                                      PHP Platform
+VARIABLE   $argv                                      PHP Platform
+VARIABLE   $http_response_header                      PHP Platform
+VARIABLE   $php_errormsg                              PHP Platform
+KEYWORD    abstract                                   null
+KEYWORD    and                                        null
+KEYWORD    array                                      null
+KEYWORD    as                                         null
+KEYWORD    break                                      null
+KEYWORD    case                                       null
+KEYWORD    catch                                      null
+KEYWORD    class                                      null
+KEYWORD    clone                                      null
+KEYWORD    const                                      null
+KEYWORD    continue                                   null
+KEYWORD    declare                                    null
+KEYWORD    default                                    null
+KEYWORD    die()                                      Language Construct
+KEYWORD    do                                         null
+KEYWORD    echo '';                                   Language Construct
+KEYWORD    else                                       null
+KEYWORD    elseif                                     null
+KEYWORD    empty()                                    Language Construct
+KEYWORD    enddeclare                                 null
+KEYWORD    endfor                                     null
+KEYWORD    endforeach                                 null
+KEYWORD    endif                                      null
+KEYWORD    endswitch                                  null
+KEYWORD    endwhile                                   null
+KEYWORD    enum                                       null
+KEYWORD    eval()                                     Language Construct
+KEYWORD    exit()                                     Language Construct
+KEYWORD    extends                                    null
+KEYWORD    final                                      null
+KEYWORD    finally                                    null
+KEYWORD    fn                                         null
+KEYWORD    for                                        null
+KEYWORD    foreach                                    null
+KEYWORD    function                                   null
+KEYWORD    global                                     null
+KEYWORD    goto                                       null
+KEYWORD    if                                         null
+KEYWORD    implements                                 null
+KEYWORD    include '';                                Language Construct
+KEYWORD    include_once '';                           Language Construct
+KEYWORD    instanceof                                 null
+KEYWORD    interface                                  null
+KEYWORD    isset()                                    Language Construct
+KEYWORD    list()                                     Language Construct
+KEYWORD    match                                      null
+KEYWORD    namespace                                  null
+KEYWORD    new                                        null
+KEYWORD    or                                         null
+KEYWORD    print '';                                  Language Construct
+KEYWORD    private                                    null
+KEYWORD    protected                                  null
+KEYWORD    public                                     null
+KEYWORD    readonly                                   null
+KEYWORD    require '';                                Language Construct
+KEYWORD    require_once '';                           Language Construct
+KEYWORD    return ;                                   Language Construct
+KEYWORD    static                                     null
+KEYWORD    switch                                     null
+KEYWORD    throw                                      null
+KEYWORD    trait                                      null
+KEYWORD    try                                        null
+KEYWORD    unset()                                    Language Construct
+KEYWORD    use                                        null
+KEYWORD    var                                        null
+KEYWORD    while                                      null
+KEYWORD    xor                                        null
+KEYWORD    yield                                      null
+KEYWORD    yield from                                 null
diff --git 
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP80CodeCompletionTest.java
 
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP80CodeCompletionTest.java
index 35a4afe83f..8622a5046b 100644
--- 
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP80CodeCompletionTest.java
+++ 
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHP80CodeCompletionTest.java
@@ -1137,6 +1137,52 @@ public class PHP80CodeCompletionTest extends 
PHPCodeCompletionTestBase {
         checkCompletion(getTestPath("namedArgumentsStaticMethod06"), 
"self::test(^)", false);
     }
 
+    public void testNamedArgumentsConstructor01() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor01"), "$instance 
= new NamedArguments(^);", false);
+    }
+
+    public void testNamedArgumentsConstructor02_a() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor02"), "$instance 
= new NamedArguments(arr^);", false);
+    }
+
+    public void testNamedArgumentsConstructor02_b() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor02"), "$instance 
= new NamedArguments(^)", false);
+    }
+
+    public void testNamedArgumentsConstructor03() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor03"), "$instance 
= new NamedArguments(1, ^);", false);
+    }
+
+    public void testNamedArgumentsConstructor04() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor04"), "$instance 
= new NamedArguments(1, defa^);", false);
+    }
+
+    public void testNamedArgumentsConstructor05_a() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor05"), "$instance 
= new NamedArguments(param1: 1,^ default: \"test\");", false);
+    }
+
+    public void testNamedArgumentsConstructor05_b() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor05"), "$instance 
= new NamedArguments(param1: 1, ^default: \"test\");", false);
+    }
+
+    public void testNamedArgumentsConstructor05_c() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor05"), "$instance 
= new NamedArguments(param1: 1, arr^default: \"test\");", false);
+    }
+
+    public void testNamedArgumentsConstructor05_Template01() throws Exception {
+        
checkCompletionCustomTemplateResult(getTestPath("namedArgumentsConstructor05"), 
"$instance = new NamedArguments(param1: 1, arr^default: \"test\");",
+                new DefaultFilter("array"), true);
+    }
+
+    public void testNamedArgumentsConstructor05_Template02() throws Exception {
+        
checkCompletionCustomTemplateResult(getTestPath("namedArgumentsConstructor05"), 
"$instance = new NamedArguments(param1: 1,^ default: \"test\");",
+                new DefaultFilter("array"), true);
+    }
+
+    public void testNamedArgumentsConstructor06() throws Exception {
+        checkCompletion(getTestPath("namedArgumentsConstructor06"), "$instance 
= new NamedArguments(^);", false);
+    }
+
     public void testStaticReturnTypeOverrideMethod01() throws Exception {
         
checkCompletionCustomTemplateResult(getTestPath("testStaticReturnTypeOverrideMethod01"),
 "    test^",
                 new DefaultFilter(PhpVersion.PHP_80, "test"), true);
diff --git 
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java
 
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java
index ad87a3cdbc..5d8256ccca 100644
--- 
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java
+++ 
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionTestBase.java
@@ -213,6 +213,11 @@ public abstract class PHPCodeCompletionTestBase extends 
PHPTestBase {
             this.prefix = prefix;
         }
 
+        public DefaultFilter(String prefix) {
+            this.phpVersion = PhpVersion.getDefault();
+            this.prefix = prefix;
+        }
+
         @Override
         public boolean accept(CompletionProposal proposal) {
             if (proposal instanceof PHPCompletionItem.MethodDeclarationItem) {
@@ -223,6 +228,14 @@ public abstract class PHPCodeCompletionTestBase extends 
PHPTestBase {
                     return true;
                 }
             }
+            if (proposal instanceof PHPCompletionItem.KeywordItem) {
+                // ignore KeywordItem because it invokes 
EditorRegistry.lastFocusedComponent().getDocument() (NPE)
+                return false;
+            }
+            if (proposal != null) {
+                String name = proposal.getName();
+                return name.startsWith(prefix);
+            }
             return false;
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to