Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

//----------------------------------------------------
// The following code was generated by CUP v0.11a beta 20060608
// Sun Jan 12 13:42:53 JST 2025
// Sun Jul 20 15:28:17 NOVT 2025
//----------------------------------------------------

package org.netbeans.modules.php.editor.parser;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2963,17 +2963,21 @@ protected EncodedActionTable18() {
sb.append("\001");
sb.append("\002");
sb.append("\000");
sb.append("\006");
sb.append("\010");
sb.append("\111");
sb.append("\ufee2");
sb.append("\151");
sb.append("\ufee2");
sb.append("\232");
sb.append("\u0242");
sb.append("\001");
sb.append("\002");
sb.append("\000");
sb.append("\004");
sb.append("\006");
sb.append("\111");
sb.append("\u0494");
sb.append("\151");
sb.append("\u05cd");
sb.append("\u0495");
sb.append("\001");
sb.append("\002");
sb.append("\000");
Expand Down Expand Up @@ -4524,9 +4528,5 @@ protected EncodedActionTable18() {
sb.append("\123");
sb.append("\100");
sb.append("\012");
sb.append("\101");
sb.append("\206");
sb.append("\102");
sb.append("\041");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ public String getTableData() {
}
protected EncodedActionTable19() {
sb = new StringBuilder();
sb.append("\101");
sb.append("\206");
sb.append("\102");
sb.append("\041");
sb.append("\103");
sb.append("\144");
sb.append("\104");
Expand Down Expand Up @@ -4524,9 +4528,5 @@ protected EncodedActionTable19() {
sb.append("\006");
sb.append("\070");
sb.append("\236");
sb.append("\111");
sb.append("\uff20");
sb.append("\001");
sb.append("\002");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ public String getTableData() {
}
protected EncodedActionTable20() {
sb = new StringBuilder();
sb.append("\111");
sb.append("\uff20");
sb.append("\001");
sb.append("\002");
sb.append("\000");
sb.append("\004");
sb.append("\111");
Expand Down Expand Up @@ -4524,9 +4528,5 @@ protected EncodedActionTable20() {
sb.append("\206");
sb.append("\102");
sb.append("\041");
sb.append("\103");
sb.append("\144");
sb.append("\104");
sb.append("\117");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ public String getTableData() {
}
protected EncodedActionTable21() {
sb = new StringBuilder();
sb.append("\103");
sb.append("\144");
sb.append("\104");
sb.append("\117");
sb.append("\105");
sb.append("\141");
sb.append("\115");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,12 @@
import org.netbeans.modules.csl.spi.support.CancelSupport;
import org.netbeans.modules.php.editor.CodeUtils;
import org.netbeans.modules.php.editor.model.FileScope;
import org.netbeans.modules.php.editor.model.InterfaceScope;
import org.netbeans.modules.php.editor.model.Model;
import org.netbeans.modules.php.editor.model.Scope;
import org.netbeans.modules.php.editor.model.VariableScope;
import org.netbeans.modules.php.editor.parser.PHPParseResult;
import org.netbeans.modules.php.editor.parser.astnodes.ASTNode;
import org.netbeans.modules.php.editor.parser.astnodes.Block;
import org.netbeans.modules.php.editor.parser.astnodes.BodyDeclaration.Modifier;
import org.netbeans.modules.php.editor.parser.astnodes.FunctionDeclaration;
import org.netbeans.modules.php.editor.parser.astnodes.MethodDeclaration;
Expand Down Expand Up @@ -73,7 +76,8 @@ public void invoke(PHPRuleContext context, List<Hint> hints) {
if (CancelSupport.getDefault().isCancelled()) {
return;
}
CheckVisitor checkVisitor = new CheckVisitor();
Model model = phpParseResult.getModel();
CheckVisitor checkVisitor = new CheckVisitor(model);
phpParseResult.getProgram().accept(checkVisitor);
Set<MethodDeclaration> incorrectNonAbstractMethods = checkVisitor.getIncorrectNonAbstractMethods();
addIcorrectNonAbstractMethodHints(incorrectNonAbstractMethods, hints, context.doc);
Expand Down Expand Up @@ -107,17 +111,26 @@ private void addHint(ASTNode node, String description, List<Hint> hints, List<Hi
//~ Inner classes
private static final class CheckVisitor extends DefaultVisitor {

private final Model model;

private final Set<MethodDeclaration> incorrectNonAbstractMethods = new HashSet<>();

public CheckVisitor(Model model) {
super();
this.model = model;
}

@Override
public void visit(MethodDeclaration node) {
if (CancelSupport.getDefault().isCancelled()) {
return;
}
if (!Modifier.isAbstract(node.getModifier())) {
FunctionDeclaration function = node.getFunction();
Block body = function.getBody();
if (body == null) {
final VariableScope variableScope = model.getVariableScope(function.getEndOffset() - 1);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure here - is calling of the model in visitors OK? I am sorry, I already forgot... could you please check the performance and validate that it is still OK? Thank you.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, there were thoughts that perhaps it is not worth doing this.
But, for example, in AbstractClassInstantiationHintError the model is also called in the visitor.

private final class CheckVisitor extends DefaultVisitor {
private final FileObject fileObject;
private final Index index;
private final List<Hint> hints = new ArrayList<>();
private final Model model;
private CheckVisitor(FileObject fileObject, Index index, Model model) {
this.fileObject = fileObject;
this.index = index;
this.model = model;
}
public List<Hint> getHints() {
return Collections.unmodifiableList(hints);
}
@Override
@Messages({
"# {0} - Class name",
"AbstractClassInstantiationDesc=Abstract class {0} can not be instantiated"
})
public void visit(ClassInstanceCreation node) {
if (CancelSupport.getDefault().isCancelled()
|| CodeUtils.isDollaredName(node.getClassName())) {
// GH-6119
// e.g.
// abstract class AbstractClass {}
// $a = new $abstractClass();
return;
}
ASTNodeInfo<ClassInstanceCreation> info = ASTNodeInfo.create(node);
int startOffset = node.getStartOffset();
VariableScope variableScope = model.getVariableScope(startOffset);
QualifiedName fullyQualifiedName = VariousUtils.getFullyQualifiedName(info.getQualifiedName(), startOffset, variableScope);
Set<ClassElement> classes = index.getClasses(NameKind.exact(fullyQualifiedName));
if (!classes.isEmpty()) {
ClassElement classElement = ModelUtils.getFirst(classes);
if (classElement != null && classElement.isAbstract()) {
OffsetRange offsetRange = new OffsetRange(startOffset, node.getEndOffset());
hints.add(new Hint(
AbstractClassInstantiationHintError.this,
Bundle.AbstractClassInstantiationDesc(classElement.getFullyQualifiedName().toString()),
fileObject,
offsetRange,
null,
500));
}
}
}
}

I will do performance measurements later. Thank you!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Used this code for measurements

        @Override
        public void visit(MethodDeclaration node) {
            if (CancelSupport.getDefault().isCancelled()) {
                return;
            }
            if (!Modifier.isAbstract(node.getModifier())) {
                long startTime = System.currentTimeMillis();

                FunctionDeclaration function = node.getFunction();
                final VariableScope variableScope = model.getVariableScope(function.getEndOffset() - 1);
                Scope inScope = variableScope.getInScope();
                boolean isInterface = inScope instanceof InterfaceScope;
                if (!isInterface && variableScope.getBlockRange().getLength() <= 1) {
                    incorrectNonAbstractMethods.add(node);
                }
                
                long time = System.currentTimeMillis() - startTime;
                System.out.println(String.format("visit MethodDeclaration node %d ms", time));
            }
        }

Measurements were taken using the example of Mpdf https://github.com/mpdf/mpdf/blob/development/src/Mpdf.php

Attempt 1

visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 9 ms
visit MethodDeclaration node 14 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 25 ms
visit MethodDeclaration node 25 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 34 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 21 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 14 ms
visit MethodDeclaration node 142 ms
visit MethodDeclaration node 30 ms
visit MethodDeclaration node 16 ms
visit MethodDeclaration node 30 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 45 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 68 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 18 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 20 ms
visit MethodDeclaration node 9 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 27 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 9 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 20 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 9 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 24 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 77 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 23 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 99 ms
visit MethodDeclaration node 15 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 53 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 32 ms
visit MethodDeclaration node 23 ms
visit MethodDeclaration node 34 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 40 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 19 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 110 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 19 ms
visit MethodDeclaration node 32 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 21 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 25 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 32 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 19 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 6 ms

Attempt 2

visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 52 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 39 ms
visit MethodDeclaration node 24 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 39 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 65 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 14 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 16 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 50 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 14 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 68 ms
visit MethodDeclaration node 9 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 28 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 16 ms
visit MethodDeclaration node 22 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 25 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 18 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 82 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 21 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 14 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 21 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 5 ms

Attempt 3

visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 8 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 33 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 52 ms
visit MethodDeclaration node 16 ms
visit MethodDeclaration node 9 ms
visit MethodDeclaration node 15 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 36 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 59 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 15 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 13 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 11 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 40 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 67 ms
visit MethodDeclaration node 9 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 28 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 20 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 23 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 17 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 88 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 13 ms
visit MethodDeclaration node 18 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 7 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 14 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 20 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 5 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 6 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 9 ms
visit MethodDeclaration node 12 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 10 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 3 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 4 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 2 ms
visit MethodDeclaration node 0 ms
visit MethodDeclaration node 1 ms
visit MethodDeclaration node 3 ms

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems OK to me, thank you for doing that.

Scope inScope = variableScope.getInScope();
boolean isInterface = inScope instanceof InterfaceScope;
if (!isInterface && variableScope.getBlockRange().getLength() <= 1) {
incorrectNonAbstractMethods.add(node);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public void visit(MethodDeclaration node) {
processConstructorPropertyPromotion(node);
}
FunctionDeclaration function = node.getFunction();
if (CodeUtils.isConstructor(node) && function.getBody() != null) {
if (CodeUtils.isConstructor(node) && function.getBody() != null && function.getBody().isCurly()) {
formalParameters = new ArrayList<>(function.getFormalParameters());
isInConstructor = true;
constructorBodyEndOffset = function.getBody().getEndOffset() - 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -544,14 +544,14 @@ private void processMethodScope(MethodScope methodScope) {
boolean isEnum = inScope instanceof EnumScope;
if (phpModifiers.isAbstract() && isAnonClass) {
fixes = new ArrayList<>();
if (methodScope.getBlockRange() != null) {
if (methodScope.getBlockRange() != null && methodScope.getBlockRange().getLength() > 1) {
// e.g. abstract public function method(): void {}
fixes.add(new RemoveModifierFix(doc, PhpModifiers.ABSTRACT_MODIFIER, methodScope.getOffset()));
}
hints.add(new SimpleHint(Bundle.AbstractMethodInAnonymousClass(), methodScope.getNameRange(), fixes));
} else if (phpModifiers.isAbstract() && isEnum) {
fixes = new ArrayList<>();
if (methodScope.getBlockRange() != null) {
if (methodScope.getBlockRange() != null && methodScope.getBlockRange().getLength() > 1) {
// e.g. abstract public function method(): void {}
fixes.add(new RemoveModifierFix(doc, PhpModifiers.ABSTRACT_MODIFIER, methodScope.getOffset()));
}
Expand All @@ -563,7 +563,7 @@ private void processMethodScope(MethodScope methodScope) {
}
fixes.add(new RemoveModifierFix(doc, PhpModifiers.FINAL_MODIFIER, methodScope.getOffset()));
hints.add(new SimpleHint(Bundle.AbstractFinalMethod(methodScope.getName()), methodScope.getNameRange(), fixes));
} else if (phpModifiers.isAbstract() && methodScope.getBlockRange() != null) {
} else if (phpModifiers.isAbstract() && methodScope.getBlockRange() != null && methodScope.getBlockRange().getLength() > 1) {
fixes = Collections.<HintFix>singletonList(new RemoveBodyFix(doc, methodScope));
hints.add(new SimpleHint(Bundle.AbstractWithBlockMethod(methodScope.getName()), methodScope.getNameRange(), fixes));
} else if (phpModifiers.isAbstract() && phpModifiers.isPrivate() && !isTrait) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ public void visit(FunctionDeclaration node) {
if (CancelSupport.getDefault().isCancelled()) {
return;
}
if (node.getBody() != null) {
if (node.getBody() != null && node.getBody().isCurly()) {
parentNodes.push(node);
super.visit(node);
parentNodes.pop();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1559,6 +1559,8 @@
</DefaultValue>
</FormalParameter>
</FormalParameters>
<Block start='2365' end='2366' isCurly='flase'>
</Block>
</FunctionDeclaration>
</MethodDeclaration>
</Block>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -867,6 +867,8 @@
<Identifier start='1329' end='1333' name='null'/>
</NamespaceName>
</UnionType>
<Block start='1333' end='1334' isCurly='flase'>
</Block>
</FunctionDeclaration>
</MethodDeclaration>
<MethodDeclaration start='1340' end='1428' modifiers='protected abstract static'>
Expand Down Expand Up @@ -902,6 +904,8 @@
<Identifier start='1424' end='1427' name='Bar'/>
</NamespaceName>
</UnionType>
<Block start='1427' end='1428' isCurly='flase'>
</Block>
</FunctionDeclaration>
</MethodDeclaration>
</Block>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
<Identifier start='81' end='87' name='create'/>
<FormalParameters>
</FormalParameters>
<Block start='92' end='93' isCurly='flase'>
</Block>
</FunctionDeclaration>
</MethodDeclaration>
</Block>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?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.
*/

interface InvalidMethodWithBodyInterface {

// Invalid with body
function implicitPublicMethodWithBody() {}
static function implicitPublicStaticMethodWithBody() {}
public function implicitPublicMethodWithBody() {}
public static function implicitPublicMethodWithBody() {}

// Invalid with body and return type
function implicitPublicMethodWithBodyAndReturnType(): void {}
static function implicitPublicStaticMethodWithBodyAndReturnType(): void {}
public function implicitPublicMethodWithBodyAndReturnType(): void {}
public static function implicitPublicMethodWithBodyAndReturnType(): void {}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
function implicitPublicMethodWithBody() {}
----------------------------
HINT:Interface method "implicitPublicMethodWithBody" can not contain body
FIX:Remove body of the method: implicitPublicMethodWithBody
static function implicitPublicStaticMethodWithBody() {}
----------------------------------
HINT:Interface method "implicitPublicStaticMethodWithBody" can not contain body
FIX:Remove body of the method: implicitPublicStaticMethodWithBody
public function implicitPublicMethodWithBody() {}
----------------------------
HINT:Interface method "implicitPublicMethodWithBody" can not contain body
FIX:Remove body of the method: implicitPublicMethodWithBody
public static function implicitPublicMethodWithBody() {}
----------------------------
HINT:Interface method "implicitPublicMethodWithBody" can not contain body
FIX:Remove body of the method: implicitPublicMethodWithBody
function implicitPublicMethodWithBodyAndReturnType(): void {}
-----------------------------------------
HINT:Interface method "implicitPublicMethodWithBodyAndReturnType" can not contain body
FIX:Remove body of the method: implicitPublicMethodWithBodyAndReturnType
static function implicitPublicStaticMethodWithBodyAndReturnType(): void {}
-----------------------------------------------
HINT:Interface method "implicitPublicStaticMethodWithBodyAndReturnType" can not contain body
FIX:Remove body of the method: implicitPublicStaticMethodWithBodyAndReturnType
public function implicitPublicMethodWithBodyAndReturnType(): void {}
-----------------------------------------
HINT:Interface method "implicitPublicMethodWithBodyAndReturnType" can not contain body
FIX:Remove body of the method: implicitPublicMethodWithBodyAndReturnType
public static function implicitPublicMethodWithBodyAndReturnType(): void {}
-----------------------------------------
HINT:Interface method "implicitPublicMethodWithBodyAndReturnType" can not contain body
FIX:Remove body of the method: implicitPublicMethodWithBodyAndReturnType
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?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.
*/

interface InvalidMethodWithBodyInterface {

// Invalid with body
function implicitPublicMethodWithBody();

static function implicitPublicStaticMethodWithBody() {}
public function implicitPublicMethodWithBody() {}
public static function implicitPublicMethodWithBody() {}

// Invalid with body and return type
function implicitPublicMethodWithBodyAndReturnType(): void {}
static function implicitPublicStaticMethodWithBodyAndReturnType(): void {}
public function implicitPublicMethodWithBodyAndReturnType(): void {}
public static function implicitPublicMethodWithBodyAndReturnType(): void {}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?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.
*/

interface InvalidMethodWithBodyInterface {

// Invalid with body
function implicitPublicMethodWithBody() {}
static function implicitPublicStaticMethodWithBody() {}
public function implicitPublicMethodWithBody() {}
public static function implicitPublicMethodWithBody() {}

// Invalid with body and return type
function implicitPublicMethodWithBodyAndReturnType(): void;

static function implicitPublicStaticMethodWithBodyAndReturnType(): void {}
public function implicitPublicMethodWithBodyAndReturnType(): void {}
public static function implicitPublicMethodWithBodyAndReturnType(): void {}

}
Loading
Loading