Skip to content

Commit a1d34b0

Browse files
authored
SONARPHP-1554 Remove dependency to Apache Commons Lang (#1595)
1 parent b12631c commit a1d34b0

File tree

22 files changed

+97
-290
lines changed

22 files changed

+97
-290
lines changed

gradle/libs.versions.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ sslr = "1.24.0.633"
1010
junit = "6.0.0"
1111
assertj = "3.27.6"
1212
mockito = "5.20.0"
13-
commons-lang = "3.19.0"
1413
jsr305 = "3.0.2"
1514
staxmate = "2.0.1"
1615
awaitility = "4.3.0"
@@ -34,7 +33,6 @@ sslr-testing-harness = { module = "org.sonarsource.sslr:sslr-testing-harness", v
3433
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
3534
assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj" }
3635
mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" }
37-
commons-lang = { module = "org.apache.commons:commons-lang3", version.ref = "commons-lang" }
3836
jsr305 = { module = "com.google.code.findbugs:jsr305", version.ref = "jsr305" }
3937
# Version of JUnit Platform is taken from the JUnit BOM that is imported by junit-jupiter
4038
junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" }

php-checks/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ dependencies {
2525
compileOnly(libs.sonar.plugin.api)
2626
implementation(project(":php-frontend"))
2727
implementation(libs.sonar.analyzer.commons)
28-
implementation(libs.commons.lang)
2928

3029
testImplementation(testFixtures(project(":php-frontend")))
3130
testImplementation(libs.junit.jupiter)

php-checks/src/main/java/org/sonar/php/checks/ClassCouplingCheck.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.Locale;
2323
import java.util.Map;
2424
import java.util.Set;
25-
import org.apache.commons.lang3.StringUtils;
2625
import org.sonar.check.Rule;
2726
import org.sonar.check.RuleProperty;
2827
import org.sonar.php.parser.LexicalConstant;
@@ -168,7 +167,9 @@ private void retrieveTypeFromCommentLine(String line, Tree trivia) {
168167

169168
if (commentLine.length > 2 && DOC_TAGS.contains(commentLine[1])) {
170169
for (String type : commentLine[2].split("\\|")) {
171-
type = StringUtils.removeEnd(type, "[]");
170+
if (type.endsWith("[]")) {
171+
type = type.substring(0, type.length() - 2);
172+
}
172173

173174
if (!EXCLUDED_TYPES.contains(type.toLowerCase(Locale.ROOT))) {
174175
addType(type, trivia);
@@ -195,7 +196,7 @@ private void retrieveInstantiatedClassName(NewExpressionTree newExpression) {
195196
private static String getTypeName(NamespaceNameTree namespaceName) {
196197
String name = namespaceName.fullName();
197198
String prefix = "namespace\\";
198-
if (StringUtils.startsWithIgnoreCase(name, prefix)) {
199+
if (name.toLowerCase(Locale.ROOT).startsWith(prefix.toLowerCase(Locale.ROOT))) {
199200
// fixme (SONARPHP-552): Handle namespaces properly
200201
name = name.substring(prefix.length() - 1);
201202
}

php-checks/src/main/java/org/sonar/php/checks/FieldNameCheck.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.Collections;
2020
import java.util.List;
2121
import java.util.regex.Pattern;
22-
import org.apache.commons.lang3.StringUtils;
2322
import org.sonar.check.Rule;
2423
import org.sonar.check.RuleProperty;
2524
import org.sonar.plugins.php.api.tree.Tree;
@@ -58,7 +57,7 @@ public void visitNode(Tree tree) {
5857
ClassPropertyDeclarationTree property = (ClassPropertyDeclarationTree) tree;
5958
for (VariableDeclarationTree variableDeclarationTree : property.declarations()) {
6059
String propertyName = variableDeclarationTree.identifier().text();
61-
if (!pattern.matcher(StringUtils.remove(propertyName, "$")).matches()) {
60+
if (!pattern.matcher(propertyName.replace("$", "")).matches()) {
6261
context().newIssue(this, variableDeclarationTree.identifier(), String.format(MESSAGE, propertyName, format));
6362
}
6463
}

php-checks/src/main/java/org/sonar/php/checks/LocalVariableAndParameterNameCheck.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.List;
2424
import java.util.Set;
2525
import java.util.regex.Pattern;
26-
import org.apache.commons.lang3.StringUtils;
2726
import org.sonar.check.Rule;
2827
import org.sonar.check.RuleProperty;
2928
import org.sonar.php.checks.utils.CheckUtils;
@@ -128,7 +127,7 @@ private static ExpressionTree getLeftHandExpression(Tree assignmentExpr) {
128127
}
129128

130129
private boolean isCompliant(String varName) {
131-
return pattern.matcher(StringUtils.remove(varName, "$")).matches() || isSuperGlobal(varName);
130+
return pattern.matcher(varName.replace("$", "")).matches() || isSuperGlobal(varName);
132131
}
133132

134133
private static boolean isSuperGlobal(String varName) {

php-checks/src/main/java/org/sonar/php/checks/MethodNameReturningBooleanCheck.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package org.sonar.php.checks;
1818

19-
import org.apache.commons.lang3.StringUtils;
19+
import java.util.Locale;
2020
import org.sonar.check.Rule;
2121
import org.sonar.php.parser.LexicalConstant;
2222
import org.sonar.php.tree.impl.PHPTree;
@@ -50,7 +50,8 @@ private static boolean isReturningBoolean(MethodDeclarationTree methodDeclaratio
5050
for (SyntaxTrivia comment : ((PHPTree) methodDeclaration).getFirstToken().trivias()) {
5151
for (String line : comment.text().split(LexicalConstant.LINE_TERMINATOR)) {
5252

53-
if (StringUtils.containsIgnoreCase(line, RETURN_TAG)) {
53+
if (line.toLowerCase(Locale.ROOT).contains(RETURN_TAG)) {
54+
5455
return returnsBoolean(line);
5556
}
5657
}

php-checks/src/main/java/org/sonar/php/checks/UselessExpressionStatementCheck.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121
import java.util.regex.Pattern;
22-
import org.apache.commons.lang3.tuple.Pair;
2322
import org.sonar.check.Rule;
2423
import org.sonar.php.checks.utils.CheckUtils;
2524
import org.sonar.plugins.php.api.tree.CompilationUnitTree;
@@ -36,6 +35,7 @@
3635
public class UselessExpressionStatementCheck extends PHPVisitorCheck {
3736

3837
public static final String KEY = "S905";
38+
3939
private static final String MESSAGE = "Remove or refactor this statement.";
4040
private static final String MESSAGE_PARTIAL = "This statement part is useless, remove or refactor it.";
4141
private static final String MESSAGE_OPERATOR = "This binary operation is useless, remove it.";
@@ -88,7 +88,7 @@ public class UselessExpressionStatementCheck extends PHPVisitorCheck {
8888

8989
private boolean fileContainsHTML;
9090
private List<Tree> uselessNodes;
91-
private List<Pair<Tree, Tree>> uselessPartialNodes;
91+
private List<TreePair> uselessPartialNodes;
9292
private List<Tree> uselessOperatorNodes;
9393

9494
@Override
@@ -104,8 +104,8 @@ public void visitCompilationUnit(CompilationUnitTree tree) {
104104
for (Tree uselessNode : uselessNodes) {
105105
context().newIssue(this, uselessNode, MESSAGE);
106106
}
107-
for (Pair<Tree, Tree> uselessPartialNode : uselessPartialNodes) {
108-
context().newIssue(this, uselessPartialNode.getLeft(), uselessPartialNode.getRight(), MESSAGE_PARTIAL);
107+
for (TreePair uselessPartialNode : uselessPartialNodes) {
108+
context().newIssue(this, uselessPartialNode.left, uselessPartialNode.right, MESSAGE_PARTIAL);
109109
}
110110
for (Tree uselessOperatorNode : uselessOperatorNodes) {
111111
context().newIssue(this, uselessOperatorNode, MESSAGE_OPERATOR);
@@ -137,9 +137,9 @@ private void checkBinaryExpression(BinaryExpressionTree binaryExpression) {
137137
if (isLeftUseless && isRightUseless) {
138138
uselessNodes.add(binaryExpression);
139139
} else if (isLeftUseless) {
140-
uselessPartialNodes.add(Pair.of(binaryExpression.leftOperand(), binaryExpression.operator()));
140+
uselessPartialNodes.add(TreePair.of(binaryExpression.leftOperand(), binaryExpression.operator()));
141141
} else if (isRightUseless) {
142-
uselessPartialNodes.add(Pair.of(binaryExpression.operator(), binaryExpression.rightOperand()));
142+
uselessPartialNodes.add(TreePair.of(binaryExpression.operator(), binaryExpression.rightOperand()));
143143
} else {
144144
uselessOperatorNodes.add(binaryExpression.operator());
145145
}
@@ -162,4 +162,10 @@ public void visitToken(SyntaxToken token) {
162162
fileContainsHTML = true;
163163
}
164164
}
165+
166+
private record TreePair(Tree left, Tree right) {
167+
static TreePair of(Tree left, Tree right) {
168+
return new TreePair(left, right);
169+
}
170+
}
165171
}

php-checks/src/main/java/org/sonar/php/checks/utils/AbstractCommentContainsPatternCheck.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package org.sonar.php.checks.utils;
1818

19-
import org.apache.commons.lang3.StringUtils;
19+
import java.util.Locale;
2020
import org.sonar.plugins.php.api.tree.lexical.SyntaxTrivia;
2121
import org.sonar.plugins.php.api.visitors.PHPVisitorCheck;
2222

@@ -29,20 +29,19 @@ public abstract class AbstractCommentContainsPatternCheck extends PHPVisitorChec
2929
@Override
3030
public void visitTrivia(SyntaxTrivia trivia) {
3131
String comment = trivia.text();
32-
33-
if (StringUtils.containsIgnoreCase(comment, pattern())) {
32+
if (comment.toLowerCase(Locale.ROOT).contains(pattern().toLowerCase(Locale.ROOT))) {
3433
String[] lines = comment.split("\r\n?|\n");
3534

3635
for (int i = 0; i < lines.length; i++) {
37-
if (StringUtils.containsIgnoreCase(lines[i], pattern()) && !isLetterAround(lines[i])) {
36+
if (lines[i].toLowerCase(Locale.ROOT).contains(pattern().toLowerCase(Locale.ROOT)) && !isLetterAround(lines[i])) {
3837
createIssue(trivia.line() + i);
3938
}
4039
}
4140
}
4241
}
4342

4443
private boolean isLetterAround(String line) {
45-
int start = StringUtils.indexOfIgnoreCase(line, pattern());
44+
int start = line.toLowerCase(Locale.ROOT).indexOf(pattern().toLowerCase(Locale.ROOT));
4645
int end = start + pattern().length();
4746

4847
boolean pre = start > 0 && Character.isLetter(line.charAt(start - 1));

php-checks/src/test/java/org/sonar/php/checks/FormattingStandardCheckTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.sonar.php.checks;
1818

1919
import java.lang.reflect.Field;
20-
import org.apache.commons.lang3.ArrayUtils;
20+
import java.util.Arrays;
2121

2222
public abstract class FormattingStandardCheckTest {
2323

@@ -29,7 +29,7 @@ protected void activeOnly(String... fieldNames) throws IllegalAccessException {
2929
if (!f.getType().equals(boolean.class)) {
3030
continue;
3131
}
32-
f.setBoolean(check, ArrayUtils.contains(fieldNames, f.getName()));
32+
f.setBoolean(check, Arrays.asList(fieldNames).contains(f.getName()));
3333
}
3434
}
3535

php-frontend/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ dependencies {
2727
api(libs.sonar.regex.parsing)
2828

2929
compileOnly(libs.sonar.plugin.api)
30-
implementation(libs.commons.lang)
3130

3231
testImplementation(libs.junit.jupiter)
3332
testImplementation(libs.mockito.core)

0 commit comments

Comments
 (0)