Changeset 9


Ignore:
Timestamp:
06/15/10 13:27:53 (14 years ago)
Author:
phdmakk
Message:

+ some refactorings in the local dependency modules

Location:
trunk/t3d/src/org/etsi/t3d
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/t3d/src/org/etsi/t3d/DependencyPrinter.java

    r7 r9  
    44import java.io.FileOutputStream; 
    55import java.io.PrintStream; 
     6import java.util.ArrayList; 
     7import java.util.LinkedList; 
    68 
     9import org.etsi.t3d.visitor.VisitorCommonFunctions; 
     10 
     11import de.ugoe.cs.swe.trex.core.analyzer.rfparser.ASTUtil; 
    712import de.ugoe.cs.swe.trex.core.analyzer.rfparser.LocationAST; 
     13import de.ugoe.cs.swe.trex.core.analyzer.rfparser.TTCN3ParserTokenTypes; 
     14import de.ugoe.cs.swe.trex.core.analyzer.rfparser.symboltable.EnumSymbol; 
     15import de.ugoe.cs.swe.trex.core.analyzer.rfparser.symboltable.Symbol; 
    816 
    917public class DependencyPrinter { 
     
    1523                 
    1624        } 
     25        //TODO: unify 
     26 
     27        /** 
     28         * Extracts identifiers related to a module definition identifier within the  
     29         * corresponding module definition subtree 
     30         * TODO: filter out predefined functions 
     31         * @param moduleDefinitionIdentifierNode - A module definition identifier node 
     32         * @return - A list of referenced identifier nodes, excluding the identifier 
     33         *  nodes of the module definition itself; if node is not of type Identifier 
     34         *  an empty list is returned instead 
     35         */ 
     36        //TODO: this may need to be moved for reuse 
     37        private static LinkedList<LocationAST> getRelatedIdentifierNodes( 
     38                        LocationAST identifierNode) { 
     39                LinkedList<LocationAST> identifierNodes = new LinkedList<LocationAST>(); 
     40                if (identifierNode.getType() != TTCN3ParserTokenTypes.Identifier) { 
     41                        return identifierNodes; 
     42                } 
     43                LocationAST moduleDefinitionNode = LocationAST.resolveParentsUntilType(identifierNode, 
     44                                TTCN3ParserTokenTypes.ModuleDefinition); 
     45 
     46                LocationAST typeNode = LocationAST.getModuleDefinitionTypeNode(moduleDefinitionNode); 
     47                if (typeNode.getType() == TTCN3ParserTokenTypes.ModuleParDef 
     48                                && typeNode.getFirstChild().getType() == TTCN3ParserTokenTypes.MultitypedModuleParList) { 
     49                        LocationAST sibling = identifierNode.getNextSibling(); 
     50                        if (sibling != null 
     51                                        && sibling.getType() != TTCN3ParserTokenTypes.Identifier) { 
     52                                identifierNodes.addAll(ASTUtil.findTypeNodes(sibling, 
     53                                                TTCN3ParserTokenTypes.Identifier)); 
     54 
     55                        } 
     56                        LocationAST moduleParNode = LocationAST.resolveParentsUntilType(identifierNode, 
     57                                        TTCN3ParserTokenTypes.ModulePar); 
     58                        LocationAST moduleParTypeNode = moduleParNode.getFirstChild(); 
     59                        identifierNodes.addAll(ASTUtil.findTypeNodes(moduleParTypeNode, 
     60                                        TTCN3ParserTokenTypes.Identifier)); 
     61 
     62                } else { 
     63                        identifierNodes = ASTUtil.findTypeNodes(moduleDefinitionNode, 
     64                                        TTCN3ParserTokenTypes.Identifier); 
     65                        ArrayList<LocationAST> moduleDefinitionIdentifierNodes = LocationAST.getModuleDefinitionIdentifiersList(moduleDefinitionNode); 
     66                        identifierNodes.removeAll(moduleDefinitionIdentifierNodes); 
     67                } 
     68                // TODO: exclude predefined functions 
     69                return identifierNodes; 
     70        }        
     71 
     72        /** 
     73         * Transforms a list of <LocationAST> identifier nodes into a list of <String> reference IDs 
     74         * @param identifierNodes - the list of identifier nodes 
     75         * @return - A list of reference IDs  
     76         */ 
     77        private LinkedList<String> getReferenceIds(LinkedList<LocationAST> identifierNodes){ 
     78                LinkedList<String> referencedIds = new LinkedList<String>(); 
     79                 
     80                for (LocationAST identifierNode : identifierNodes) { 
     81                        LocationAST declarationNode = VisitorCommonFunctions.getDeclarationNodeFromIdentifier(identifierNode.getFirstChild()); 
     82                        if (declarationNode != null) { 
     83                                String id = VisitorCommonFunctions.getIdFromIdentifier(declarationNode); 
     84                                // TODO: move predefined filtering up 
     85                                if (!id.equals("#") && !id.startsWith("trexPredefined")) { 
     86                                        Symbol symbol = identifierNode.getFirstChild().getSymbol(); 
     87                                        if (symbol instanceof EnumSymbol) { 
     88                                                //TODO: need to add handling in documentation and imports generators too probably 
     89                                                declarationNode = symbol.getSurroundingScope().getScopeSymbol().getDeclarationNode(); 
     90                                                id = VisitorCommonFunctions.getIdFromIdentifier(declarationNode); 
     91                                        } 
     92                                        if (VisitorCommonFunctions.isValidCrossReference(declarationNode)) { 
     93                                                if (!referencedIds.contains(id)) { 
     94                                                        referencedIds.add(id); 
     95                                                } 
     96                                        } 
     97                                }  
     98                        } else { 
     99                                referencedIds.add("unresolvedReference---" 
     100                                                + VisitorCommonFunctions.getName(identifierNode.getFirstChild())); 
     101                        } 
     102                } 
     103                return referencedIds; 
     104        }        
     105 
     106 
     107        private String getDependecies(LocationAST identifierNode) { 
     108                //TODO: this should be a part of the printer 
     109                LinkedList<String> referenceIds = getReferenceIds(getRelatedIdentifierNodes(identifierNode)); 
     110                //sanitize list for slipped-through enumerated values 
     111                referenceIds.remove(VisitorCommonFunctions.getIdFromIdentifier(identifierNode)); 
     112                String refs = "\n\t\t<reflist>"; 
     113                for (String id : referenceIds) 
     114                        refs += "\n\t\t\t<ref id=\"" + id + "\"/>"; 
     115                refs += "\n\t\t</reflist>"; 
     116                return refs; 
     117        } 
    17118         
    18         public void newElement(String name, String id, int type, int line, 
    19                         String module, String dependencies) { 
    20                 writeStream("\n\t<element id=\"" 
    21                                 + id 
    22                                 + "\" name=\"" 
    23                                 + name 
    24                                 + "\" type=\"" 
    25                                 + LocationAST.getTTCN3ParserTokenTypeTypePrettyName(type) 
    26                                 + "\" line=\"" 
    27                                 + line 
    28                                 + "\" module=\"" 
    29                                 + module 
    30                                 + "\" file=\"" 
    31                                 + currentTTCN3File.substring(currentTTCN3File.lastIndexOf("/") + 1) 
    32                                 + "\">"); 
    33                 writeStream(dependencies); 
    34                 writeStream("\n\t</element>\n"); 
     119        private String getElementList(LocationAST node){ 
     120                //TODO: this should be a part of the printer 
     121                String elementList = "\n\t\t<elementlist>"; 
     122                LinkedList <LocationAST> moduleDefinitionsList = ASTUtil.findTypeNodes(LocationAST.resolveParentsUntilType(node, TTCN3ParserTokenTypes.ModuleDefinition).getFirstChild(), TTCN3ParserTokenTypes.ModuleDefinition); 
     123                for(LocationAST moduleDefinitionNode : moduleDefinitionsList){ 
     124                        ArrayList<LocationAST> identifiersList = LocationAST.getModuleDefinitionIdentifiersList(moduleDefinitionNode); 
     125                        for(LocationAST identifierNode : identifiersList) 
     126                                elementList += "\n\t\t\t<ref id=\"" + VisitorCommonFunctions.getIdFromIdentifier(identifierNode) + "\"/>"; 
     127                }                
     128                return elementList + "\n\t\t</elementlist>"; 
    35129        } 
    36130 
    37         public void newGroup(String name, String id, int type, int line, String module, 
    38                         String elementList) { 
    39                 writeStream("\n\t<element id=\"" 
    40                                 + id 
    41                                 + "\" name=\"" 
    42                                 + name 
    43                                 + "\" type=\"" 
    44                                 + LocationAST.getTTCN3ParserTokenTypeTypePrettyName(type) 
    45                                 + "\" line=\"" 
    46                                 + line 
    47                                 + "\" module=\"" 
    48                                 + module 
    49                                 + "\" file=\"" 
    50                                 + currentTTCN3File.substring(currentTTCN3File.lastIndexOf("/") + 1) 
    51                                 + "\">"); 
    52                 writeStream(elementList); 
    53                 writeStream("\n\t</element>\n"); 
     131         
     132        public void newElement(LocationAST node) { 
     133                ArrayList<LocationAST> identifiersList = LocationAST.getModuleDefinitionIdentifiersList(node); 
     134                LocationAST typeNode = LocationAST.getModuleDefinitionTypeNode(node); 
     135                //TODO: refine further  
     136                for (LocationAST identifierNode : identifiersList) { 
     137                        writeStream("\n\t<element id=\"" 
     138                                        + VisitorCommonFunctions.getIdFromIdentifier(identifierNode.getFirstChild()) 
     139                                        + "\" name=\"" 
     140                                        + VisitorCommonFunctions.getName(identifierNode) 
     141                                        + "\" type=\"" 
     142                                        + LocationAST.getTTCN3ParserTokenTypeTypePrettyName(typeNode.getType()) 
     143                                        + "\" line=\"" 
     144                                        + identifierNode.getLine() 
     145                                        + "\" module=\"" 
     146                                        + VisitorCommonFunctions.getModuleName(identifierNode) 
     147                                        + "\" file=\"" 
     148                                        + currentTTCN3File.substring(currentTTCN3File.lastIndexOf("/") + 1) 
     149                                        + "\">"); 
     150                         
     151                        if (typeNode.getType()==TTCN3ParserTokenTypes.GroupDef) { 
     152                                writeStream(getElementList(identifierNode)); 
     153                        }else { 
     154                                writeStream(getDependecies(identifierNode)); 
     155                        } 
     156                        writeStream("\n\t</element>\n"); 
     157                } 
    54158        } 
    55          
     159 
    56160        public void setXMLPath(String xmlpath){ 
    57161                FileOutputStream file; 
  • trunk/t3d/src/org/etsi/t3d/visitor/DependencyVisitor.java

    r7 r9  
    2828        } 
    2929         
    30          
    31         /** 
    32          * Extracts identifiers related to a module definition identifier within the  
    33          * corresponding module definition subtree 
    34          * TODO: filter out predefined functions 
    35          * @param moduleDefinitionIdentifierNode - A module definition identifier node 
    36          * @return - A list of referenced identifier nodes, excluding the identifier 
    37          *  nodes of the module definition itself; if node is not of type Identifier 
    38          *  an empty list is returned instead 
    39          */ 
    40         //TODO: this may need to be moved for reuse 
    41         private static LinkedList<LocationAST> getRelatedIdentifierNodes( 
    42                         LocationAST identifierNode) { 
    43                 LinkedList<LocationAST> identifierNodes = new LinkedList<LocationAST>(); 
    44                 if (identifierNode.getType() != TTCN3ParserTokenTypes.Identifier) { 
    45                         return identifierNodes; 
    46                 } 
    47                 LocationAST moduleDefinitionNode = LocationAST.resolveParentsUntilType(identifierNode, 
    48                                 TTCN3ParserTokenTypes.ModuleDefinition); 
    49  
    50                 LocationAST typeNode = LocationAST.getModuleDefinitionTypeNode(moduleDefinitionNode); 
    51                 if (typeNode.getType() == TTCN3ParserTokenTypes.ModuleParDef 
    52                                 && typeNode.getFirstChild().getType() == TTCN3ParserTokenTypes.MultitypedModuleParList) { 
    53                         LocationAST sibling = identifierNode.getNextSibling(); 
    54                         if (sibling != null 
    55                                         && sibling.getType() != TTCN3ParserTokenTypes.Identifier) { 
    56                                 identifierNodes.addAll(ASTUtil.findTypeNodes(sibling, 
    57                                                 TTCN3ParserTokenTypes.Identifier)); 
    58  
    59                         } 
    60                         LocationAST moduleParNode = LocationAST.resolveParentsUntilType(identifierNode, 
    61                                         TTCN3ParserTokenTypes.ModulePar); 
    62                         LocationAST moduleParTypeNode = moduleParNode.getFirstChild(); 
    63                         identifierNodes.addAll(ASTUtil.findTypeNodes(moduleParTypeNode, 
    64                                         TTCN3ParserTokenTypes.Identifier)); 
    65  
    66                 } else { 
    67                         identifierNodes = ASTUtil.findTypeNodes(moduleDefinitionNode, 
    68                                         TTCN3ParserTokenTypes.Identifier); 
    69                         ArrayList<LocationAST> moduleDefinitionIdentifierNodes = LocationAST.getModuleDefinitionIdentifiersList(moduleDefinitionNode); 
    70                         identifierNodes.removeAll(moduleDefinitionIdentifierNodes); 
    71                 } 
    72                 // TODO: exclude predefined functions 
    73                 return identifierNodes; 
    74         }        
    75          
    76          
    7730        /** 
    7831         * Extracts referenced identifiers from within a module definition subtree 
     
    9346        } 
    9447         
    95          
    96         /** 
    97          * Transforms a list of <LocationAST> identifier nodes into a list of <String> reference IDs 
    98          * @param identifierNodes - the list of identifier nodes 
    99          * @return - A list of reference IDs  
    100          */ 
    101         private LinkedList<String> getReferenceIds(LinkedList<LocationAST> identifierNodes){ 
    102                 LinkedList<String> referencedIds = new LinkedList<String>(); 
    103                  
    104                 for (LocationAST identifierNode : identifierNodes) { 
    105                         LocationAST declarationNode = VisitorCommonFunctions.getDeclarationNodeFromIdentifier(identifierNode.getFirstChild()); 
    106                         if (declarationNode != null) { 
    107                                 String id = VisitorCommonFunctions.getIdFromIdentifier(declarationNode); 
    108                                 // TODO: move predefined filtering up 
    109                                 if (!id.equals("#") && !id.startsWith("trexPredefined")) { 
    110                                         Symbol symbol = identifierNode.getFirstChild().getSymbol(); 
    111                                         if (symbol instanceof EnumSymbol) { 
    112                                                 //TODO: need to add handling in documentation and imports generators too probably 
    113                                                 declarationNode = symbol.getSurroundingScope().getScopeSymbol().getDeclarationNode(); 
    114                                                 id = VisitorCommonFunctions.getIdFromIdentifier(declarationNode); 
    115                                         } 
    116                                         if (VisitorCommonFunctions.isValidCrossReference(declarationNode)) { 
    117                                                 if (!referencedIds.contains(id)) { 
    118                                                         referencedIds.add(id); 
    119                                                 } 
    120                                         } 
    121                                 }  
    122                         } else { 
    123                                 referencedIds.add("unresolvedReference---" 
    124                                                 + VisitorCommonFunctions.getName(identifierNode.getFirstChild())); 
    125                         } 
    126                 } 
    127                 return referencedIds; 
    128         }        
    129          
    130          
    131         private String getDependecies(LocationAST identifierNode) { 
    132                 //TODO: this should be a part of the printer 
    133                 LinkedList<String> referenceIds = getReferenceIds(getRelatedIdentifierNodes(identifierNode)); 
    134                 //sanitize list for slipped-through enumerated values 
    135                 referenceIds.remove(VisitorCommonFunctions.getIdFromIdentifier(identifierNode)); 
    136                 String refs = "\n\t\t<reflist>"; 
    137                 for (String id : referenceIds) 
    138                         refs += "\n\t\t\t<ref id=\"" + id + "\"/>"; 
    139                 refs += "\n\t\t</reflist>"; 
    140                 return refs; 
    141         } 
    142          
    143         private String getElementList(LocationAST node){ 
    144                 //TODO: this should be a part of the printer 
    145                 String elementList = "\n\t\t<elementlist>"; 
    146                 LinkedList <LocationAST> moduleDefinitionsList = ASTUtil.findTypeNodes(LocationAST.resolveParentsUntilType(node, TTCN3ParserTokenTypes.ModuleDefinition).getFirstChild(), TTCN3ParserTokenTypes.ModuleDefinition); 
    147                 for(LocationAST moduleDefinitionNode : moduleDefinitionsList){ 
    148                         ArrayList<LocationAST> identifiersList = LocationAST.getModuleDefinitionIdentifiersList(moduleDefinitionNode); 
    149                         for(LocationAST identifierNode : identifiersList) 
    150                                 elementList += "\n\t\t\t<ref id=\"" + VisitorCommonFunctions.getIdFromIdentifier(identifierNode) + "\"/>"; 
    151                 }                
    152                 return elementList + "\n\t\t</elementlist>"; 
    153         } 
    154  
    15548        public ContinueStatus visitModuleDefinition(LocationAST node) throws TTCN3BehaviorException { 
    156                 ArrayList<LocationAST> identifiersList = LocationAST.getModuleDefinitionIdentifiersList(node); 
    157                 LocationAST typeNode = LocationAST.getModuleDefinitionTypeNode(node); 
    158                  
    159                 for (LocationAST identifierNode : identifiersList) { 
    160                         if (typeNode.getType()==TTCN3ParserTokenTypes.GroupDef) { 
    161                                 dependencyPrinter.newGroup(VisitorCommonFunctions.getName(identifierNode), 
    162                                                 VisitorCommonFunctions.getIdFromIdentifier(identifierNode.getFirstChild()), 
    163                                                 typeNode.getType(), 
    164                                                 identifierNode.getLine(), 
    165                                                 VisitorCommonFunctions.getModuleName(identifierNode), 
    166                                                 getElementList(identifierNode)); 
    167                         }else { 
    168                                 dependencyPrinter.newElement(VisitorCommonFunctions.getName(identifierNode), 
    169                                                 VisitorCommonFunctions.getIdFromIdentifier(identifierNode.getFirstChild()), 
    170                                                 typeNode.getType(), 
    171                                                 identifierNode.getLine(), 
    172                                                 VisitorCommonFunctions.getModuleName(identifierNode), 
    173                                                 getDependecies(identifierNode)); 
    174                         } 
    175                 } 
    176  
     49                dependencyPrinter.newElement(node); 
    17750                return ContinueStatus.getInstance(true,true); 
    17851        } 
Note: See TracChangeset for help on using the changeset viewer.