You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by tm...@apache.org on 2020/07/03 11:10:31 UTC

[netbeans] branch master updated: [NETBEANS-4509] PHP - code completion for function with return type

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

tmysik 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 e3700af  [NETBEANS-4509] PHP - code completion for function with return type
     new 3fd620b  Merge pull request #2228 from KacerCZ/netbeans-4509-return-array-code-completion
e3700af is described below

commit e3700af98595a1d696ffa4ad0e92696feb008d4e
Author: Tomas Prochazka <ka...@razdva.cz>
AuthorDate: Thu Jul 2 23:48:46 2020 +0200

    [NETBEANS-4509] PHP - code completion for function with return type
    
    https://issues.apache.org/jira/browse/NETBEANS-4509
    
    Fixed code completion of functions with return type "array" and specific
    type in "@return" in DocBlock.
---
 .../modules/php/editor/model/impl/VariousUtils.java         | 12 ++++++++++--
 .../unit/data/testfiles/completion/lib/arrays/arrays.php    | 13 +++++++++++++
 .../lib/arrays/arrays.php.testArrays_05.completion          |  5 +++++
 .../lib/arrays/arrays.php.testArrays_06.completion          |  5 +++++
 .../php/editor/completion/PHPArrayCodeCompletionTest.java   |  8 ++++++++
 5 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/model/impl/VariousUtils.java b/php/php.editor/src/org/netbeans/modules/php/editor/model/impl/VariousUtils.java
index b29a2ae..4cc8644 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/model/impl/VariousUtils.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/model/impl/VariousUtils.java
@@ -224,10 +224,18 @@ public final class VariousUtils {
         if (returnType != null) {
             QualifiedName name = QualifiedName.create(returnType);
             assert name != null : returnType;
+            String typeName = name.toString();
+            if (Type.ARRAY.equals(typeName)) {
+                // For "array" type PHPDoc can contain more specific definition, i.e. MyClass[]
+                String typeFromPHPDoc = getReturnTypeFromPHPDoc(root, functionDeclaration);
+                if (typeFromPHPDoc != null) {
+                    return typeFromPHPDoc;
+                }
+            }
             if (returnType instanceof NullableType) {
-                return CodeUtils.NULLABLE_TYPE_PREFIX + name.toString();
+                return CodeUtils.NULLABLE_TYPE_PREFIX + typeName;
             }
-            return name.toString();
+            return typeName;
         }
         return getReturnTypeFromPHPDoc(root, functionDeclaration);
     }
diff --git a/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php b/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php
index e52f521..676b68c 100644
--- a/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php
+++ b/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php
@@ -20,6 +20,14 @@ function arrayFunctionName() {
     return array(new ArraysCc());
 }
 
+/**
+ *
+ * @return ArraysCc[] foo
+ */
+function arrayFunctionTyped(): array {
+    return array(new ArraysCc());
+}
+
 (new ArraysCc)->field[0]->field;
 
 $a = array(new ArraysCc());
@@ -30,4 +38,9 @@ arrayFunctionName()[0]->field;
 $b = arrayFunctionName();
 $b[0]->field;
 
+arrayFunctionTyped()[0]->field;
+
+$c = arrayFunctionTyped();
+$c[0]->field;
+
 ?>
\ No newline at end of file
diff --git a/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php.testArrays_05.completion b/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php.testArrays_05.completion
new file mode 100644
index 0000000..0efacfc
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php.testArrays_05.completion
@@ -0,0 +1,5 @@
+Code completion result for source line:
+arrayFunctionTyped()[0]->|field;
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+METHOD     method()                        [PUBLIC]   ArraysCc
+VARIABLE   ArraysCc[][int][string] field   [PUBLIC]   ArraysCc
diff --git a/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php.testArrays_06.completion b/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php.testArrays_06.completion
new file mode 100644
index 0000000..f86f6f3
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/completion/lib/arrays/arrays.php.testArrays_06.completion
@@ -0,0 +1,5 @@
+Code completion result for source line:
+$c[0]->|field;
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+METHOD     method()                        [PUBLIC]   ArraysCc
+VARIABLE   ArraysCc[][int][string] field   [PUBLIC]   ArraysCc
diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPArrayCodeCompletionTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPArrayCodeCompletionTest.java
index f3b9493..f996661 100644
--- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPArrayCodeCompletionTest.java
+++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPArrayCodeCompletionTest.java
@@ -53,6 +53,14 @@ public class PHPArrayCodeCompletionTest extends PHPCodeCompletionTestBase {
         checkCompletion("testfiles/completion/lib/arrays/arrays.php", "$b[0]->^field;", false);
     }
 
+    public void testArrays_05() throws Exception {
+        checkCompletion("testfiles/completion/lib/arrays/arrays.php", "arrayFunctionTyped()[0]->^field;", false);
+    }
+
+    public void testArrays_06() throws Exception {
+        checkCompletion("testfiles/completion/lib/arrays/arrays.php", "$c[0]->^field;", false);
+    }
+
     @Override
     protected Map<String, ClassPath> createClassPathsForTest() {
         return Collections.singletonMap(


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

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