Skip to content

Commit 16f76a3

Browse files
committed
Exclude static fields from records's methods
1 parent e501c48 commit 16f76a3

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

example/src/main/java/com/example/RecordExample.java

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
@Desugar
66
public record RecordExample(int i, String s, long l, float f, double d, String[] arr) {
7+
8+
public static RecordExample DUMMY = new RecordExample(0, null, 0, 0, 0, null);
9+
710
public RecordExample {
811
if (i > 1_000_000) {
912
throw new IllegalArgumentException("'i' is too big");

example/src/test/java/com/example/RecordExampleTest.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,9 @@ public void testNotEquals() {
6262

6363
@Test
6464
public void testHashCodeWithDefaults() {
65-
RecordExample r = new RecordExample(0, null, 0, 0f, 5d, null);
6665
assertEquals(
67-
intellijStyleHashCode(r),
68-
Objects.hashCode(r)
66+
intellijStyleHashCode(RecordExample.DUMMY),
67+
Objects.hashCode(RecordExample.DUMMY)
6968
);
7069
}
7170

jabel-javac-plugin/src/main/java/com/github/bsideup/jabel/RecordsRetrofittingTaskListener.java

+20-14
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.sun.tools.javac.tree.TreeMaker;
1111
import com.sun.tools.javac.util.*;
1212

13+
import javax.lang.model.element.Modifier;
1314
import javax.tools.JavaFileObject;
1415
import java.util.Iterator;
1516
import java.util.stream.Stream;
@@ -176,6 +177,13 @@ public Void visitClass(ClassTree node, Void aVoid) {
176177
public void finished(TaskEvent e) {
177178
}
178179

180+
private Stream<JCTree.JCVariableDecl> getRecordComponents(JCTree.JCClassDecl classDecl) {
181+
return classDecl.getMembers().stream()
182+
.filter(JCTree.JCVariableDecl.class::isInstance)
183+
.map(JCTree.JCVariableDecl.class::cast)
184+
.filter(it -> !it.getModifiers().getFlags().contains(Modifier.STATIC));
185+
}
186+
179187
private List<JCTree.JCStatement> generateToString(JCTree.JCClassDecl classDecl) {
180188
JCTree.JCExpression stringBuilder = make.NewClass(
181189
null,
@@ -185,11 +193,8 @@ private List<JCTree.JCStatement> generateToString(JCTree.JCClassDecl classDecl)
185193
null
186194
);
187195

188-
Stream<JCTree.JCVariableDecl> fields = classDecl.getMembers().stream()
189-
.filter(JCTree.JCVariableDecl.class::isInstance)
190-
.map(JCTree.JCVariableDecl.class::cast);
191196
for (
192-
Iterator<JCTree.JCVariableDecl> iterator = fields.iterator();
197+
Iterator<JCTree.JCVariableDecl> iterator = getRecordComponents(classDecl).iterator();
193198
iterator.hasNext();
194199
) {
195200
JCTree.JCVariableDecl fieldDecl = iterator.next();
@@ -274,11 +279,12 @@ private List<JCTree.JCStatement> generateEquals(JCTree.JCClassDecl classDecl, Na
274279

275280
// fields
276281
{
277-
for (JCTree member : classDecl.getMembers()) {
278-
if (!(member instanceof JCTree.JCVariableDecl)) {
279-
continue;
280-
}
281-
JCTree.JCVariableDecl fieldDecl = (JCTree.JCVariableDecl) member;
282+
for (
283+
Iterator<JCTree.JCVariableDecl> iterator = getRecordComponents(classDecl).iterator();
284+
iterator.hasNext();
285+
) {
286+
JCTree.JCVariableDecl fieldDecl = iterator.next();
287+
282288
JCTree.JCExpression myFieldAccess = make.Select(make.This(Type.noType), fieldDecl.name);
283289
JCTree.JCExpression otherFieldAccess = make.Select(
284290
make.TypeCast(make.Ident(classDecl.name), make.Ident(otherName)),
@@ -313,11 +319,11 @@ private List<JCTree.JCStatement> generateEquals(JCTree.JCClassDecl classDecl, Na
313319
private List<JCTree.JCStatement> generateHashCode(JCTree.JCClassDecl classDecl) {
314320
ListBuffer<JCTree.JCExpression> expressions = new ListBuffer<>();
315321

316-
for (JCTree member : classDecl.getMembers()) {
317-
if (!(member instanceof JCTree.JCVariableDecl)) {
318-
continue;
319-
}
320-
JCTree.JCVariableDecl fieldDecl = (JCTree.JCVariableDecl) member;
322+
for (
323+
Iterator<JCTree.JCVariableDecl> iterator = getRecordComponents(classDecl).iterator();
324+
iterator.hasNext();
325+
) {
326+
JCTree.JCVariableDecl fieldDecl = iterator.next();
321327

322328
JCTree fType = fieldDecl.getType();
323329

0 commit comments

Comments
 (0)