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 2022/02/23 14:00:25 UTC

[netbeans] branch master updated: [NETBEANS-5599] PHP 8.1 Support: New in initializers (Part 4)

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 d2c5117  [NETBEANS-5599] PHP 8.1 Support: New in initializers (Part 4)
     new 73732f1  Merge pull request #3657 from junichi11/php81-new-in-initializer
d2c5117 is described below

commit d2c511708814a432a228e1cf1efa6affda9c33a4
Author: Junichi Yamamoto <ju...@apache.org>
AuthorDate: Tue Feb 22 15:47:29 2022 +0900

    [NETBEANS-5599] PHP 8.1 Support: New in initializers (Part 4)
    
    - https://issues.apache.org/jira/browse/NETBEANS-5599
    - RFC:https://wiki.php.net/rfc/new_in_initializers
    - Fix PHP81UnhandledError
---
 .../editor/parser/astnodes/StaticStatement.java    | 13 ++--
 .../editor/verification/PHP81UnhandledError.java   | 74 ++++++++++++++++++++++
 2 files changed, 83 insertions(+), 4 deletions(-)

diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/StaticStatement.java b/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/StaticStatement.java
index 6df3a4d..a45b6e1 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/StaticStatement.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/parser/astnodes/StaticStatement.java
@@ -20,17 +20,22 @@ package org.netbeans.modules.php.editor.parser.astnodes;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 
 /**
- * Represents the static statement
- * <pre>e.g.<pre> static $a
+ * Represents the static statement.
+ *
+ * e.g.
+ * <pre>
+ * static $a
  * static $a, $b=5;
+ * </pre>
  */
 public class StaticStatement extends Statement {
 
-    private ArrayList<Expression> expressions = new ArrayList<>();
+    private final ArrayList<Expression> expressions = new ArrayList<>();
 
     private StaticStatement(int start, int end, Expression[] expressions) {
         super(start, end);
@@ -65,7 +70,7 @@ public class StaticStatement extends Statement {
      * @return expression list of the static statement
      */
     public List<Expression> getExpressions() {
-        return this.expressions;
+        return Collections.unmodifiableList(this.expressions);
     }
 
     @Override
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP81UnhandledError.java b/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP81UnhandledError.java
index 5c58ff3..08bea92 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP81UnhandledError.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/verification/PHP81UnhandledError.java
@@ -30,10 +30,16 @@ import org.netbeans.modules.php.editor.CodeUtils;
 import org.netbeans.modules.php.editor.lexer.PHPTokenId;
 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.Assignment;
+import org.netbeans.modules.php.editor.parser.astnodes.AttributeDeclaration;
 import org.netbeans.modules.php.editor.parser.astnodes.BodyDeclaration;
+import org.netbeans.modules.php.editor.parser.astnodes.ClassInstanceCreation;
 import org.netbeans.modules.php.editor.parser.astnodes.ConstantDeclaration;
+import org.netbeans.modules.php.editor.parser.astnodes.Expression;
+import org.netbeans.modules.php.editor.parser.astnodes.FormalParameter;
 import org.netbeans.modules.php.editor.parser.astnodes.Identifier;
 import org.netbeans.modules.php.editor.parser.astnodes.IntersectionType;
+import org.netbeans.modules.php.editor.parser.astnodes.StaticStatement;
 import org.netbeans.modules.php.editor.parser.astnodes.visitors.DefaultVisitor;
 import org.openide.filesystems.FileObject;
 import org.openide.util.NbBundle;
@@ -102,16 +108,84 @@ public final class PHP81UnhandledError extends UnhandledErrorRule {
 
         @Override
         public void visit(IntersectionType node) {
+            if (CancelSupport.getDefault().isCancelled()) {
+                return;
+            }
             createError(node);
             super.visit(node);
         }
 
+        @Override
+        public void visit(StaticStatement node) {
+            // static $a = new A();
+            if (CancelSupport.getDefault().isCancelled()) {
+                return;
+            }
+            for (Expression expression : node.getExpressions()) {
+                if (CancelSupport.getDefault().isCancelled()) {
+                    return;
+                }
+                if (expression instanceof Assignment) {
+                    Assignment assignment = (Assignment) expression;
+                    if (assignment.getOperator() == Assignment.Type.EQUAL) {
+                        checkNewInInitializer(assignment.getRightHandSide());
+                    }
+                }
+            }
+            super.visit(node);
+        }
+
+        @Override
+        public void visit(FormalParameter node) {
+            // function func($param = new A()) {}
+            if (CancelSupport.getDefault().isCancelled()) {
+                return;
+            }
+            checkNewInInitializer(node.getDefaultValue());
+            super.visit(node);
+        }
+
+        @Override
+        public void visit(AttributeDeclaration attributeDeclaration) {
+            // #[AnAttribute(new A())]
+            if (CancelSupport.getDefault().isCancelled()) {
+                return;
+            }
+            List<Expression> parameters = attributeDeclaration.getParameters();
+            // #[MyAttribute] this case is null
+            if (parameters != null) {
+                for (Expression parameter : parameters) {
+                    if (CancelSupport.getDefault().isCancelled()) {
+                        return;
+                    }
+                    checkNewInInitializer(parameter);
+                }
+            }
+            super.visit(attributeDeclaration);
+        }
+
         private void checkConstantDeclaration(ConstantDeclaration constantDeclaration) {
             if (BodyDeclaration.Modifier.isFinal(constantDeclaration.getModifier())) {
                 for (Identifier name : constantDeclaration.getNames()) {
                     createError(name);
                 }
             }
+            // New in initializer
+            // const CONSTANT = new Constant();
+            if (constantDeclaration.isGlobal()) {
+                for (Expression initializer : constantDeclaration.getInitializers()) {
+                    if (CancelSupport.getDefault().isCancelled()) {
+                        return;
+                    }
+                    checkNewInInitializer(initializer);
+                }
+            }
+        }
+
+        private void checkNewInInitializer(Expression node) {
+            if (node instanceof ClassInstanceCreation) {
+                createError(node);
+            }
         }
 
         private void createError(ASTNode node) {

---------------------------------------------------------------------
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