Trail:

Changeset 29

Show
Ignore:
Timestamp:
02/02/09 17:34:38 (3 years ago)
Author:
harald
Message:
  • Add override support
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/asdoclet.ipr

    r20 r29  
    491491      </CLASSES> 
    492492      <JAVADOC /> 
    493       <SOURCES /> 
     493      <SOURCES> 
     494        <root url="file://C:/Users/harald/Documents/Development/metaas/src/main/java" /> 
     495      </SOURCES> 
    494496      <jarDirectory url="file://$PROJECT_DIR$/lib" recursive="false" /> 
    495497    </library> 
  • trunk/out/templates/cs/class.vm

    r23 r29  
    1616                public const $fieldDescriptor.qualifiedTypeName#if($fieldDescriptor.typeArguments)<#foreach($arg in $fieldDescriptor.typeArguments)#if($velocityCount>1), #end$arg#end>#end $fieldDescriptor.fieldName#if($fieldDescriptor.value) = $fieldDescriptor.value#end; 
    1717#else 
    18                 $fieldDescriptor.modifier $fieldDescriptor.qualifiedTypeName#if($fieldDescriptor.typeArguments)<#foreach($arg in $fieldDescriptor.typeArguments)#if($velocityCount>1), #end$arg#end>#end $fieldDescriptor.propertyName { get { return $fieldDescriptor.fieldName; } set { this.$fieldDescriptor.fieldName = value; } } 
    1918                $fieldDescriptor.modifier $fieldDescriptor.qualifiedTypeName#if($fieldDescriptor.typeArguments)<#foreach($arg in $fieldDescriptor.typeArguments)#if($velocityCount>1), #end$arg#end>#end $fieldDescriptor.fieldName#if($fieldDescriptor.value) = $fieldDescriptor.value#end; 
     19#end             
    2020#end 
    21                  
     21#foreach($propertyDescriptor in $typeDescriptor.propertyDescriptors) 
     22                $propertyDescriptor.modifier #if($propertyDescriptor.override)override#{else}virtual#end $propertyDescriptor.qualifiedTypeName#if($propertyDescriptor.typeArguments)<#foreach($arg in $propertyDescriptor.typeArguments)#if($velocityCount>1), #end$arg#end>#end $propertyDescriptor.propertyName { #if($propertyDescriptor.getter)get { return this.$propertyDescriptor.fieldName; }#end#if($propertyDescriptor.setter)set { this.$propertyDescriptor.fieldName = value; }#end } 
    2223#end 
    2324#foreach($methodDescriptor in $typeDescriptor.methodDescriptors) 
  • trunk/src/org/fluffnstuff/asdoclet/generator/AsGenerator.java

    r24 r29  
    8484        } 
    8585 
    86         public void addField(int modifier, String fieldType, Collection<String> typeArguments, String propertyName, String value, String comment) { 
    87                 if (!"null".equals(fieldType)) { 
    88                         ASClassType classType = (ASClassType) type; 
    89  
    90                         classType.newField("_" + propertyName, Visibility.PRIVATE, fieldType); 
    91  
    92                         Visibility visibility = getVisibility(modifier); 
    93                         ASMethod getter = classType.newMethod("get " + propertyName, visibility, fieldType); 
    94                         getter.addStmt("return _" + propertyName + ";"); 
    95                         if (!StringUtils.isEmpty(comment)) getter.setDescription(comment.trim()); 
    96  
    97                         ASMethod setter = classType.newMethod("set " + propertyName, visibility, "void"); 
    98                         setter.addParam("value", fieldType); 
    99                         setter.addStmt("_" + propertyName + "=value;"); 
    100                 } 
    101         } 
    102  
    103         public void addGetter(int modifier, String returnType, Collection<String> typeArguments, String propertyName) { 
    104                 beginMethod(modifier, returnType, typeArguments, "get " + propertyName); 
     86        public void addField(int modifier, String fieldType, Collection<String> typeArguments, String fieldName, String value, String comment) { 
     87                ASClassType classType = (ASClassType) type; 
     88                if (classType.getField(fieldName) == null) classType.newField(fieldName, getVisibility(modifier), fieldType); 
     89        } 
     90 
     91        public void addGetter(int modifier, String fieldType, Collection<String> typeArguments, String propertyName, String comment, boolean override) { 
     92                if (type instanceof ASClassType) { 
     93                        addField(Modifier.PRIVATE, fieldType, null, "_" + propertyName, null, null); 
     94                        beginMethod(modifier, fieldType, typeArguments, "get " + propertyName); 
     95                        method.setOverride(override); 
     96                        method.addStmt("return _" + propertyName + ";"); 
     97                } else { 
     98                        beginMethod(modifier, fieldType, typeArguments, "get " + propertyName); 
     99                } 
     100 
     101                setMethodDescription(comment); 
    105102        } 
    106103 
     
    120117        } 
    121118 
    122         public void addSetter(int modifier, String returnType, Collection<String> typeArguments, String propertyName) { 
    123                 beginMethod(modifier, returnType, typeArguments, "set " + propertyName); 
     119        public void addSetter(int modifier, String fieldType, Collection<String> typeArguments, String propertyName, String comment, boolean override) { 
     120                if (type instanceof ASClassType) { 
     121                        addField(Modifier.PRIVATE, fieldType, null, "_" + propertyName, null, null); 
     122                        beginMethod(modifier, "void", typeArguments, "set " + propertyName); 
     123                        method.setOverride(override); 
     124                        method.addParam("value", fieldType); 
     125                        method.addStmt("_" + propertyName + "=value;"); 
     126                } else { 
     127                        beginMethod(modifier, "void", typeArguments, "set " + propertyName); 
     128                        method.addParam("value", fieldType); 
     129                } 
     130 
     131                setMethodDescription(comment); 
    124132        } 
    125133 
  • trunk/src/org/fluffnstuff/asdoclet/generator/Generator.java

    r24 r29  
    44 
    55public interface Generator { 
    6     void addBody(String body); 
     6       void addBody(String body); 
    77 
    8     void addConstant(String constantType, Collection<String> typeArguments, String name, String value, String comment); 
     8       void addConstant(String constantType, Collection<String> typeArguments, String name, String value, String comment); 
    99 
    10     void addEnumField(String name, String comment); 
     10       void addEnumField(String name, String comment); 
    1111 
    12     void addField(int modifier, String fieldType, Collection<String> typeArguments, String propertyName, String value, String comment); 
     12       void addField(int modifier, String fieldType, Collection<String> typeArguments, String propertyName, String value, String comment); 
    1313 
    14     void addGetter(int modifier, String returnType, Collection<String> typeArguments, String propertyName); 
     14       void addGetter(int modifier, String fieldType, Collection<String> typeArguments, String propertyName, String comment, boolean override); 
    1515 
    16     void addInterface(String name); 
     16       void addInterface(String name); 
    1717 
    18     void addParameter(String type, Collection<String> typeArguments, String name); 
     18       void addParameter(String type, Collection<String> typeArguments, String name); 
    1919 
    20     void addSetter(int modifier, String returnType, Collection<String> typeArguments, String propertyName); 
     20       void addSetter(int modifier, String fieldType, Collection<String> typeArguments, String propertyName, String comment, boolean override); 
    2121 
    22     void addTypeAnnotation(String tag); 
     22       void addTypeAnnotation(String tag); 
    2323 
    24     void beginClass(String name, boolean bindable, Collection<String> typeArguments); 
     24       void beginClass(String name, boolean bindable, Collection<String> typeArguments); 
    2525 
    26     void beginEnum(String name); 
     26       void beginEnum(String name); 
    2727 
    28     void beginInterface(String name, Collection<String> typeArguments); 
     28       void beginInterface(String name, Collection<String> typeArguments); 
    2929 
    30     void beginMethod(int modifier, String returnType, Collection<String> typeArguments, String methodName); 
     30       void beginMethod(int modifier, String returnType, Collection<String> typeArguments, String methodName); 
    3131 
    32     void beginProxy(String proxyName, Collection<String> typeArguments, String returnType, String baseType, Collection<String> proxyImports, String interfaceType); 
     32       void beginProxy(String proxyName, Collection<String> typeArguments, String returnType, String baseType, Collection<String> proxyImports, String interfaceType); 
    3333 
    34     void endClass(Collection<String> imports); 
     34       void endClass(Collection<String> imports); 
    3535 
    36     void endEnum(); 
     36       void endEnum(); 
    3737 
    38     void endInterface(Collection<String> imports); 
     38       void endInterface(Collection<String> imports); 
    3939 
    40     void endMethod(); 
     40       void endMethod(); 
    4141 
    42     void endProxy(Collection<String> proxyImports); 
     42       void endProxy(Collection<String> proxyImports); 
    4343 
    44     void generate() throws Exception; 
     44       void generate() throws Exception; 
    4545 
    46     String getAnnotation(String name, Collection<String> imports); 
     46       String getAnnotation(String name, Collection<String> imports); 
    4747 
    48     String getName(); 
     48       String getName(); 
    4949 
    50     String getType(String name, int dimensions, boolean primitive, boolean generic, boolean enumeration, Collection<String> imports); 
     50       String getType(String name, int dimensions, boolean primitive, boolean generic, boolean enumeration, Collection<String> imports); 
    5151 
    52     void setMethodDescription(String description); 
     52       void setMethodDescription(String description); 
    5353 
    54     void setSuperclass(String name, boolean exception); 
     54       void setSuperclass(String name, boolean exception); 
    5555 
    56     void setTypeDescription(String description); 
     56       void setTypeDescription(String description); 
    5757} 
  • trunk/src/org/fluffnstuff/asdoclet/generator/VelocityGenerator.java

    r24 r29  
    9595 
    9696        public void addField(int modifier, String fieldType, Collection<String> typeArguments, String propertyName, String value, String comment) { 
    97                 if (!"null".equals(fieldType)) { 
    98                         fieldDescriptor = new FieldDescriptor(modifier, fieldType, typeArguments, propertyName, value); 
    99                         setFieldDescription(comment); 
    100  
    101                         typeDescriptor.addFieldDescriptor(fieldDescriptor); 
    102                 } 
    103         } 
    104  
    105         public void addGetter(int modifier, String returnType, Collection<String> typeArguments, String propertyName) { 
    106                 if (!"null".equals(returnType)) { 
    107                         PropertyDescriptor propertyDescriptor = new PropertyDescriptor(modifier, returnType, typeArguments, propertyName); 
    108                         propertyDescriptor.setGetter(true); 
    109                         typeDescriptor.addPropertyDescriptor(propertyDescriptor); 
     97                fieldDescriptor = new FieldDescriptor(modifier, fieldType, typeArguments, propertyName, value); 
     98                setFieldDescription(comment); 
     99 
     100                typeDescriptor.addFieldDescriptor(fieldDescriptor); 
     101        } 
     102 
     103        public void addGetter(int modifier, String returnType, Collection<String> typeArguments, String propertyName, String description, boolean override) { 
     104                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(modifier, returnType, typeArguments, propertyName); 
     105                propertyDescriptor.setGetter(true); 
     106                propertyDescriptor.setOverride(propertyDescriptor.isOverride() || override); 
     107                propertyDescriptor.setDescription(description); 
     108                typeDescriptor.addPropertyDescriptor(propertyDescriptor); 
     109 
     110                if (typeDescriptor instanceof ClassDescriptor) { 
     111                        addField(Modifier.PRIVATE, returnType, typeArguments, propertyName, null, description); 
    110112                } 
    111113        } 
     
    120122        } 
    121123 
    122         public void addSetter(int modifier, String returnType, Collection<String> typeArguments, String propertyName) { 
    123                 if (!"null".equals(returnType)) { 
    124                         PropertyDescriptor propertyDescriptor = new PropertyDescriptor(modifier, returnType, typeArguments, propertyName); 
    125                         propertyDescriptor.setSetter(true); 
    126                         typeDescriptor.addPropertyDescriptor(propertyDescriptor); 
     124        public void addSetter(int modifier, String returnType, Collection<String> typeArguments, String propertyName, String description, boolean override) { 
     125                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(modifier, "void", typeArguments, propertyName); 
     126                propertyDescriptor.setSetter(true); 
     127                propertyDescriptor.setOverride(propertyDescriptor.isOverride() || override); 
     128                propertyDescriptor.setDescription(description); 
     129                typeDescriptor.addPropertyDescriptor(propertyDescriptor); 
     130 
     131                if (typeDescriptor instanceof ClassDescriptor) { 
     132                        addField(Modifier.PRIVATE, returnType, typeArguments, propertyName, null, description); 
    127133                } 
    128134        } 
  • trunk/src/org/fluffnstuff/asdoclet/generator/velocity/PropertyDescriptor.java

    r24 r29  
    99        private boolean getter; 
    1010        private boolean setter; 
     11        private boolean override; 
    1112 
    1213        public PropertyDescriptor(int modifier, String type, Collection<String> typeArguments, String fieldName) { 
     
    1718        } 
    1819 
     20        public String getFieldName() { 
     21                return fieldName; 
     22        } 
     23 
    1924        public boolean isGetter() { 
    2025                return getter; 
     
    2328        public void setGetter(boolean getter) { 
    2429                this.getter = getter; 
     30        } 
     31 
     32        public boolean isOverride() { 
     33                return override; 
     34        } 
     35 
     36        public void setOverride(boolean override) { 
     37                this.override = override; 
    2538        } 
    2639 
  • trunk/src/org/fluffnstuff/asdoclet/handler/AbstractHandler.java

    r24 r29  
    5858                                        } 
    5959 
    60                                         if (classDoc.isInterface()) { 
    61                                                String name = methodDoc.name(); 
     60                                        String name = methodDoc.name(); 
     61                                        String comment = methodDoc.commentText(); 
    6262 
    63                                                 if (name.startsWith("set")) { 
    64                                                         getGenerator().addSetter(0, fieldType, arguments, propertyName); 
    65                                                 } else if (name.startsWith("get") || name.startsWith("is")) { 
    66                                                         getGenerator().addGetter(0, fieldType, arguments, propertyName); 
     63                                        if (!"null".equals(fieldType) && (name.startsWith("get") || name.startsWith("is"))) { 
     64                                                String setterName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1); 
     65 
     66 
     67                                                if (classDoc.isInterface()) { 
     68                                                        getGenerator().addGetter(0, fieldType, arguments, propertyName, comment, false); 
     69                                                        if (findMethod(setterName, classDoc)) getGenerator().addSetter(0, fieldType, arguments, propertyName, comment, false); 
     70                                                } else { 
     71                                                        boolean overridden = isOverridden(classDoc, name); 
     72                                                        getGenerator().addGetter(Modifier.PUBLIC, fieldType, arguments, propertyName, comment, overridden); 
     73                                                        // always generate setter, serialization doesn't work otherwise 
     74                                                        getGenerator().addSetter(Modifier.PUBLIC, fieldType, arguments, propertyName, comment, overridden); 
    6775                                                } 
    68                                         } else { 
    69                                                 // getGenerator().addGetter(Modifier.PUBLIC, fieldType, arguments, propertyName); 
    70                                                 // getGenerator().addSetter(Modifier.PUBLIC, fieldType, arguments, propertyName); 
    71                                                 getGenerator().addField(Modifier.PUBLIC, fieldType, arguments, propertyName, null, methodDoc.commentText()); 
    7276                                        } 
    7377                                } 
     
    147151        } 
    148152 
     153        private boolean findMethod(String name, ClassDoc superClass) { 
     154                for (MethodDoc superMethod : superClass.methods()) { 
     155                        if (name.equals(superMethod.name())) { 
     156                                return true; 
     157                        } 
     158                } 
     159                return false; 
     160        } 
     161 
     162        private boolean isOverridden(ClassDoc classDoc, String name) { 
     163                for (ClassDoc superClass = classDoc.superclass(); superClass != null; superClass = superClass.superclass()) { 
     164                        if (findMethod(name, superClass)) return true; 
     165                } 
     166                return false; 
     167        } 
     168 
    149169        protected void processClassComment(ClassDoc classDoc) { 
    150170                StringBuilder description = new StringBuilder();