KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > edu > umd > cs > findbugs > sourceViewer > JavaSourceDocument


1 /*
2  * FindBugs - Find Bugs in Java programs
3  * Copyright (C) 2006, University of Maryland
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston MA 02111-1307, USA
18  */

19
20 package edu.umd.cs.findbugs.sourceViewer;
21
22 import java.awt.BorderLayout JavaDoc;
23 import java.awt.Color JavaDoc;
24 import java.awt.Dimension JavaDoc;
25 import java.awt.Font JavaDoc;
26 import java.awt.FontMetrics JavaDoc;
27 import java.awt.Graphics JavaDoc;
28 import java.awt.Toolkit JavaDoc;
29 import java.awt.event.ActionEvent JavaDoc;
30 import java.awt.event.ActionListener JavaDoc;
31 import java.io.FileReader JavaDoc;
32 import java.io.IOException JavaDoc;
33 import java.io.Reader JavaDoc;
34 import java.io.StringReader JavaDoc;
35
36 import javax.swing.JComponent JavaDoc;
37 import javax.swing.JEditorPane JavaDoc;
38 import javax.swing.JFrame JavaDoc;
39 import javax.swing.JPanel JavaDoc;
40 import javax.swing.JScrollPane JavaDoc;
41 import javax.swing.text.BadLocationException JavaDoc;
42 import javax.swing.text.DefaultStyledDocument JavaDoc;
43 import javax.swing.text.Document JavaDoc;
44 import javax.swing.text.Element JavaDoc;
45 import javax.swing.text.SimpleAttributeSet JavaDoc;
46 import javax.swing.text.Style JavaDoc;
47 import javax.swing.text.StyleConstants JavaDoc;
48 import javax.swing.text.StyleContext JavaDoc;
49 import javax.swing.text.StyledDocument JavaDoc;
50 import javax.swing.text.TabSet JavaDoc;
51 import javax.swing.text.TabStop JavaDoc;
52
53 import edu.umd.cs.findbugs.gui2.Debug;
54 import edu.umd.cs.findbugs.gui2.Driver;
55 import edu.umd.cs.findbugs.ba.SourceFile;
56
57 public class JavaSourceDocument {
58
59     static final SimpleAttributeSet JavaDoc commentAttributes = new SimpleAttributeSet JavaDoc();
60
61     static final SimpleAttributeSet JavaDoc javadocAttributes = new SimpleAttributeSet JavaDoc();
62
63     static final SimpleAttributeSet JavaDoc quotesAttributes = new SimpleAttributeSet JavaDoc();
64
65     static final SimpleAttributeSet JavaDoc keywordsAttributes = new SimpleAttributeSet JavaDoc();
66
67     static final SimpleAttributeSet JavaDoc whiteAttributes = new SimpleAttributeSet JavaDoc();
68
69     static Font JavaDoc sourceFont = new Font JavaDoc("Monospaced", Font.PLAIN, (int)Driver.getFontSize());
70     final static Color JavaDoc HIGHLIGHT_COLOR = new Color JavaDoc(1f, 1f, .3f);
71     TabSet JavaDoc TAB_SET;
72     static {
73         commentAttributes.addAttribute(StyleConstants.Foreground, new Color JavaDoc(
74                 0.0f, 0.5f, 0.0f));
75         javadocAttributes.addAttribute(StyleConstants.Foreground, new Color JavaDoc(
76                 0.25f, 0.37f, 0.75f));
77         quotesAttributes.addAttribute(StyleConstants.Foreground, new Color JavaDoc(
78                 0.0f, 0.0f, 1.0f));
79         keywordsAttributes.addAttribute(StyleConstants.Foreground, new Color JavaDoc(
80                 0.5f, 0.0f, 0.5f));
81         keywordsAttributes.addAttribute(StyleConstants.Bold, true);
82
83     }
84
85     
86     final HighlightInformation highlights = new HighlightInformation();
87     final NumberedEditorKit dek = new NumberedEditorKit(highlights);
88
89     final StyleContext JavaDoc styleContext = new StyleContext JavaDoc();
90
91     final Element JavaDoc root;
92
93     final DefaultStyledDocument JavaDoc doc;
94     
95     final SourceFile sourceFile;
96
97     public HighlightInformation getHighlightInformation() {
98         return highlights;
99     }
100     public StyledDocument JavaDoc getDocument() {
101         return doc;
102     }
103     public NumberedEditorKit getEditorKit() {
104         return dek;
105     }
106     private final String JavaDoc title;
107     public String JavaDoc getTitle() {
108         return title;
109     }
110     
111     public SourceFile getSourceFile() {
112         return sourceFile;
113     }
114     
115     public JavaSourceDocument(String JavaDoc title, Reader JavaDoc in, SourceFile theSource) throws IOException JavaDoc {
116         doc = new DefaultStyledDocument JavaDoc();
117         this.title = title;
118         this.sourceFile = theSource;
119         Debug.println("Created JavaSourceDocument for " + title);
120         try {
121             dek.read(in, doc, 0);
122         } catch (BadLocationException JavaDoc e) {
123             throw new RuntimeException JavaDoc(e);
124         }
125         in.close();
126         doc.putProperty(Document.TitleProperty, title);
127         root = doc.getDefaultRootElement();
128         Toolkit JavaDoc toolkit = Toolkit.getDefaultToolkit();
129         FontMetrics JavaDoc fontMetrics = toolkit.getFontMetrics(sourceFont);
130         TabStop JavaDoc[] tabs = new TabStop JavaDoc[50];
131         float width = fontMetrics.stringWidth(" ");
132             
133         for (int i = 0; i < tabs.length; i++)
134             tabs[i] = new TabStop JavaDoc(width * (4 + 4 * i));
135         TAB_SET = new TabSet JavaDoc(tabs);
136         StyleConstants.setTabSet(commentAttributes, TAB_SET);
137         StyleConstants.setTabSet(javadocAttributes, TAB_SET);
138
139         StyleConstants.setTabSet(quotesAttributes, TAB_SET);
140
141         StyleConstants.setTabSet(keywordsAttributes, TAB_SET);
142
143         StyleConstants.setTabSet(commentAttributes, TAB_SET);
144
145         StyleConstants.setTabSet(whiteAttributes, TAB_SET);
146         StyleConstants.setFontFamily(whiteAttributes, sourceFont.getFamily());
147         StyleConstants.setFontSize(whiteAttributes, sourceFont.getSize());
148         StyleConstants.setLeftIndent(whiteAttributes, NumberedParagraphView.NUMBERS_WIDTH);
149         
150         doc.setParagraphAttributes(0, doc.getLength(), whiteAttributes, true);
151         JavaScanner parser = new JavaScanner(new DocumentCharacterIterator(doc));
152         while (parser.next() != JavaScanner.EOF) {
153             int kind = parser.getKind();
154             switch (kind) {
155             case JavaScanner.COMMENT:
156                 doc.setCharacterAttributes(parser.getStartPosition(), parser
157                         .getLength(), commentAttributes, true);
158
159                 break;
160             case JavaScanner.KEYWORD:
161                 doc.setCharacterAttributes(parser.getStartPosition(), parser
162                         .getLength(), keywordsAttributes, true);
163
164                 break;
165             case JavaScanner.JAVADOC:
166                 doc.setCharacterAttributes(parser.getStartPosition(), parser
167                         .getLength(), javadocAttributes, true);
168
169                 break;
170             case JavaScanner.QUOTE:
171                 doc.setCharacterAttributes(parser.getStartPosition(), parser
172                         .getLength(), quotesAttributes, true);
173
174                 break;
175             }
176
177         }
178
179     }
180     private static final long serialVersionUID = 0L;
181     public static final JavaSourceDocument UNKNOWNSOURCE;
182     static {
183         try {
184             UNKNOWNSOURCE= new JavaSourceDocument("Unknown source", new StringReader JavaDoc("Unable to find source"), null);
185         } catch (IOException JavaDoc e) {
186             throw new RuntimeException JavaDoc(e);
187         }
188     }
189         
190 }
Popular Tags