/[classpath]/gjdoc/src/gnu/classpath/tools/gjdoc/FieldDocImpl.java
ViewVC logotype

Diff of /gjdoc/src/gnu/classpath/tools/gjdoc/FieldDocImpl.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by julian, Mon Dec 20 21:27:52 2004 UTC revision 1.9 by julian, Fri Apr 8 17:36:33 2005 UTC
# Line 47  public class FieldDocImpl Line 47  public class FieldDocImpl
47              position);              position);
48     }     }
49    
50       private static FieldDocImpl createFieldDoc(FieldDocImpl prototype,
51                                                  String fieldDef,
52                                                  String fieldValueLiteral)
53       {
54          if (null != fieldValueLiteral && fieldValueLiteral.length() == 0) {
55             fieldValueLiteral = null;
56          }
57    
58          try {
59             FieldDocImpl fieldDoc=(FieldDocImpl)prototype.clone();
60             String dimSuffix="";
61             while (fieldDef.trim().endsWith("[")
62                    || fieldDef.trim().endsWith("]")) {
63                fieldDef=fieldDef.trim();
64                dimSuffix=fieldDef.charAt(fieldDef.length()-1)+dimSuffix;
65                fieldDef=fieldDef.substring(0,fieldDef.length()-1);
66             }
67            
68             fieldDoc.setTypeName(fieldDoc.getTypeName()+dimSuffix);
69             fieldDoc.setName(fieldDef.trim());
70             fieldDoc.setValueLiteral(fieldValueLiteral);
71             return fieldDoc;
72          }
73          catch (CloneNotSupportedException e) {
74             // should not happen
75             e.printStackTrace();
76             return null;
77          }
78       }
79    
80     public static Collection createFromSource(ClassDoc containingClass,     public static Collection createFromSource(ClassDoc containingClass,
81                                               PackageDoc containingPackage,                                               PackageDoc containingPackage,
82                                               char[] source, int startIndex, int endIndex) {                                               char[] source, int startIndex, int endIndex) {
# Line 63  public class FieldDocImpl Line 93  public class FieldDocImpl
93           fd.accessLevel = ACCESS_PUBLIC;           fd.accessLevel = ACCESS_PUBLIC;
94        }        }
95    
96        String definition=new String(source, ndx, endIndex-ndx-1);        final int STATE_FIELDNAME   = 1;
97          final int STATE_FIELDVALUE  = 2;
98        final int STATE_INITIAL = 1;        final int STATE_QUOTE       = 3;
99        final int STATE_BRACKET = 2;        final int STATE_QUOTEBS     = 4;
100        final int STATE_QUOTE   = 3;        final int STATE_SQUOTE      = 5;
101        final int STATE_QUOTEBS = 4;        final int STATE_SQUOTEBS    = 6;
102          final int STATE_COMMENT     = 7;
103          final int STATE_LINECOMMENT = 8;
104    
105        int lastFieldDefStart = ndx;        int lastFieldDefStart = ndx;
106        int state = STATE_INITIAL;        int state = STATE_FIELDNAME;
107          int prevState = state;
108    
109          int bracketCount = 0;
110    
111        List fieldDefComponents = new ArrayList();        StringBuffer fieldNameBuf = new StringBuffer();
112          StringBuffer fieldValueLiteralBuf = new StringBuffer();
113    
114        for (int i=ndx; i<endIndex; ++i) {        for (int i=ndx; i<endIndex; ++i) {
115    
116           char c = source[ndx];           char c = source[i];
117             char nextChar = '\0';
118             if (i + 1 < endIndex) {
119                nextChar = source[i + 1];
120             }
121           switch (state) {           switch (state) {
122           case STATE_INITIAL:           case STATE_FIELDNAME:
123              if ('\"' == c) {              if ('/' == c && '/' == nextChar) {
124                   prevState = state;
125                   state = STATE_LINECOMMENT;
126                }
127                else if ('/' == c && '*' == nextChar) {
128                   prevState = state;
129                   state = STATE_COMMENT;
130                }
131                else if (',' == c || ';' == c) {
132                   rcList.add(createFieldDoc(fd, fieldNameBuf.toString(), null));
133                   fieldNameBuf.setLength(0);
134                }
135                else if ('=' == c) {
136                   state = STATE_FIELDVALUE;
137                }
138                else if (!(' ' == c || '\n' == c || '\r' == c || '\t' == c)) {
139                   fieldNameBuf.append(c);
140                }
141                break;
142    
143             case STATE_FIELDVALUE:
144                if ('/' == c && '/' == nextChar) {
145                   prevState = state;
146                   state = STATE_LINECOMMENT;
147                }
148                else if ('/' == c && '*' == nextChar) {
149                   prevState = state;
150                   state = STATE_COMMENT;
151                }
152                else if ('\"' == c) {
153                   prevState = state;
154                 state = STATE_QUOTE;                 state = STATE_QUOTE;
155                   fieldValueLiteralBuf.append(c);
156              }              }
157              else if ('(' == c) {              else if ('\'' == c) {
158                 state = STATE_BRACKET;                 prevState = state;
159              }                 state = STATE_SQUOTE;
160              else if (',' == c) {                 fieldValueLiteralBuf.append(c);
161                 String fieldDefComponent = new String(source, lastFieldDefStart, i-lastFieldDefStart-1);              }
162                 fieldDefComponents.add(fieldDefComponent);              else if ('{' == c || '(' == c) {
163                 lastFieldDefStart = i+1;                 ++ bracketCount;
164              }                 fieldValueLiteralBuf.append(c);
165                }
166                else if ('}' == c || ')' == c) {
167                   -- bracketCount;
168                   fieldValueLiteralBuf.append(c);
169                }
170                else if (0 == bracketCount && (',' == c || ';' == c)) {
171                   rcList.add(createFieldDoc(fd, fieldNameBuf.toString(),
172                                             fieldValueLiteralBuf.toString()));
173                   fieldNameBuf.setLength(0);
174                   fieldValueLiteralBuf.setLength(0);
175                   state = STATE_FIELDNAME;
176                }
177                else {
178                   fieldValueLiteralBuf.append(c);
179                }
180              break;              break;
181                            
182           case STATE_QUOTE:           case STATE_QUOTE:
183              if ('\\' == c) {              if ('\\' == c) {
184                 state = STATE_QUOTEBS;                 state = STATE_QUOTEBS;
185                   fieldValueLiteralBuf.append(c);
186              }              }
187              else if ('\"' == c) {              else if ('\"' == c) {
188                 state = STATE_INITIAL;                 state = prevState;
189                   fieldValueLiteralBuf.append(c);
190                }
191                break;
192                
193             case STATE_SQUOTE:
194                if ('\\' == c) {
195                   state = STATE_QUOTEBS;
196                   fieldValueLiteralBuf.append(c);
197                }
198                else if ('\'' == c) {
199                   state = prevState;
200                   fieldValueLiteralBuf.append(c);
201              }              }
202              break;              break;
   
203                            
204           case STATE_QUOTEBS:           case STATE_QUOTEBS:
205                fieldValueLiteralBuf.append(c);
206              state = STATE_QUOTE;              state = STATE_QUOTE;
207              break;              break;
208    
209                         case STATE_SQUOTEBS:
210           case STATE_BRACKET:              fieldValueLiteralBuf.append(c);
211              if ('\"' == c) {              state = STATE_SQUOTE;
                state = STATE_QUOTE;  
             }  
             else if (')' == c) {  
                state = STATE_INITIAL;  
             } // end of else  
212              break;              break;
          }  
       }  
   
       String fieldDefComponent = new String(source, lastFieldDefStart, endIndex-lastFieldDefStart-1);  
       fieldDefComponents.add(fieldDefComponent);  
213    
214        for (Iterator it = fieldDefComponents.iterator(); it.hasNext(); ) {           case STATE_LINECOMMENT:
215           String fieldDef = (String) it.next();              if ('\n' == c) {
216           String fieldValueLiteral = null;                 state = prevState;
217                }
218           int endx=fieldDef.indexOf('=');              break;
219           if (endx>=0) {  
220              fieldValueLiteral = fieldDef.substring(endx + 1);           case STATE_COMMENT:
221              fieldDef = fieldDef.substring(0,endx);              if ('*' == c && '/' == nextChar) {
222                   ++ i;
223                   state = prevState;
224                }
225                break;
226           }           }
227           Debug.log(9,"  Field Definition: '"+fieldDef+"'");        }
228                  
229           try {        if (fieldNameBuf.length() > 0) {
230              FieldDocImpl fieldDoc=(FieldDocImpl)fd.clone();           rcList.add(createFieldDoc(fd, fieldNameBuf.toString(),
231              String dimSuffix="";                                     fieldValueLiteralBuf.toString()));
             while (fieldDef.trim().endsWith("[")  
                    || fieldDef.trim().endsWith("]")) {  
                fieldDef=fieldDef.trim();  
                dimSuffix=fieldDef.charAt(fieldDef.length()-1)+dimSuffix;  
                fieldDef=fieldDef.substring(0,fieldDef.length()-1);  
             }  
   
             fieldDoc.setTypeName(fieldDoc.getTypeName()+dimSuffix);  
             fieldDoc.setName(fieldDef.trim());  
             fieldDoc.setValueLiteral(fieldValueLiteral);  
             rcList.add(fieldDoc);  
          }  
          catch (CloneNotSupportedException e) {  
             e.printStackTrace();  
          }  
232        }        }
233    
234        return rcList;        return rcList;

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26