You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ju...@apache.org on 2020/11/29 23:15:27 UTC
[netbeans] branch master updated: [NETBEANS-5052] Mark unused
private constants
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 24c4275 [NETBEANS-5052] Mark unused private constants
new e9bd4c3 Merge pull request #2555 from KacerCZ/netbeans-5052-unused-private-const
24c4275 is described below
commit 24c42759a8b79625c3aafb009578c4e1537238a7
Author: Tomas Prochazka <ka...@razdva.cz>
AuthorDate: Sun Nov 22 17:06:08 2020 +0100
[NETBEANS-5052] Mark unused private constants
https://issues.apache.org/jira/browse/NETBEANS-5052
Marks unused private constants in PHP Editor in same way as unused private fields and methods.
---
.../modules/php/editor/csl/SemanticAnalysis.java | 31 +++++++++++++++++++---
.../data/testfiles/semantic/anonymousClass01.php | 3 +++
.../semantic/anonymousClass01.php.semantic | 3 +++
.../test/unit/data/testfiles/semantic/class005.php | 5 ++++
.../data/testfiles/semantic/class005.php.semantic | 5 ++++
.../data/testfiles/semantic/unusedPrivateConst.php | 13 +++++++++
.../semantic/unusedPrivateConst.php.semantic | 13 +++++++++
.../php/editor/csl/SemanticAnalyzerTest.java | 4 +++
8 files changed, 73 insertions(+), 4 deletions(-)
diff --git a/php/php.editor/src/org/netbeans/modules/php/editor/csl/SemanticAnalysis.java b/php/php.editor/src/org/netbeans/modules/php/editor/csl/SemanticAnalysis.java
index 8dfbf64..0af6a37 100644
--- a/php/php.editor/src/org/netbeans/modules/php/editor/csl/SemanticAnalysis.java
+++ b/php/php.editor/src/org/netbeans/modules/php/editor/csl/SemanticAnalysis.java
@@ -213,6 +213,8 @@ public class SemanticAnalysis extends SemanticAnalyzer {
}
Map<OffsetRange, Set<ColoringAttributes>> highlights;
+ // for unsed private constant: name, identifier
+ private final Map<UnusedIdentifier, ASTNodeColoring> privateUnusedConstants;
// for unused private fields: name, varible
// if isused, then it's deleted from the list and marked as the field
private final Map<UnusedIdentifier, ASTNodeColoring> privateFieldsUnused;
@@ -241,6 +243,7 @@ public class SemanticAnalysis extends SemanticAnalyzer {
public SemanticHighlightVisitor(Map<OffsetRange, Set<ColoringAttributes>> highlights, Snapshot snapshot, Model model) {
this.highlights = highlights;
+ privateUnusedConstants = new HashMap<>();
privateFieldsUnused = new HashMap<>();
privateUnusedMethods = new HashMap<>();
this.snapshot = snapshot;
@@ -325,6 +328,16 @@ public class SemanticAnalysis extends SemanticAnalyzer {
}
}
+ private void addColoringForUnusedPrivateConstants() {
+ for (ASTNodeColoring item : privateUnusedConstants.values()) {
+ if (item.coloring.contains(ColoringAttributes.DEPRECATED)) {
+ addColoringForNode(item.identifier, DEPRECATED_UNUSED_STATIC_FIELD_SET);
+ } else {
+ addColoringForNode(item.identifier, UNUSED_STATIC_FIELD_SET);
+ }
+ }
+ }
+
@Override
public void scan(ASTNode node) {
if (!isCancelled()) {
@@ -377,6 +390,7 @@ public class SemanticAnalysis extends SemanticAnalyzer {
Block block = needToScan.remove(0);
block.accept(this);
}
+ addColoringForUnusedPrivateConstants();
addColoringForUnusedPrivateFields();
}
removeFromPath();
@@ -550,6 +564,7 @@ public class SemanticAnalysis extends SemanticAnalyzer {
Block block = needToScan.remove(0);
block.accept(this);
}
+ addColoringForUnusedPrivateConstants();
addColoringForUnusedPrivateFields();
}
removeFromPath();
@@ -727,11 +742,15 @@ public class SemanticAnalysis extends SemanticAnalyzer {
parentNode = path.get(1);
}
if (parentNode instanceof ClassDeclaration || parentNode instanceof InterfaceDeclaration
- || parentNode instanceof TraitDeclaration) {
+ || parentNode instanceof ClassInstanceCreation) {
+ boolean isPrivate = Modifier.isPrivate(node.getModifier());
List<Identifier> names = node.getNames();
- if (!names.isEmpty()) {
- for (Identifier identifier : names) {
- addColoringForNode(identifier, createConstantDeclarationColoring(identifier));
+ for (Identifier identifier : names) {
+ Set<ColoringAttributes> coloring = createConstantDeclarationColoring(identifier);
+ if (!isPrivate) {
+ addColoringForNode(identifier, coloring);
+ } else {
+ privateUnusedConstants.put(new UnusedIdentifier(identifier.getName(), typeInfo), new ASTNodeColoring(identifier, coloring));
}
}
}
@@ -770,6 +789,10 @@ public class SemanticAnalysis extends SemanticAnalyzer {
}
Identifier constant = node.getConstantName();
if (constant != null) {
+ ASTNodeColoring item = privateUnusedConstants.remove(new UnusedIdentifier(constant.getName(), typeInfo));
+ if (item != null) {
+ addColoringForNode(item.identifier, item.coloring);
+ }
addColoringForNode(constant, ColoringAttributes.STATIC_FIELD_SET);
}
super.visit(node);
diff --git a/php/php.editor/test/unit/data/testfiles/semantic/anonymousClass01.php b/php/php.editor/test/unit/data/testfiles/semantic/anonymousClass01.php
index dd77281..b71435c 100644
--- a/php/php.editor/test/unit/data/testfiles/semantic/anonymousClass01.php
+++ b/php/php.editor/test/unit/data/testfiles/semantic/anonymousClass01.php
@@ -1,6 +1,8 @@
<?php
new class {
+ private const USED_PRIVATE_CONST = 1;
+ private const UNUSED_PRIVATE_CONST = 2;
private $usedField;
private $unusedField;
private static $usedStaticField;
@@ -8,6 +10,7 @@ new class {
public function publicMethod() {
+ self::USED_PRIVATE_CONST;
$this->usedField = 10;
self::$usedStaticField = 20;
$this->usedPrivateMethod();
diff --git a/php/php.editor/test/unit/data/testfiles/semantic/anonymousClass01.php.semantic b/php/php.editor/test/unit/data/testfiles/semantic/anonymousClass01.php.semantic
index 0fdedbc..4a5722d 100644
--- a/php/php.editor/test/unit/data/testfiles/semantic/anonymousClass01.php.semantic
+++ b/php/php.editor/test/unit/data/testfiles/semantic/anonymousClass01.php.semantic
@@ -1,6 +1,8 @@
<?php
new class {
+ private const |>FIELD,STATIC:USED_PRIVATE_CONST<| = 1;
+ private const |>FIELD,STATIC,UNUSED:UNUSED_PRIVATE_CONST<| = 2;
private $|>FIELD:usedField<|;
private $|>FIELD,UNUSED:unusedField<|;
private static $|>FIELD,STATIC:usedStaticField<|;
@@ -8,6 +10,7 @@ new class {
public function |>METHOD:publicMethod<|() {
+ self::|>FIELD,STATIC:USED_PRIVATE_CONST<|;
$this->|>FIELD:usedField<| = 10;
self::$|>FIELD,STATIC:usedStaticField<| = 20;
$this->|>CUSTOM1:usedPrivateMethod<|();
diff --git a/php/php.editor/test/unit/data/testfiles/semantic/class005.php b/php/php.editor/test/unit/data/testfiles/semantic/class005.php
index 4d4bd5f..5a278a6 100644
--- a/php/php.editor/test/unit/data/testfiles/semantic/class005.php
+++ b/php/php.editor/test/unit/data/testfiles/semantic/class005.php
@@ -1,5 +1,9 @@
<?php
class person { // class name
+ public const MIN_AGE = 1; // public constant
+ protected const MAX_AGE = 150; // protected constant
+ private const SETTING1 = 'abc'; // used private constant
+ private const SETTING2 = 5; // unused private constant
private $name; // class field declaration
public $me = "mydefaultname"; // class field declaration
private $you; // unused private class field
@@ -11,6 +15,7 @@ class person { // class name
echo $this->$name."\n"; // $name is on class field
echo $this->name."\n"; // usage of class field
person::$count = person::$count + 1;
+ echo self::SETTING1."\n";
}
private function yourName() { // unused method
diff --git a/php/php.editor/test/unit/data/testfiles/semantic/class005.php.semantic b/php/php.editor/test/unit/data/testfiles/semantic/class005.php.semantic
index 034d455..932eee4 100644
--- a/php/php.editor/test/unit/data/testfiles/semantic/class005.php.semantic
+++ b/php/php.editor/test/unit/data/testfiles/semantic/class005.php.semantic
@@ -1,5 +1,9 @@
<?php
class |>CLASS:person<| { // class name
+ public const |>FIELD,STATIC:MIN_AGE<| = 1; // public constant
+ protected const |>FIELD,STATIC:MAX_AGE<| = 150; // protected constant
+ private const |>FIELD,STATIC:SETTING1<| = 'abc'; // used private constant
+ private const |>FIELD,STATIC,UNUSED:SETTING2<| = 5; // unused private constant
private $|>FIELD:name<|; // class field declaration
public $|>FIELD:me<| = "mydefaultname"; // class field declaration
private $|>FIELD,UNUSED:you<|; // unused private class field
@@ -11,6 +15,7 @@ class |>CLASS:person<| { // class name
echo $this->$name."\n"; // $name is on class field
echo $this->|>FIELD:name<|."\n"; // usage of class field
person::$|>FIELD,STATIC:count<| = person::$|>FIELD,STATIC:count<| + 1;
+ echo self::|>FIELD,STATIC:SETTING1<|."\n";
}
private function |>METHOD,UNUSED:yourName<|() { // unused method
diff --git a/php/php.editor/test/unit/data/testfiles/semantic/unusedPrivateConst.php b/php/php.editor/test/unit/data/testfiles/semantic/unusedPrivateConst.php
new file mode 100644
index 0000000..c87701c
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/semantic/unusedPrivateConst.php
@@ -0,0 +1,13 @@
+<?php
+
+class Foo {
+
+ public const PUBLIC_CONST = 1;
+ protected const PROTECTED_CONST = 2;
+ private const USED_PRIVATE = 3;
+ private const UNUSED_PRIVATE = 4;
+
+ function bar() {
+ return self::USED_PRIVATE;
+ }
+}
diff --git a/php/php.editor/test/unit/data/testfiles/semantic/unusedPrivateConst.php.semantic b/php/php.editor/test/unit/data/testfiles/semantic/unusedPrivateConst.php.semantic
new file mode 100644
index 0000000..966d56e
--- /dev/null
+++ b/php/php.editor/test/unit/data/testfiles/semantic/unusedPrivateConst.php.semantic
@@ -0,0 +1,13 @@
+<?php
+
+class |>CLASS:Foo<| {
+
+ public const |>FIELD,STATIC:PUBLIC_CONST<| = 1;
+ protected const |>FIELD,STATIC:PROTECTED_CONST<| = 2;
+ private const |>FIELD,STATIC:USED_PRIVATE<| = 3;
+ private const |>FIELD,STATIC,UNUSED:UNUSED_PRIVATE<| = 4;
+
+ function |>METHOD:bar<|() {
+ return self::|>FIELD,STATIC:USED_PRIVATE<|;
+ }
+}
diff --git a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/csl/SemanticAnalyzerTest.java b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/csl/SemanticAnalyzerTest.java
index ba14216..f943e6d 100644
--- a/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/csl/SemanticAnalyzerTest.java
+++ b/php/php.editor/test/unit/src/org/netbeans/modules/php/editor/csl/SemanticAnalyzerTest.java
@@ -47,6 +47,10 @@ public class SemanticAnalyzerTest extends SemanticAnalysisTestBase {
checkSemantic("testfiles/semantic/class002.php");
}
+ public void testAnalysisUnusedPrivateConstant() throws Exception {
+ checkSemantic("testfiles/semantic/unusedPrivateConst.php");
+ }
+
public void testAnalysisUnusedPrivateField() throws Exception {
checkSemantic("testfiles/semantic/class003.php");
}
---------------------------------------------------------------------
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