1 package org.apache.maven.jxr.pacman;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.codehaus.plexus.util.StringUtils;
23
24 import java.io.File;
25 import java.io.FileInputStream;
26 import java.io.FileReader;
27 import java.io.IOException;
28 import java.io.InputStreamReader;
29 import java.io.Reader;
30 import java.io.StreamTokenizer;
31
32
33
34
35
36
37
38
39 public class JavaFileImpl
40 extends JavaFile
41 {
42 private Reader reader;
43
44
45
46
47
48
49
50 public JavaFileImpl( String filename, String encoding )
51 throws IOException
52 {
53 this.setFilename( filename );
54 this.setEncoding( encoding );
55
56
57
58
59
60 this.addImportType( new ImportType( "java.lang.*" ) );
61
62
63
64 this.parse();
65 }
66
67
68
69
70
71 private void parse()
72 throws IOException
73 {
74 StreamTokenizer stok = null;
75 try
76 {
77 stok = this.getTokenizer();
78
79 while ( stok.nextToken() != StreamTokenizer.TT_EOF )
80 {
81
82 if ( stok.sval == null )
83 {
84 continue;
85 }
86
87
88 if ( "package".equals( stok.sval ) && stok.ttype != '\"' )
89 {
90 stok.nextToken();
91 this.setPackageType( new PackageType( stok.sval ) );
92 }
93
94
95 if ( "import".equals( stok.sval ) && stok.ttype != '\"' )
96 {
97 stok.nextToken();
98
99 String name = stok.sval;
100
101
102
103
104
105
106
107
108 if ( name.charAt( name.length() - 1 ) == '.' )
109 {
110 name = name + "*";
111 }
112
113 this.addImportType( new ImportType( name ) );
114 }
115
116
117
118 if ( ( "class".equals( stok.sval ) || "interface".equals( stok.sval ) || "enum".equals( stok.sval ) )
119 && stok.ttype != '\"' )
120 {
121 stok.nextToken();
122 this.addClassType( new ClassType( stok.sval,
123 getFilenameWithoutPathOrExtension( this.getFilename() ) ) );
124 }
125
126 }
127 }
128 finally
129 {
130 stok = null;
131 if ( this.reader != null )
132 {
133 this.reader.close();
134 }
135 }
136 }
137
138
139
140
141 private static String getFilenameWithoutPathOrExtension( String filename )
142 {
143 String newFilename;
144
145 int extensionIndex = filename.lastIndexOf( ".java" );
146 if ( extensionIndex == -1 )
147 {
148 newFilename = filename;
149 }
150 else
151 {
152 newFilename = filename.substring( 0, extensionIndex );
153 }
154
155
156 newFilename = StringUtils.replace( newFilename, "\\", "/" );
157 int pathIndex = newFilename.lastIndexOf( "/" );
158 if ( pathIndex == -1 )
159 {
160 return newFilename;
161 }
162 else
163 {
164 return newFilename.substring( pathIndex + 1 );
165 }
166 }
167
168
169
170
171 private StreamTokenizer getTokenizer()
172 throws IOException
173 {
174
175 if ( !new File( this.getFilename() ).exists() )
176 {
177 throw new IOException( this.getFilename() + " does not exist!" );
178 }
179
180 if ( this.getEncoding() != null )
181 {
182 this.reader = new InputStreamReader( new FileInputStream( this.getFilename() ), this.getEncoding() );
183 }
184 else
185 {
186 this.reader = new FileReader( this.getFilename() );
187 }
188
189 StreamTokenizer stok = new StreamTokenizer( reader );
190
191
192 stok.commentChar( '*' );
193 stok.wordChars( '_', '_' );
194
195
196 stok.slashStarComments( true );
197 stok.slashSlashComments( true );
198
199 return stok;
200 }
201
202 }