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 86340d23dc Fix code completion for fields with single line var doc
#6359
new c473ac3ded Merge pull request #6364 from
junichi11/php-gh-6359-field-cc-with-single-line-vardoc
86340d23dc is described below
commit 86340d23dc59dcd6360bed2e125969c70bdd8e70
Author: Junichi Yamamoto <[email protected]>
AuthorDate: Mon Aug 21 11:41:35 2023 +0900
Fix code completion for fields with single line var doc #6359
- https://github.com/apache/netbeans/issues/6359
- `/** @var Type $field */` is recognized as not `PHPDocBlock` but
`PHPVarComment`, so, check it
```php
// example
class X {
public function testX(): void {}
}
class Y {
public function testY(): void {}
}
class GH6359 {
/** @var X $testX */
protected $testX;
/** @var X|Y $testXorY */
protected $testXorY;
/** @var X&Y $testXandY */
protected $testXandY;
public function test(): void {
$this->testX->testX();
$this->testXorY->testX();
$this->testXandY->testX();
}
}
```
---
.../php/editor/model/impl/VariousUtils.java | 12 +++++
.../testfiles/completion/lib/gh6359/gh6359.php | 42 ++++++++++++++++
.../lib/gh6359/gh6359.php.testGH6359_01.completion | 4 ++
.../lib/gh6359/gh6359.php.testGH6359_02.completion | 5 ++
.../lib/gh6359/gh6359.php.testGH6359_03.completion | 5 ++
.../completion/PHPCodeCompletionGH6359Test.java | 57 ++++++++++++++++++++++
6 files changed, 125 insertions(+)
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 47e02265e4..9f7ba9a6bd 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
@@ -89,6 +89,7 @@ import
org.netbeans.modules.php.editor.parser.astnodes.PHPDocBlock;
import org.netbeans.modules.php.editor.parser.astnodes.PHPDocTag;
import org.netbeans.modules.php.editor.parser.astnodes.PHPDocTypeNode;
import org.netbeans.modules.php.editor.parser.astnodes.PHPDocVarTypeTag;
+import org.netbeans.modules.php.editor.parser.astnodes.PHPVarComment;
import org.netbeans.modules.php.editor.parser.astnodes.ParenthesisExpression;
import org.netbeans.modules.php.editor.parser.astnodes.Program;
import org.netbeans.modules.php.editor.parser.astnodes.Reference;
@@ -384,7 +385,18 @@ public final class VariousUtils {
break;
}
}
+ } else if ((comment instanceof PHPVarComment) && PHPDocTag.Type.VAR ==
tagType) {
+ // GH-6359
+ // /** @var Type $field */
+ // private $field;
+ PHPVarComment varComment = (PHPVarComment) comment;
+ PHPDocVarTypeTag tag = varComment.getVariable();
+ String[] parts = WS_PATTERN.split(tag.getValue().trim(), 3); // 3:
@var Type $field
+ if (parts.length > 1) {
+ return parts[1];
+ }
}
+
return null;
}
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php
b/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php
new file mode 100644
index 0000000000..c53bc705f8
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php
@@ -0,0 +1,42 @@
+<?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 X {
+ public function testX(): void {}
+}
+
+class Y {
+ public function testY(): void {}
+}
+
+class GH6359 {
+
+ /** @var X $testX */
+ protected $testX;
+ /** @var X|Y $testXorY */
+ protected $testXorY;
+ /** @var X&Y $testXandY */
+ protected $testXandY;
+
+ public function test(): void {
+ $this->testX->testX();
+ $this->testXorY->testX();
+ $this->testXandY->testX();
+ }
+}
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_01.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_01.completion
new file mode 100644
index 0000000000..66058090b3
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_01.completion
@@ -0,0 +1,4 @@
+Code completion result for source line:
+$this->testX->|testX();
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+METHOD testX() [PUBLIC] X
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_02.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_02.completion
new file mode 100644
index 0000000000..d75a16a408
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_02.completion
@@ -0,0 +1,5 @@
+Code completion result for source line:
+$this->testXorY->|testX();
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+METHOD testX() [PUBLIC] X
+METHOD testY() [PUBLIC] Y
diff --git
a/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_03.completion
b/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_03.completion
new file mode 100644
index 0000000000..5d377a45bb
--- /dev/null
+++
b/php/php.editor/test/unit/data/testfiles/completion/lib/gh6359/gh6359.php.testGH6359_03.completion
@@ -0,0 +1,5 @@
+Code completion result for source line:
+$this->testXandY->|testX();
+(QueryType=COMPLETION, prefixSearch=true, caseSensitive=true)
+METHOD testX() [PUBLIC] X
+METHOD testY() [PUBLIC] Y
diff --git
a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionGH6359Test.java
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionGH6359Test.java
new file mode 100644
index 0000000000..32e65559d1
--- /dev/null
+++
b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/completion/PHPCodeCompletionGH6359Test.java
@@ -0,0 +1,57 @@
+/*
+ * 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.
+ */
+package org.netbeans.modules.php.editor.completion;
+
+import java.io.File;
+import java.util.Collections;
+import java.util.Map;
+import org.netbeans.api.java.classpath.ClassPath;
+import org.netbeans.modules.php.project.api.PhpSourcePath;
+import org.netbeans.spi.java.classpath.support.ClassPathSupport;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileUtil;
+
+public class PHPCodeCompletionGH6359Test extends PHPCodeCompletionTestBase {
+
+ public PHPCodeCompletionGH6359Test(String testName) {
+ super(testName);
+ }
+
+ public void testGH6359_01() throws Exception {
+ checkCompletion("testfiles/completion/lib/gh6359/gh6359.php",
"$this->testX->^testX();", false);
+ }
+
+ public void testGH6359_02() throws Exception {
+ checkCompletion("testfiles/completion/lib/gh6359/gh6359.php",
"$this->testXorY->^testX();", false);
+ }
+
+ public void testGH6359_03() throws Exception {
+ checkCompletion("testfiles/completion/lib/gh6359/gh6359.php",
"$this->testXandY->^testX();", false);
+ }
+
+ @Override
+ protected Map<String, ClassPath> createClassPathsForTest() {
+ return Collections.singletonMap(
+ PhpSourcePath.SOURCE_CP,
+ ClassPathSupport.createClassPath(new FileObject[] {
+ FileUtil.toFileObject(new File(getDataDir(),
"/testfiles/completion/lib/gh6359"))
+ })
+ );
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists