2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
3 * Copyright (C) 2014 The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
11 * Jalview is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
17 * The Jalview Authors are detailed in the 'AUTHORS' file.
19 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
21 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
22 <title>4.4. Code Inspector</title><link rel="stylesheet" href="site.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.65.1"><link rel="home" href="manual.html" title="Jalopy User Manual"><link rel="up" href="settings.html" title="Chapter 4. Settings"><link rel="previous" href="misc.html" title="4.3.13. Misc"><link rel="next" href="inspector-naming.html" title="4.4.2. Naming"><link rel="preface" href="dedication.html" title="Dedication"><link rel="preface" href="acknowledge.html" title="Acknowledgements"><link rel="preface" href="introduction.html" title="Introduction"><link rel="part" href="part-core.html" title="Part I. Jalopy core"><link rel="chapter" href="installation.html" title="Chapter 1. Installation"><link rel="chapter" href="build.html" title="Chapter 2. Building"><link rel="chapter" href="usage.html" title="Chapter 3. Usage"><link rel="chapter" href="settings.html" title="Chapter 4. Settings"><link rel="part" href="part-plugins.html" title="Part II. Plug-ins"><link rel="chapter" href="plugin-ant.html" title="Chapter 5. Ant Plug-in task"><link rel="chapter" href="plugin-console.html" title="Chapter 6. Console Application"><link rel="chapter" href="plugin-eclipse.html" title="Chapter 7. Eclipse Plug-in"><link rel="chapter" href="plugin-jbuilder.html" title="Chapter 8. JBuilder OpenTool"><link rel="chapter" href="plugin-jdev.html" title="Chapter 9. JDeveloper Extension"><link rel="chapter" href="plugin-jedit.html" title="Chapter 10. jEdit Plug-in"><link rel="chapter" href="plugin-netbeans.html" title="Chapter 11. NetBeans/Sun ONE Studio module"><link rel="appendix" href="dependencies.html" title="Appendix A. Library Dependencies"><link rel="appendix" href="license-bsd.html" title="Appendix B. The Jalopy BSD License"><link rel="appendix" href="license-antlr.html" title="Appendix C. ANTLR SOFTWARE RIGHTS"><link rel="appendix" href="license-apache.html" title="Appendix D. The Apache Software License, Version 1.1"><link rel="appendix" href="license-gnu.html" title="Appendix E. GNU GENERAL PUBLIC LICENSE Version 2, June 1991"><link rel="appendix" href="license-gnu-doc.html" title="Appendix F. GNU Free Documentation License Version 1.1, March 2000"><link rel="appendix" href="license-common-public.html" title="Appendix G. Common Public License Version 1.0"><link rel="appendix" href="license-sun-public.html" title="Appendix H. SUN PUBLIC LICENSE Version 1.0"><link rel="index" href="ix01.html" title="Index"><link rel="subsection" href="inspector.html#d0e5095" title="4.4.1. General"><link rel="subsection" href="inspector-naming.html" title="4.4.2. Naming">
23 <meta name="description" content="Jalopy Java Source Code Formatter Beautifier Pretty Printer">
24 <meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" l gen true for "http://jalopy.sf.net" r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://jalopy.sf.net" r (n 0 s 0 v 0 l 0))'>
25 </head><body id="toppage" bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table width="700" border="0" cellpadding="0" cellspacing="0" align="left"><tbody><tr><td><table cellpadding="0" cellspacing="0" width="100%" style="border:1px solid #336699"><tbody><tr><td height="16"></td></tr><tr><td bgcolor="#3399cc" height="1"></td></tr><tr style="border:none"><td style="border:none"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="logo">JALOPY</td><td class="sublogo" valign="bottom">Java Source Code Formatter Beautifier Pretty Printer</td></tr></tbody></table></td></tr><tr><td bgcolor="#3399cc" height="1"></td></tr><tr><td height="10"></td></tr><tr><td bgcolor="#ff8000" height="4"></td></tr><tr><td height="20" bgcolor="#336699" style="color:#ffffff;padding-left:10px"><a href="./index.html" class="navlink">Overview</a> •
26 <a href="./download.html" class="navlink">Download</a> •
27 <a href="./docs.html" class="navlink">Documentation</a> •
28 <a href="./plugins.html" class="navlink">Plug-ins</a> •
29 <a href="./links.html" class="navlink">Links</a> •
30 <a href="./contact.html" class="navlink">Contact</a></td></tr><tr><td height="1" bgcolor="#ffffff"></td></tr></tbody></table></td></tr><tr valign="top"><td valign="top" bgcolor="#ffffff"><table border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td height="20" bgcolor="#faebd7" style="padding-left:15px"><a href="./features.html" class="navlink2">Features</a> |
31 <a href="./history.html" class="navlink2">History</a> |
32 <a href="./manual.html" class="navlink2">Manual</a> |
33 <a href="./faq.html" class="navlink2">FAQ</a> |
34 <a href="./api/index.html" class="navlink2">Javadoc</a></td></tr><tr><td height="20" bgcolor="#ffffff"></td></tr><tr><td bgcolor="#eeeecc" height="17" align="right" style="font-size:10px;padding-right:3px">
35 This page generated: <strong>June 8 2004</strong></td></tr></tbody></table><table border="0" width="100%" cellspacing="0" cellpadding="5"><tr><td><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.4. Code Inspector</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="misc.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Settings</th><td width="20%" align="right"> <a accesskey="n" href="inspector-naming.html">Next</a></td></tr></table><hr></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="inspector"></a>4.4. Code Inspector</h2></div></div><div></div></div><a class="indexterm" name="d0e5090"></a><p>
36 Provides the configuration facility for the Jalopy Code Inspector. The Code Inspector is
37 able to inspect Java source files for naming convention violations and possible code
39 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5095"></a>4.4.1. General</h3></div></div><div></div></div><p>
40 Lets you control the general Code Inspector settings.
41 </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5100"></a>4.4.1.1. General</h4></div></div><div></div></div><div class="itemizedlist"><ul type="disc"><li><p>
44 Lets you enable or disable the Code Inspector as a whole.
45 </p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5109"></a>4.4.1.2. Tips</h4></div></div><div></div></div><p>
46 Lets you selectively choose what actions should be performed during inspection. Moving the
47 mouse pointer onto a checkbox displays a minimalistic tooltip after a short delay.
48 </p><div class="itemizedlist"><ul type="disc"><li><p>
49 Tip 1 - Don't substitute another type for <tt class="classname">Object</tt> in the equals declaration
51 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 35.
53 Tip 2 - Object the general contract when overriding <tt class="literal">equals</tt>
55 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 25.
57 Tip 3 - Always override <tt class="literal">hashCode</tt> when you override <tt class="literal">equals</tt>
59 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 36.
61 Tip 4 - Always override <tt class="literal">equals</tt> when you override <tt class="literal">hashCode</tt>
63 Tip 5 - Always override <tt class="literal">toString</tt>
65 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 42.
67 Tip 6 - Use interfaces only to define types
69 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 89.
71 Tip 7 - Replace structures with classes
73 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 97.
75 Tip 8 - Return zero-length arrays, not <tt class="literal">nulls</tt>
77 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 134.
79 Tip 9 - Adhere to generally accepted naming conventions
81 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 165.
83 Tip 10 - Refer to objects by their interfaces
85 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 156.
87 Tip 11 - Never declare that a method "throws Exception"
89 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 181.
91 Tip 12 - Never declare that a method "throws Throwable"
93 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 181.
95 Tip 13 - Don't ignore exceptions
97 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 187.
99 Tip 14 - Never invoke <tt class="literal">wait</tt> outside a loop
101 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 201.
103 Tip 15 - Avoid thread groups
105 For a detailed discussion see <span class="emphasis"><em>Effective Java</em></span> [<a href="bi01.html#bloch01">Bloch01</a>], pp. 211.
107 Tip 16 - Document collection types
109 As long as there are no strong-typed collections (a.k.a. Java Generics support) available,
110 it is best to document the object type of the items hold by a collection.
111 </p><div class="example"><a name="inspector-tip16"></a><p class="title"><b>Example 4.154. Collection comment</b></p><table border="0" bgcolor="#E0E0E0" class="shade"><tr><td><pre class="programlisting">
112 private static final List _favorableTypes = new ArrayList(20); // List of <String>
113 </pre></td></tr></table></div><p></p></li><li><p>
114 Tip 17 - Adhere to naming convention for collection types
116 If you use comments to document the object type of collection items, you should conform to
117 a generally accepted naming convention.
119 Tip 18 - Avoid empty <tt class="literal">finally</tt> blocks
121 Empty <tt class="literal">finally</tt> blocks are of no use and may indicate programmer errors.
122 </p><div class="example"><a name="inspector-tip18"></a><p class="title"><b>Example 4.155. Empty <tt class="literal">finally</tt> block</b></p><table border="0" bgcolor="#E0E0E0" class="shade"><tr><td><pre class="programlisting">
123 Writer writer = null;
127 writer = new BufferedWriter(new FileWriter(file));
130 catch (IOException ex)
132 System.err.println("file could not be written -- " + file);
137 </pre></td></tr></table></div><p>
138 The programmer certainly wanted to close the <tt class="classname">Writer</tt> in the
139 <tt class="literal">finally</tt> block to ensure that allocated system resources will be freed.
141 Tip 19 - Avoid variable shadowing
143 Variable shadowing should be avoided on general principle, as it tends to be confusing.
145 For more information about shadowing, see the
146 Java Developer Connection (JDC) Tech Tips, October 10, 2000
147 (<a href="http://developer.java.sun.com/developer/TechTips/2000/tt1010.html#tip2" target="_top">
148 http://developer.java.sun.com/developer/TechTips/2000/tt1010.html#tip2</a>, subscription needed) or
149 section 6.3.2, "Obscured Declarations," section 7.5.2,
150 "Type-Import-on-Demand Declaration," section 8.4.6, "Inheritance, Overriding, and Hiding,"
151 section 8.4.8.5, "Example: Invocation of Hidden Class Methods," and section 14.4.3,
152 "Shadowing of Names by Local variables" in "The Java Language Specification Second
153 Edition" by Gosling, Joy, Steele, and Bracha
154 (<a href="http://java.sun.com/docs/books/jls/" target="_top">http://java.sun.com/docs/books/jls/)</a>.
156 Tip 20 - Add <span class="emphasis"><em>NOI18N</em></span> comment for String literals
158 Enabling this tip will cause warnings for all String literals without associated
159 <tt class="literal">/* NOI18N */</tt> comment.
161 Internationalizing Java applications is often done with nifty tools that use marker
162 comments to indicate that a given String literal should not be considered for localization.
163 Most tools (at least the ones I know of) use trailing single-line comments which may not
164 be very robust for processing with a formatting tool such as Jalopy. In contrast the author
165 uses a multi-line comment of the form <tt class="literal">/* NOI18N */</tt> that gets directly
166 placed after a String literal and will therefore always stuck with it.
167 </p><div class="example"><a name="inspector-tip20"></a><p class="title"><b>Example 4.156. $NON-NLS-1$ comment</b></p><table border="0" bgcolor="#E0E0E0" class="shade"><tr><td><pre class="programlisting">
168 FileDialog dialog = new FileDialog(this,
169 ResourceBundle.getBundle(BUNDLE_NAME)
170 .getString("BTN_SAVE_AS", FileDialog.SAVE); //$NON-NLS-1$
171 </pre></td></tr></table></div><p>
172 This trailing comment could be easily moved away from its String literal during formatting
173 which would result in an unwanted notice on successive internationalization runs.
174 </p><div class="example"><a name="inspector-tip20a"></a><p class="title"><b>Example 4.157. $NON-NLS-1$ comment</b></p><table border="0" bgcolor="#E0E0E0" class="shade"><tr><td><pre class="programlisting">
177 ResourceBundle.getBundle(BUNDLE_NAME).
178 getString("BTN_SAVE_AS",
179 FileDialog.SAVE); //$NON-NLS-1$
180 </pre></td></tr></table></div><p></p><div class="example"><a name="inspector-tip20b"></a><p class="title"><b>Example 4.158. NOI18N comment</b></p><table border="0" bgcolor="#E0E0E0" class="shade"><tr><td><pre class="programlisting">
183 ResourceBundle.getBundle(BUNDLE_NAME).
184 getString("BTN_SAVE_AS" /* NOI18N */),
186 </pre></td></tr></table></div><p></p></li></ul></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="misc.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="settings.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="inspector-naming.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">4.3.13. Misc </td><td width="20%" align="center"><a accesskey="h" href="manual.html">Home</a></td><td width="40%" align="right" valign="top"> 4.4.2. Naming</td></tr></table></div></td></tr></table></td></tr><tr><td bgcolor="#eeeecc" height="17" style="font-size:9px;padding-left:5px"><a href="#toppage">to top</a></td></tr><tr><td height="30"><br></td></tr><tr><td height="3"></td></tr><tr><td bgcolor="#336699" height="1"></td></tr><tr><td height="1"></td></tr><tr><td bgcolor="#336699" height="16"></td></tr><tr><td bgcolor="#ff9966" height="4"></td></tr><tr><td class="footer" align="center" height="15" valign="middle">
187 Copyright © 2001-2004, <a class="footer" href="./contact.html">Marco Hunsicker</a>. All rights reserved. Hosted by <a href="http://sourceforge.net">SourceForge.net</a></td></tr></tbody></table><img src="http://sourceforge.net/sflogo.php?group_id=45216&type=1" width="1" height="1" border="0" hspace="0" vspace="0" alt=""></body></html>