mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-03 05:20:17 +00:00
Some halfway work on introducing hideNulls feature to toString. Aborted because it is a lot more work than anticipated, but this code is prettier and slightly more bugfree so worth checking in.
This commit is contained in:
1 parent
f341a00baa
commit
5ec852b35b
2 files changed
+23
-15
No files matched your search
@@ -209,21 +209,25 @@ public class HandleToString extends EclipseAnnotationHandler<ToString> {
|
||||
}
|
||||
|
||||
for (EclipseNode field : fields) {
|
||||
TypeReference fType = getFieldType(field, fieldAccess);
|
||||
TypeReference fieldType = getFieldType(field, fieldAccess);
|
||||
Expression fieldAccessor = createFieldAccessor(field, fieldAccess, source);
|
||||
|
||||
// The distinction between primitive and object will be useful if we ever add a 'hideNulls' option.
|
||||
boolean fieldBaseTypeIsPrimitive = BUILT_IN_TYPES.contains(new String(fieldType.getLastToken()));
|
||||
boolean fieldIsPrimitive = fieldType.dimensions() == 0 && fieldBaseTypeIsPrimitive;
|
||||
boolean fieldIsPrimitiveArray = fieldType.dimensions() == 1 && fieldBaseTypeIsPrimitive;
|
||||
boolean fieldIsObjectArray = fieldType.dimensions() > 0 && !fieldIsPrimitiveArray;
|
||||
@SuppressWarnings("unused")
|
||||
boolean fieldIsObject = !fieldIsPrimitive && !fieldIsPrimitiveArray && !fieldIsObjectArray;
|
||||
|
||||
Expression ex;
|
||||
if (fType.dimensions() > 0) {
|
||||
if (fieldIsPrimitiveArray || fieldIsObjectArray) {
|
||||
MessageSend arrayToString = new MessageSend();
|
||||
arrayToString.sourceStart = pS; arrayToString.sourceEnd = pE;
|
||||
arrayToString.receiver = generateQualifiedNameRef(source, TypeConstants.JAVA, TypeConstants.UTIL, "Arrays".toCharArray());
|
||||
arrayToString.arguments = new Expression[] { fieldAccessor };
|
||||
setGeneratedBy(arrayToString.arguments[0], source);
|
||||
if (fType.dimensions() > 1 || !BUILT_IN_TYPES.contains(new String(fType.getLastToken()))) {
|
||||
arrayToString.selector = "deepToString".toCharArray();
|
||||
} else {
|
||||
arrayToString.selector = "toString".toCharArray();
|
||||
}
|
||||
arrayToString.selector = (fieldIsObjectArray ? "deepToString" : "toString").toCharArray();
|
||||
ex = arrayToString;
|
||||
} else {
|
||||
ex = fieldAccessor;
|
||||
|
||||
@@ -198,18 +198,22 @@ public class HandleToString extends JavacAnnotationHandler<ToString> {
|
||||
}
|
||||
|
||||
for (JavacNode fieldNode : fields) {
|
||||
JCVariableDecl field = (JCVariableDecl) fieldNode.get();
|
||||
JCExpression expr;
|
||||
|
||||
JCExpression fieldAccessor = createFieldAccessor(maker, fieldNode, fieldAccess);
|
||||
|
||||
if (getFieldType(fieldNode, fieldAccess) instanceof JCArrayTypeTree) {
|
||||
boolean multiDim = ((JCArrayTypeTree)field.vartype).elemtype instanceof JCArrayTypeTree;
|
||||
boolean primitiveArray = ((JCArrayTypeTree)field.vartype).elemtype instanceof JCPrimitiveTypeTree;
|
||||
boolean useDeepTS = multiDim || !primitiveArray;
|
||||
|
||||
JCExpression hcMethod = chainDots(typeNode, "java", "util", "Arrays", useDeepTS ? "deepToString" : "toString");
|
||||
expr = maker.Apply(List.<JCExpression>nil(), hcMethod, List.<JCExpression>of(fieldAccessor));
|
||||
JCExpression fieldType = getFieldType(fieldNode, fieldAccess);
|
||||
|
||||
// The distinction between primitive and object will be useful if we ever add a 'hideNulls' option.
|
||||
boolean fieldIsPrimitive = fieldType instanceof JCPrimitiveTypeTree;
|
||||
boolean fieldIsPrimitiveArray = fieldType instanceof JCArrayTypeTree && ((JCArrayTypeTree) fieldType).elemtype instanceof JCPrimitiveTypeTree;
|
||||
boolean fieldIsObjectArray = !fieldIsPrimitiveArray && fieldType instanceof JCArrayTypeTree;
|
||||
@SuppressWarnings("unused")
|
||||
boolean fieldIsObject = !fieldIsPrimitive && !fieldIsPrimitiveArray && !fieldIsObjectArray;
|
||||
|
||||
if (fieldIsPrimitiveArray || fieldIsObjectArray) {
|
||||
JCExpression tsMethod = chainDots(typeNode, "java", "util", "Arrays", fieldIsObjectArray ? "deepToString" : "toString");
|
||||
expr = maker.Apply(List.<JCExpression>nil(), tsMethod, List.<JCExpression>of(fieldAccessor));
|
||||
} else expr = fieldAccessor;
|
||||
|
||||
if (first) {
|
||||
|
||||
Reference in new issue
Block a user