Lines 431-436
Link Here
|
431 |
* @since 0.20 |
431 |
* @since 0.20 |
432 |
*/ |
432 |
*/ |
433 |
public MethodTree createConstructor(TypeElement clazz, Iterable<? extends VariableElement> fields, ExecutableElement constructor) { |
433 |
public MethodTree createConstructor(TypeElement clazz, Iterable<? extends VariableElement> fields, ExecutableElement constructor) { |
|
|
434 |
return createConstructor(clazz, fields, constructor, false); |
435 |
} |
436 |
|
437 |
/** |
438 |
* Creates a class default constructor. Fields and the inherited constructor |
439 |
* are initialized/called with default values. |
440 |
* |
441 |
* @param clazz the class to create the constructor for |
442 |
* @param fields fields to be initialized by the constructor |
443 |
* @param constructor inherited constructor to be called |
444 |
* @return the constructor |
445 |
* @since 0.126 |
446 |
*/ |
447 |
public MethodTree createDefaultConstructor(TypeElement clazz, Iterable<? extends VariableElement> fields, ExecutableElement constructor) { |
448 |
return createConstructor(clazz, fields, constructor, true); |
449 |
} |
450 |
|
451 |
private MethodTree createConstructor(TypeElement clazz, Iterable<? extends VariableElement> fields, ExecutableElement constructor, boolean isDefault) { |
434 |
assert clazz != null && fields != null; |
452 |
assert clazz != null && fields != null; |
435 |
TreeMaker make = copy.getTreeMaker(); |
453 |
TreeMaker make = copy.getTreeMaker(); |
436 |
Set<Modifier> mods = EnumSet.of(clazz.getKind() == ElementKind.ENUM ? Modifier.PRIVATE : Modifier.PUBLIC); |
454 |
Set<Modifier> mods = EnumSet.of(clazz.getKind() == ElementKind.ENUM ? Modifier.PRIVATE : Modifier.PUBLIC); |
Lines 441-448
Link Here
|
441 |
List<TypeParameterTree> typeParams = new LinkedList<TypeParameterTree>(); |
459 |
List<TypeParameterTree> typeParams = new LinkedList<TypeParameterTree>(); |
442 |
for (VariableElement ve : fields) { |
460 |
for (VariableElement ve : fields) { |
443 |
TypeMirror type = copy.getTypes().asMemberOf((DeclaredType)clazz.asType(), ve); |
461 |
TypeMirror type = copy.getTypes().asMemberOf((DeclaredType)clazz.asType(), ve); |
444 |
parameters.add(make.Variable(parameterModifiers, ve.getSimpleName(), make.Type(type), null)); |
462 |
if (isDefault) { |
445 |
statements.add(make.ExpressionStatement(make.Assignment(make.MemberSelect(make.Identifier("this"), ve.getSimpleName()), make.Identifier(ve.getSimpleName())))); //NOI18N |
463 |
statements.add(make.ExpressionStatement(make.Assignment(make.MemberSelect(make.Identifier("this"), ve.getSimpleName()), make.Literal(defaultValue(type))))); //NOI18N |
|
|
464 |
} else { |
465 |
parameters.add(make.Variable(parameterModifiers, ve.getSimpleName(), make.Type(type), null)); |
466 |
statements.add(make.ExpressionStatement(make.Assignment(make.MemberSelect(make.Identifier("this"), ve.getSimpleName()), make.Identifier(ve.getSimpleName())))); //NOI18N |
467 |
} |
446 |
} |
468 |
} |
447 |
if (constructor != null) { |
469 |
if (constructor != null) { |
448 |
ExecutableType constructorType = clazz.getSuperclass().getKind() == TypeKind.DECLARED ? (ExecutableType) copy.getTypes().asMemberOf((DeclaredType) clazz.getSuperclass(), constructor) : null; |
470 |
ExecutableType constructorType = clazz.getSuperclass().getKind() == TypeKind.DECLARED ? (ExecutableType) copy.getTypes().asMemberOf((DeclaredType) clazz.getSuperclass(), constructor) : null; |
Lines 454-462
Link Here
|
454 |
VariableElement ve = parameterElements.next(); |
476 |
VariableElement ve = parameterElements.next(); |
455 |
Name simpleName = ve.getSimpleName(); |
477 |
Name simpleName = ve.getSimpleName(); |
456 |
TypeMirror type = parameterTypes != null ? parameterTypes.next() : ve.asType(); |
478 |
TypeMirror type = parameterTypes != null ? parameterTypes.next() : ve.asType(); |
457 |
|
479 |
if (isDefault) { |
458 |
parameters.add(make.Variable(parameterModifiers, simpleName, make.Type(type), null)); |
480 |
arguments.add(make.Literal(defaultValue(type))); |
459 |
arguments.add(make.Identifier(simpleName)); |
481 |
} else { |
|
|
482 |
parameters.add(make.Variable(parameterModifiers, simpleName, make.Type(type), null)); |
483 |
arguments.add(make.Identifier(simpleName)); |
484 |
} |
460 |
} |
485 |
} |
461 |
statements.addFirst(make.ExpressionStatement(make.MethodInvocation(Collections.<ExpressionTree>emptyList(), make.Identifier("super"), arguments))); //NOI18N |
486 |
statements.addFirst(make.ExpressionStatement(make.MethodInvocation(Collections.<ExpressionTree>emptyList(), make.Identifier("super"), arguments))); //NOI18N |
462 |
} |
487 |
} |
Lines 1177-1182
Link Here
|
1177 |
return method; |
1202 |
return method; |
1178 |
} |
1203 |
} |
1179 |
|
1204 |
|
|
|
1205 |
private static Object defaultValue(TypeMirror type) { |
1206 |
switch(type.getKind()) { |
1207 |
case BOOLEAN: |
1208 |
return false; |
1209 |
case BYTE: |
1210 |
case CHAR: |
1211 |
case DOUBLE: |
1212 |
case FLOAT: |
1213 |
case INT: |
1214 |
case LONG: |
1215 |
case SHORT: |
1216 |
return 0; |
1217 |
} |
1218 |
return null; |
1219 |
} |
1220 |
|
1180 |
private static boolean supportsOverride(CompilationInfo info) { |
1221 |
private static boolean supportsOverride(CompilationInfo info) { |
1181 |
return info.getElements().getTypeElement("java.lang.Override") != null; |
1222 |
return info.getElements().getTypeElement("java.lang.Override") != null; |
1182 |
} |
1223 |
} |