troizet opened a new pull request, #8673:
URL: https://github.com/apache/netbeans/pull/8673
What was done in this PR:
- Changed the way interface methods and abstract methods are parsed
- Fixed generation of the return type in phpDoc comments for abstract
methods with an explicitly specified return type
- For an interface method with a body, a hint `Interface method can not
contain body` is now displayed instead of a syntax error
- Fixed tests `ASTPHP5ParserTest` and `SanitizeSourceTest`
- Fixed hints: `IncorrectNonAbstractMethodIntError`,
`InitializeFieldSuggestion`, `ModifiersCheckHintError`, `UnusedVariableHint`
- Added new tests for `PhpCommentGenerator` and `ModifiersCheckHintError`
Fixed generation of the return type in phpDoc comments for abstract methods
with an explicitly specified return type:
Example:
```php
<?php
abstract class ClassExample
{
abstract public function test(): int;
}
```
Before:
https://github.com/user-attachments/assets/3da62022-c51f-4def-b66d-60cc1e24ed1e
After:
https://github.com/user-attachments/assets/d41f518d-f005-4aae-b522-9ec3563da830
For an interface method with a body, a hint `Interface method can not
contain body` is now displayed instead of a syntax error:
Example:
```php
<?php
interface InterfaceExample
{
public function test();
}
```
Before:
<img width="479" height="227" alt="interface_method_before"
src="https://github.com/user-attachments/assets/b6c2df54-2a83-4f6b-a450-a394007b373a"
/>
After:
<img width="600" height="196" alt="interface_method_after"
src="https://github.com/user-attachments/assets/0dd63503-1994-46f5-824b-8033f2077cc6"
/>
https://github.com/user-attachments/assets/a443821f-2b4f-496d-8e14-d2b8494a88c3
While working on tests for pull request #8340, I noticed that for an
abstract method with an explicit return type, the return type is not generated
in the phpDoc comment. I also noticed that for an interface method with an
explicit return type, the correct phpDoc comment is generated.
The reason for the difference in return type generation between abstract
methods and interface methods in phpDoc comments lay in the parsing process.
For abstract methods, an empty body block was not identified during parsing,
unlike for interface methods.
And because of this, the Scope of the method was incorrectly determined for
the abstract method: `ClassScope` was determined instead of `MethodScope`.
https://github.com/apache/netbeans/blob/53e88660baa36f81497808b11aa39f4efc072c26/php/php.editor/src/org/netbeans/modules/php/editor/typinghooks/PhpCommentGenerator.java#L227-L246
Due to an improperly defined scope, the analysis to determine whether the
method has a return type is blocked.
https://github.com/apache/netbeans/blob/53e88660baa36f81497808b11aa39f4efc072c26/php/php.editor/src/org/netbeans/modules/php/editor/typinghooks/PhpCommentGenerator.java#L273-L278
https://github.com/apache/netbeans/blob/53e88660baa36f81497808b11aa39f4efc072c26/php/php.editor/src/org/netbeans/modules/php/editor/typinghooks/PhpCommentGenerator.java#L439-L449
As a result, the method for retrieving the method's return type is not
called.
https://github.com/apache/netbeans/blob/53e88660baa36f81497808b11aa39f4efc072c26/php/php.editor/src/org/netbeans/modules/php/editor/typinghooks/PhpCommentGenerator.java#L115-L117
I decided to bring the parsing of the abstract method and the interface
method to a single form. As a result, the issue with phpDoc comment return type
generation was resolved, the syntax error for interface methods with a body was
eliminated,
and the 'Interface method cannot contain body' hint began functioning
correctly.
---
**^Add meaningful description above**
<details open>
<summary>Click to collapse/expand PR instructions</summary>
By opening a pull request you confirm that, unless explicitly stated
otherwise, the changes -
- are all your own work, and you have the right to contribute them.
- are contributed solely under the terms and conditions of the Apache
License 2.0 (see section 5 of the license for more information).
Please make sure (eg. `git log`) that all commits have a valid name and
email address for you in the Author field.
If you're a first time contributor, see the Contributing guidelines for more
information.
If you're a committer, please label the PR before pressing "Create pull
request" so that the right test jobs can run.
### PR approval and merge checklist:
1. [ ] Was this PR [correctly
labeled](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=240884239#PRsandYouAreviewerGuide-PRtriggeredCIJobs(conditionalCIpipeline)),
did the right tests run? When did they run?
2. [ ] Is this PR
[squashed](https://cwiki.apache.org/confluence/display/NETBEANS/git%3A+squash+and+merge)?
3. [ ] Are author name / email address correct? Are
[co-authors](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors#creating-co-authored-commits-on-the-command-line)
correctly listed? Do the commit messages need updates?
3. [ ] Does the PR title and description still fit after the Nth iteration?
Is the description sufficient to appear in the release notes?
If this PR targets the delivery branch: [don't
merge](https://cwiki.apache.org/confluence/display/NETBEANS/Pull+requests+for+delivery).
([full wiki
article](https://cwiki.apache.org/confluence/display/NETBEANS/PRs+and+You+-+A+reviewer+Guide))
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
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