diff -r c3997b2f9d2e java.source/apichanges.xml --- a/java.source/apichanges.xml Wed May 15 17:16:06 2013 +0200 +++ b/java.source/apichanges.xml Thu May 16 13:37:47 2013 +0200 @@ -108,6 +108,18 @@ + + + Adding GeneratorUtilities.createDefaultConstructor method. + + + + + + A utility method createDefaulConstructor has been added to org.netbeans.api.java.source.GeneratorUtilities class. + + + Added support for DocTrees. diff -r c3997b2f9d2e java.source/nbproject/project.properties --- a/java.source/nbproject/project.properties Wed May 15 17:16:06 2013 +0200 +++ b/java.source/nbproject/project.properties Thu May 16 13:37:47 2013 +0200 @@ -46,7 +46,7 @@ javadoc.title=Java Source javadoc.arch=${basedir}/arch.xml javadoc.apichanges=${basedir}/apichanges.xml -spec.version.base=0.125.0 +spec.version.base=0.126.0 test.qa-functional.cp.extra=${refactoring.java.dir}/modules/ext/nb-javac-api.jar test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:\ ${o.n.core.dir}/lib/boot.jar:\ diff -r c3997b2f9d2e java.source/src/org/netbeans/api/java/source/GeneratorUtilities.java --- a/java.source/src/org/netbeans/api/java/source/GeneratorUtilities.java Wed May 15 17:16:06 2013 +0200 +++ b/java.source/src/org/netbeans/api/java/source/GeneratorUtilities.java Thu May 16 13:37:47 2013 +0200 @@ -431,6 +431,24 @@ * @since 0.20 */ public MethodTree createConstructor(TypeElement clazz, Iterable fields, ExecutableElement constructor) { + return createConstructor(clazz, fields, constructor, false); + } + + /** + * Creates a class default constructor. Fields and the inherited constructor + * are initialized/called with default values. + * + * @param clazz the class to create the constructor for + * @param fields fields to be initialized by the constructor + * @param constructor inherited constructor to be called + * @return the constructor + * @since 0.126 + */ + public MethodTree createDefaultConstructor(TypeElement clazz, Iterable fields, ExecutableElement constructor) { + return createConstructor(clazz, fields, constructor, true); + } + + private MethodTree createConstructor(TypeElement clazz, Iterable fields, ExecutableElement constructor, boolean isDefault) { assert clazz != null && fields != null; TreeMaker make = copy.getTreeMaker(); Set mods = EnumSet.of(clazz.getKind() == ElementKind.ENUM ? Modifier.PRIVATE : Modifier.PUBLIC); @@ -441,8 +459,12 @@ List typeParams = new LinkedList(); for (VariableElement ve : fields) { TypeMirror type = copy.getTypes().asMemberOf((DeclaredType)clazz.asType(), ve); - parameters.add(make.Variable(parameterModifiers, ve.getSimpleName(), make.Type(type), null)); - statements.add(make.ExpressionStatement(make.Assignment(make.MemberSelect(make.Identifier("this"), ve.getSimpleName()), make.Identifier(ve.getSimpleName())))); //NOI18N + if (isDefault) { + statements.add(make.ExpressionStatement(make.Assignment(make.MemberSelect(make.Identifier("this"), ve.getSimpleName()), make.Literal(defaultValue(type))))); //NOI18N + } else { + parameters.add(make.Variable(parameterModifiers, ve.getSimpleName(), make.Type(type), null)); + statements.add(make.ExpressionStatement(make.Assignment(make.MemberSelect(make.Identifier("this"), ve.getSimpleName()), make.Identifier(ve.getSimpleName())))); //NOI18N + } } if (constructor != null) { ExecutableType constructorType = clazz.getSuperclass().getKind() == TypeKind.DECLARED ? (ExecutableType) copy.getTypes().asMemberOf((DeclaredType) clazz.getSuperclass(), constructor) : null; @@ -454,9 +476,12 @@ VariableElement ve = parameterElements.next(); Name simpleName = ve.getSimpleName(); TypeMirror type = parameterTypes != null ? parameterTypes.next() : ve.asType(); - - parameters.add(make.Variable(parameterModifiers, simpleName, make.Type(type), null)); - arguments.add(make.Identifier(simpleName)); + if (isDefault) { + arguments.add(make.Literal(defaultValue(type))); + } else { + parameters.add(make.Variable(parameterModifiers, simpleName, make.Type(type), null)); + arguments.add(make.Identifier(simpleName)); + } } statements.addFirst(make.ExpressionStatement(make.MethodInvocation(Collections.emptyList(), make.Identifier("super"), arguments))); //NOI18N } @@ -1177,6 +1202,22 @@ return method; } + private static Object defaultValue(TypeMirror type) { + switch(type.getKind()) { + case BOOLEAN: + return false; + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + return 0; + } + return null; + } + private static boolean supportsOverride(CompilationInfo info) { return info.getElements().getTypeElement("java.lang.Override") != null; }