Trail:

Changeset 62

Show
Ignore:
Timestamp:
06/17/09 15:44:56 (3 years ago)
Author:
harald
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/org/fluffnstuff/asdoclet/handler/InterfaceHandler.java

    r58 r62  
    55import java.util.Map; 
    66import java.util.Set; 
     7import java.util.Iterator; 
    78 
    89import org.fluffnstuff.asdoclet.generator.Generator; 
     
    5657                processInterfaces(classDoc, ignore); 
    5758                processClassComment(classDoc); 
    58                 processMethods(classDoc, interfaceName, bean, ignore, commands); 
     59                processMethods(classDoc, interfaceName, bean, ignore, commands, null); 
    5960 
    6061                getGenerator().endInterface(); 
    6162        } 
    6263 
    63         private void processMethods(ClassDoc classDoc, org.fluffnstuff.asdoclet.generator.Type classType, boolean bean, Set<String> ignore, Map<String, String> commands) { 
     64        private void processMethods(ClassDoc classDoc, org.fluffnstuff.asdoclet.generator.Type classType, boolean bean, Set<String> ignore, Map<String, String> commands, Map<String, org.fluffnstuff.asdoclet.generator.Type> typeMap) { 
    6465                for (MethodDoc methodDoc : classDoc.methods()) { 
    6566                        boolean getter = (methodDoc.name().startsWith("get") || methodDoc.name().startsWith("is")) && (methodDoc.parameters().length == 0); 
     
    6970                                processBeanProperty(classDoc, classType, methodDoc, ignore, commands); 
    7071                        } else { 
    71                                 processMethod(classType, methodDoc, commands); 
     72                                processMethod(classType, methodDoc, commands, typeMap); 
    7273                        } 
    7374                } 
    7475        } 
    7576 
    76         private void processMethod(org.fluffnstuff.asdoclet.generator.Type classType, MethodDoc methodDoc, Map<String, String> commands) { 
     77        private void processMethod(org.fluffnstuff.asdoclet.generator.Type classType, MethodDoc methodDoc, Map<String, String> commands, Map<String, org.fluffnstuff.asdoclet.generator.Type> typeMap) { 
    7778                Map<String, String> methodCommands = new HashMap<String, String>(commands); 
    7879                org.fluffnstuff.asdoclet.generator.Type returnType = GeneratorUtils.getType(methodDoc.returnType(), getGenerator()); 
    7980                org.fluffnstuff.asdoclet.generator.Type methodType = GeneratorUtils.getType(methodDoc, getGenerator()); 
    80                 org.fluffnstuff.asdoclet.generator.Type fooType = returnType; 
     81 
     82                if (typeMap != null) { 
     83                        if (typeMap.containsKey(returnType.getName())) returnType = typeMap.get(returnType.getName()); 
     84                        if (typeMap.containsKey(methodType.getName())) methodType = typeMap.get(methodType.getName()); 
     85                } 
     86 
     87                org.fluffnstuff.asdoclet.generator.Type actualReturnType = returnType; 
    8188 
    8289                TagParser.processTags(methodDoc.tags(getGenerator().getName() + Constants.TAG_METHOD), methodCommands); 
     
    101108                                } 
    102109 
    103                                 fooType = methodReturnType != null ? GeneratorUtils.getType(methodReturnType, getGenerator()) : org.fluffnstuff.asdoclet.generator.Type.VOID; 
     110                                actualReturnType = methodReturnType != null ? GeneratorUtils.getType(methodReturnType, getGenerator()) : org.fluffnstuff.asdoclet.generator.Type.VOID; 
    104111                        } 
    105112 
    106                         getGenerator().beginMethod(classType, methodType, 0, fooType, methodDoc.name()); 
     113                        getGenerator().beginMethod(classType, methodType, 0, actualReturnType, methodDoc.name()); 
    107114 
    108115                        for (Parameter parameter : methodDoc.parameters()) { 
     
    133140                for (Type type : interfaceDoc.interfaceTypes()) { 
    134141                        ClassDoc classDoc = type.asClassDoc(); 
    135                         org.fluffnstuff.asdoclet.generator.Type interfaceClass = GeneratorUtils.getType(type, getGenerator()); 
    136142 
    137                         if (interfaceClass != org.fluffnstuff.asdoclet.generator.Type.NULL && !ignore.contains(interfaceClass.getName())) { 
     143                        org.fluffnstuff.asdoclet.generator.Type interfaceType = GeneratorUtils.getType(type, getGenerator()); 
     144 
     145                        if (interfaceType != org.fluffnstuff.asdoclet.generator.Type.NULL && !ignore.contains(interfaceType.getName())) { 
     146                                org.fluffnstuff.asdoclet.generator.Type interfaceClass = GeneratorUtils.getType(classDoc, getGenerator()); 
     147                                Map<String, org.fluffnstuff.asdoclet.generator.Type> typeMap = null; 
     148 
     149                                if (interfaceClass.getArguments() != null && interfaceType.getArguments() != null) { 
     150                                        typeMap = new HashMap<String, org.fluffnstuff.asdoclet.generator.Type>(); 
     151 
     152                                        Iterator<org.fluffnstuff.asdoclet.generator.Type> classIterator = interfaceClass.getArguments().iterator(); 
     153                                        Iterator<org.fluffnstuff.asdoclet.generator.Type> typeIterator = interfaceType.getArguments().iterator(); 
     154                                        while (classIterator.hasNext() && typeIterator.hasNext()) { 
     155                                                typeMap.put(classIterator.next().getName(), typeIterator.next()); 
     156                                        } 
     157                                } 
     158 
    138159                                Map<String, String> commands = new HashMap<String, String>(parentCommands); 
    139160                                commands.putAll(TagParser.processClassTags(getGenerator(), classDoc)); 
    140161 
    141162                                boolean bean = TagParser.getBooleanCommand(Constants.COMMAND_BEAN, commands); 
    142                                 processMethods(classDoc, interfaceClass, bean, ignore, commands); 
     163                                processMethods(classDoc, interfaceType, bean, ignore, commands, typeMap); 
    143164 
    144165                                traverseInterfaces(classDoc, ignore, commands);