Skip to content
This repository was archived by the owner on Oct 16, 2024. It is now read-only.

Commit cb72899

Browse files
authored
Merge pull request #259 from google/issue/258.property.named.elements
Qualify field accesses with "this" when necessary
2 parents 1dee6fc + 337a867 commit cb72899

38 files changed

+1316
-717
lines changed

src/main/java/org/inferred/freebuilder/processor/BuildableProperty.java

+22-26
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import static org.inferred.freebuilder.processor.BuilderMethods.getBuilderMethod;
2424
import static org.inferred.freebuilder.processor.BuilderMethods.mutator;
2525
import static org.inferred.freebuilder.processor.BuilderMethods.setter;
26+
import static org.inferred.freebuilder.processor.util.Block.methodBody;
2627
import static org.inferred.freebuilder.processor.util.ModelUtils.asElement;
2728
import static org.inferred.freebuilder.processor.util.ModelUtils.findAnnotationMirror;
2829
import static org.inferred.freebuilder.processor.util.ModelUtils.maybeDeclared;
@@ -34,6 +35,7 @@
3435

3536
import org.inferred.freebuilder.processor.Metadata.Property;
3637
import org.inferred.freebuilder.processor.util.Block;
38+
import org.inferred.freebuilder.processor.util.Excerpt;
3739
import org.inferred.freebuilder.processor.util.ParameterizedType;
3840
import org.inferred.freebuilder.processor.util.PreconditionExcerpts;
3941
import org.inferred.freebuilder.processor.util.SourceBuilder;
@@ -188,7 +190,7 @@ private BuildableProperty(
188190
@Override
189191
public void addBuilderFieldDeclaration(SourceBuilder code) {
190192
code.addLine("private final %s %s = %s;",
191-
builderType, property.getName(), builderFactory.newBuilder(builderType, INFERRED_TYPES));
193+
builderType, property.getField(), builderFactory.newBuilder(builderType, INFERRED_TYPES));
192194
}
193195

194196
@Override
@@ -214,10 +216,11 @@ private void addSetter(SourceBuilder code, Metadata metadata) {
214216
setter(property),
215217
property.getType(),
216218
property.getName())
217-
.add(PreconditionExcerpts.checkNotNull(property.getName()))
218-
.addLine(" this.%s.clear();", property.getName())
219-
.addLine(" this.%1$s.mergeFrom(%1$s);", property.getName())
220-
.addLine(" return (%s) this;", metadata.getBuilder())
219+
.add(methodBody(code, property.getName())
220+
.add(PreconditionExcerpts.checkNotNull(property.getName()))
221+
.addLine(" %s.clear();", property.getField())
222+
.addLine(" %s.mergeFrom(%s);", property.getField(), property.getName())
223+
.addLine(" return (%s) this;", metadata.getBuilder()))
221224
.addLine("}");
222225
}
223226

@@ -260,8 +263,9 @@ private void addMutate(SourceBuilder code, Metadata metadata) {
260263
mutator(property),
261264
consumer.getQualifiedName(),
262265
builderType)
263-
.addLine(" mutator.accept(%s);", property.getName())
264-
.addLine(" return (%s) this;", metadata.getBuilder())
266+
.add(methodBody(code, "mutator")
267+
.addLine(" mutator.accept(%s);", property.getField())
268+
.addLine(" return (%s) this;", metadata.getBuilder()))
265269
.addLine("}");
266270
}
267271

@@ -272,36 +276,28 @@ private void addGetter(SourceBuilder code, Metadata metadata) {
272276
metadata.getType().javadocNoArgMethodLink(property.getGetterName()))
273277
.addLine(" */")
274278
.addLine("public %s %s() {", builderType, getBuilderMethod(property))
275-
.addLine(" return %s;", property.getName())
279+
.addLine(" return %s;", property.getField())
276280
.addLine("}");
277281
}
278282

279283
@Override
280-
public void addFinalFieldAssignment(SourceBuilder code, String finalField, String builder) {
281-
code.addLine("%s = %s.%s.build();", finalField, builder, property.getName());
284+
public void addFinalFieldAssignment(SourceBuilder code, Excerpt finalField, String builder) {
285+
code.addLine("%s = %s.build();", finalField, property.getField().on(builder));
282286
}
283287

284288
@Override
285-
public void addPartialFieldAssignment(SourceBuilder code, String finalField, String builder) {
286-
code.addLine("%s = %s.%s.buildPartial();", finalField, builder, property.getName());
289+
public void addPartialFieldAssignment(SourceBuilder code, Excerpt finalField, String builder) {
290+
code.addLine("%s = %s.buildPartial();", finalField, property.getField().on(builder));
287291
}
288292

289293
@Override
290294
public void addMergeFromValue(Block code, String value) {
291-
String propertyName = property.getName();
292-
if (propertyName.equals(value)) {
293-
propertyName = "this." + propertyName; // see issue #78
294-
}
295-
code.addLine("%s.mergeFrom(%s.%s());", propertyName, value, property.getGetterName());
295+
code.addLine("%s.mergeFrom(%s.%s());", property.getField(), value, property.getGetterName());
296296
}
297297

298298
@Override
299299
public void addMergeFromBuilder(Block code, String builder) {
300-
String propertyName = property.getName();
301-
if (propertyName.equals(builder)) {
302-
propertyName = "this." + propertyName; // see issue #78
303-
}
304-
code.add("%s.mergeFrom(%s.%s()", propertyName, builder, getBuilderMethod(property));
300+
code.add("%s.mergeFrom(%s.%s()", property.getField(), builder, getBuilderMethod(property));
305301
if (mergeFromBuilderMethod == MergeBuilderMethod.BUILD_PARTIAL_AND_MERGE) {
306302
code.add(".buildPartial()");
307303
}
@@ -312,21 +308,21 @@ public void addMergeFromBuilder(Block code, String builder) {
312308
public void addSetBuilderFromPartial(Block code, String builder) {
313309
if (partialToBuilderMethod == PartialToBuilderMethod.TO_BUILDER_AND_MERGE) {
314310
code.add("%s.%s().mergeFrom(%s.toBuilder());",
315-
builder, getBuilderMethod(property), setter(property), property.getName());
311+
builder, getBuilderMethod(property), property.getField());
316312
} else {
317313
code.add("%s.%s().mergeFrom(%s);",
318-
builder, getBuilderMethod(property), setter(property), property.getName());
314+
builder, getBuilderMethod(property), property.getField());
319315
}
320316
}
321317

322318
@Override
323-
public void addSetFromResult(SourceBuilder code, String builder, String variable) {
319+
public void addSetFromResult(SourceBuilder code, Excerpt builder, Excerpt variable) {
324320
code.addLine("%s.%s(%s);", builder, setter(property), variable);
325321
}
326322

327323
@Override
328324
public void addClearField(Block code) {
329-
code.addLine("%s.clear();", property.getName());
325+
code.addLine("%s.clear();", property.getField());
330326
}
331327

332328
private static final class IsCallableMethod implements Predicate<ExecutableElement> {

0 commit comments

Comments
 (0)