Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e3705d5

Browse files
authoredApr 7, 2025··
SONARJAVA-5338 Revert Fix variable owner in the case of lambdas (#5079)
This reverts PR #5058, commit 724caf8. This commit caused a regression on Peach. Some issues with S2325 were lost.
1 parent 323a232 commit e3705d5

File tree

7 files changed

+29
-355
lines changed

7 files changed

+29
-355
lines changed
 

‎java-checks-test-sources/default/src/main/java/checks/VarCanBeUsedCheck.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.io.FileInputStream;
55
import java.io.IOException;
66
import java.util.ArrayList;
7-
import java.util.Comparator;
87
import java.util.List;
98
import java.util.function.Consumer;
109
import java.util.function.Function;
@@ -147,23 +146,6 @@ Object objectToObject2(Object o) {
147146
}
148147
}
149148

150-
class VarCanBeUsedInLambdas {
151-
public static final Comparator<Integer> COMPARATOR = (e1, e2) -> {
152-
int compare = Integer.compare(e1, e2); // Noncompliant {{Declare this local variable with "var" instead.}}
153-
return compare != 0 ? compare : Integer.compare(e2, e1);
154-
};
155-
156-
public static int foo() {
157-
java.util.function.IntSupplier supplier = () -> {
158-
var sum = 0;
159-
for (int i = 0; i < 10; i++) { // Noncompliant {{Declare this local variable with "var" instead.}}
160-
sum += i;
161-
}
162-
return sum;
163-
};
164-
return supplier.getAsInt();
165-
}
166-
}
167149

168150
class Abc {
169151
static Abc getAbc() {

‎java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,6 @@ IMethodBinding methodBinding() {
7171
return (IMethodBinding) binding;
7272
}
7373

74-
public boolean isLambda() {
75-
return methodBinding().getDeclaringMember() != null;
76-
}
77-
7874
@Override
7975
public List<Type> parameterTypes() {
8076
if (parameterTypes == null) {
@@ -212,10 +208,4 @@ public MethodTree declaration() {
212208
public boolean isNativeMethod() {
213209
return !isUnknown() && Modifier.isNative(binding.getModifiers());
214210
}
215-
216-
/** This is for debugging and doesn't follow a guaranteed format. */
217-
@Override
218-
public String toString() {
219-
return binding.getKey();
220-
}
221211
}

‎java-frontend/src/main/java/org/sonar/java/model/JSymbol.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.sonar.java.model;
1818

1919
import java.util.ArrayList;
20+
import java.util.Arrays;
2021
import java.util.Collections;
2122
import java.util.List;
2223
import java.util.Objects;
@@ -102,7 +103,11 @@ private static boolean areEqualVariables(JSymbol thisVariableSymbol, JSymbol oth
102103
private static boolean areEqualMethods(JSymbol thisMethodSymbol, JSymbol otherMethodSymbol) {
103104
IMethodBinding thisBinding = (IMethodBinding) thisMethodSymbol.binding;
104105
IMethodBinding otherBinding = (IMethodBinding) otherMethodSymbol.binding;
105-
return Objects.equals(thisBinding.getKey(), otherBinding.getKey());
106+
return thisMethodSymbol.name().equals(otherMethodSymbol.name())
107+
&& thisMethodSymbol.owner().equals(otherMethodSymbol.owner())
108+
&& Arrays.equals(thisBinding.getParameterTypes(), otherBinding.getParameterTypes())
109+
&& Arrays.equals(thisBinding.getTypeParameters(), otherBinding.getTypeParameters())
110+
&& Arrays.equals(thisBinding.getTypeArguments(), otherBinding.getTypeArguments());
106111
}
107112

108113
@Override
@@ -189,6 +194,7 @@ private Symbol variableOwner(IVariableBinding variableBinding) {
189194
if (!variableBinding.isRecordComponent()) {
190195
IMethodBinding declaringMethod = variableBinding.getDeclaringMethod();
191196
if (declaringMethod != null) {
197+
// local variable
192198
return sema.methodSymbol(declaringMethod);
193199
}
194200
ITypeBinding declaringClass = variableBinding.getDeclaringClass();
@@ -197,10 +203,6 @@ private Symbol variableOwner(IVariableBinding variableBinding) {
197203
return sema.typeSymbol(declaringClass);
198204
}
199205
}
200-
return ownerOfRecordComponentConstant(variableBinding);
201-
}
202-
203-
private Symbol ownerOfRecordComponentConstant(IVariableBinding variableBinding) {
204206
Tree node = sema.declarations.get(variableBinding);
205207
if (node == null) {
206208
// array.length

‎java-frontend/src/test/java/org/sonar/java/model/JMethodSymbolTest.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,11 @@
3939
import org.sonar.plugins.java.api.semantic.Symbol;
4040
import org.sonar.plugins.java.api.semantic.Type;
4141
import org.sonar.plugins.java.api.tree.ExpressionStatementTree;
42-
import org.sonar.plugins.java.api.tree.LambdaExpressionTree;
4342
import org.sonar.plugins.java.api.tree.MethodInvocationTree;
4443
import org.sonar.plugins.java.api.tree.StatementTree;
45-
import org.sonar.plugins.java.api.tree.VariableTree;
4644

4745
import static org.assertj.core.api.Assertions.assertThat;
4846
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
49-
import static org.junit.jupiter.api.Assertions.assertFalse;
50-
import static org.junit.jupiter.api.Assertions.assertTrue;
5147
import static org.junit.jupiter.api.Assertions.fail;
5248
import static org.mockito.Mockito.mock;
5349
import static org.mockito.Mockito.spy;
@@ -502,25 +498,4 @@ void unknown_method_is_not_native() {
502498
}
503499
}
504500

505-
@Test
506-
void isLambda() {
507-
JavaTree.CompilationUnitTreeImpl cu = test("""
508-
class A {
509-
void foo() { }
510-
java.util.function.IntConsumer bar = i -> { };
511-
}
512-
""");
513-
ClassTreeImpl a = firstClass(cu);
514-
515-
MethodTreeImpl foo = firstMethod(a);
516-
var fooSymbol = (JMethodSymbol) foo.symbol();
517-
assertFalse(fooSymbol.isLambda());
518-
assertThat(fooSymbol.toString()).isNotEmpty();
519-
520-
var barAssignement = (VariableTree) a.members().get(1);
521-
var initializer = (LambdaExpressionTree) barAssignement.initializer();
522-
var lambdaSymbol = (JMethodSymbol) initializer.symbol();
523-
assertTrue(lambdaSymbol.isLambda());
524-
assertThat(lambdaSymbol.toString()).isNotEmpty();
525-
}
526501
}

0 commit comments

Comments
 (0)
Please sign in to comment.