aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorReinier Zwitserloot <r.zwitserloot@projectlombok.org>2023-01-12 01:40:23 +0100
committerGitHub <noreply@github.com>2023-01-12 01:40:23 +0100
commitef916881ad85371b905b0104072df2a2b133eee8 (patch)
treeb9ab8f366f655c9904747eda8eb815003d2e6956 /src
parentf090e50d0d5d75c121b6170927b1e776160eb37d (diff)
parent0fcb446265348753c2b448f98f2ad020d6d07d13 (diff)
downloadlombok-ef916881ad85371b905b0104072df2a2b133eee8.tar.gz
lombok-ef916881ad85371b905b0104072df2a2b133eee8.tar.bz2
lombok-ef916881ad85371b905b0104072df2a2b133eee8.zip
Merge pull request #3215 from janrieke/superBuilderExtendsClauseCollisions
SuperBuilder: check extends/implements for collisions (fixes #3202)
Diffstat (limited to 'src')
-rw-r--r--src/core/lombok/eclipse/handlers/HandleSuperBuilder.java22
-rw-r--r--src/core/lombok/javac/handlers/HandleSuperBuilder.java19
2 files changed, 37 insertions, 4 deletions
diff --git a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java
index 0d327d5f..19e7c391 100644
--- a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java
+++ b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java
@@ -51,7 +51,6 @@ import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
import org.eclipse.jdt.internal.compiler.ast.FieldReference;
import org.eclipse.jdt.internal.compiler.ast.IfStatement;
import org.eclipse.jdt.internal.compiler.ast.Initializer;
-import org.eclipse.jdt.internal.compiler.ast.MarkerAnnotation;
import org.eclipse.jdt.internal.compiler.ast.MessageSend;
import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.NullLiteral;
@@ -1100,14 +1099,29 @@ public class HandleSuperBuilder extends EclipseAnnotationHandler<SuperBuilder> {
if (td.fields != null) {
for (FieldDeclaration field : td.fields) {
if (field instanceof Initializer) continue;
- char[][] typeName = field.type.getTypeName();
- if (typeName.length >= 1) // Add the first token, because only that can collide.
- usedNames.add(String.valueOf(typeName[0]));
+ addFirstToken(usedNames, field.type);
+ }
+ }
+
+ // 4. Add extends and implements clauses.
+ addFirstToken(usedNames, td.superclass);
+ if (td.superInterfaces != null) {
+ for (TypeReference typeReference : td.superInterfaces) {
+ addFirstToken(usedNames, typeReference);
}
}
return usedNames;
}
+
+ private void addFirstToken(java.util.Set<String> usedNames, TypeReference type) {
+ if (type == null)
+ return;
+ // Add the first token, because only that can collide.
+ char[][] typeName = type.getTypeName();
+ if (typeName != null && typeName.length >= 1)
+ usedNames.add(String.valueOf(typeName[0]));
+ }
private String generateNonclashingNameFor(String classGenericName, java.util.Set<String> typeParamStrings) {
if (!typeParamStrings.contains(classGenericName)) return classGenericName;
diff --git a/src/core/lombok/javac/handlers/HandleSuperBuilder.java b/src/core/lombok/javac/handlers/HandleSuperBuilder.java
index 7418ac87..3b66f076 100644
--- a/src/core/lombok/javac/handlers/HandleSuperBuilder.java
+++ b/src/core/lombok/javac/handlers/HandleSuperBuilder.java
@@ -1051,9 +1051,28 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> {
}
}
+ // 4. Add extends and implements clauses.
+ addFirstToken(usedNames, Javac.getExtendsClause(td));
+ for (JCExpression impl : td.getImplementsClause()) {
+ addFirstToken(usedNames, impl);
+ }
+
return usedNames;
}
+ private void addFirstToken(java.util.Set<String> usedNames, JCTree type) {
+ if (type == null)
+ return;
+ if (type instanceof JCTypeApply) {
+ type = ((JCTypeApply)type).clazz;
+ }
+ while (type instanceof JCFieldAccess && ((JCFieldAccess)type).selected != null) {
+ // Add the first token, because only that can collide.
+ type = ((JCFieldAccess)type).selected;
+ }
+ usedNames.add(type.toString());
+ }
+
private String generateNonclashingNameFor(String classGenericName, java.util.HashSet<String> typeParamStrings) {
if (!typeParamStrings.contains(classGenericName)) return classGenericName;
int counter = 2;