diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/CodeUtils.java b/php/php.editor/src/org/netbeans/modules/php/editor/CodeUtils.java index fcc307ef3106..d87712a33306 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/CodeUtils.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/CodeUtils.java @@ -690,6 +690,15 @@ public static boolean isConstructor(MethodDeclaration node) { return "__construct".equals(extractMethodName(node)); //NOI18N } + public static boolean isDollaredName(ClassName className) { + Expression name = className.getName(); + if (name instanceof Variable) { + Variable variable = (Variable) name; + return variable.isDollared(); + } + return false; + } + /** * Finds common namespace prefixes for the given sorted namespaces. *

diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/verification/AbstractClassInstantiationHintError.java b/php/php.editor/src/org/netbeans/modules/php/editor/verification/AbstractClassInstantiationHintError.java index f1d3dcc389dc..375807bed5ac 100644 --- a/php/php.editor/src/org/netbeans/modules/php/editor/verification/AbstractClassInstantiationHintError.java +++ b/php/php.editor/src/org/netbeans/modules/php/editor/verification/AbstractClassInstantiationHintError.java @@ -19,11 +19,13 @@ package org.netbeans.modules.php.editor.verification; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Set; import org.netbeans.modules.csl.api.Hint; import org.netbeans.modules.csl.api.OffsetRange; import org.netbeans.modules.csl.spi.support.CancelSupport; +import org.netbeans.modules.php.editor.CodeUtils; import org.netbeans.modules.php.editor.api.ElementQuery.Index; import org.netbeans.modules.php.editor.api.NameKind; import org.netbeans.modules.php.editor.api.QualifiedName; @@ -79,7 +81,7 @@ private CheckVisitor(FileObject fileObject, Index index, Model model) { } public List getHints() { - return hints; + return Collections.unmodifiableList(hints); } @Override @@ -88,7 +90,12 @@ public List getHints() { "AbstractClassInstantiationDesc=Abstract class {0} can not be instantiated" }) public void visit(ClassInstanceCreation node) { - if (CancelSupport.getDefault().isCancelled()) { + if (CancelSupport.getDefault().isCancelled() + || CodeUtils.isDollaredName(node.getClassName())) { + // GH-6119 + // e.g. + // abstract class AbstractClass {} + // $a = new $abstractClass(); return; } ASTNodeInfo info = ASTNodeInfo.create(node); @@ -110,7 +117,6 @@ public void visit(ClassInstanceCreation node) { } } } - } @Override diff --git a/php/php.editor/test/unit/data/testfiles/verification/AbstractClassInstantiationHint/gh6119.php b/php/php.editor/test/unit/data/testfiles/verification/AbstractClassInstantiationHint/gh6119.php new file mode 100644 index 000000000000..105ae28aa97f --- /dev/null +++ b/php/php.editor/test/unit/data/testfiles/verification/AbstractClassInstantiationHint/gh6119.php @@ -0,0 +1,23 @@ +