This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 229849
Collapse All | Expand All

(-)a/java.source/apichanges.xml (+12 lines)
Lines 108-113 Link Here
108
    <!-- ACTUAL CHANGES BEGIN HERE: -->
108
    <!-- ACTUAL CHANGES BEGIN HERE: -->
109
109
110
    <changes>
110
    <changes>
111
        <change id="GeneratorUtilities-createDefaultConstructor">
112
            <api name="general"/>
113
            <summary>Adding <code>GeneratorUtilities.createDefaultConstructor</code> method.</summary>
114
            <version major="0" minor="126"/>
115
            <date day="16" month="5" year="2013"/>
116
            <author login="dbalek"/>
117
            <compatibility addition="yes" binary="compatible" deletion="no" deprecation="no" modification="no" semantic="compatible" source="compatible"/>
118
            <description>
119
                A utility method createDefaulConstructor has been added to org.netbeans.api.java.source.GeneratorUtilities class.
120
            </description>
121
            <issue number="229233" />
122
        </change>
111
        <change id="DocTreesSupport">
123
        <change id="DocTreesSupport">
112
             <api name="general"/>
124
             <api name="general"/>
113
             <summary>Added support for DocTrees.</summary>
125
             <summary>Added support for DocTrees.</summary>
(-)a/java.source/nbproject/project.properties (-1 / +1 lines)
Lines 46-52 Link Here
46
javadoc.title=Java Source
46
javadoc.title=Java Source
47
javadoc.arch=${basedir}/arch.xml
47
javadoc.arch=${basedir}/arch.xml
48
javadoc.apichanges=${basedir}/apichanges.xml
48
javadoc.apichanges=${basedir}/apichanges.xml
49
spec.version.base=0.125.0
49
spec.version.base=0.126.0
50
test.qa-functional.cp.extra=${refactoring.java.dir}/modules/ext/nb-javac-api.jar
50
test.qa-functional.cp.extra=${refactoring.java.dir}/modules/ext/nb-javac-api.jar
51
test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:\
51
test.unit.run.cp.extra=${o.n.core.dir}/core/core.jar:\
52
    ${o.n.core.dir}/lib/boot.jar:\
52
    ${o.n.core.dir}/lib/boot.jar:\
(-)a/java.source/src/org/netbeans/api/java/source/GeneratorUtilities.java (-5 / +46 lines)
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
    }

Return to bug 229849