3.18.1
  1. Enhancements in HeterogenousCollection.
  2. Ripple effect from Common refactorings.
  3. Modifications in InspectorSet.xsl
3.18.0
  1. JDK 1.3 compatibility. Hammurapi can now be run from WSAD 5.1.2. Replace files in lib directory with files from lib-1.3 directory.
3.17.0
  1. New inspector ER-212, thanks to Johannes.
  2. <resources> entry was renamed to <resource> in inspector descriptors.
3.16.1
  1. Fix in waiving mechanism.
3.16.0
  1. Database classes are now compiled to use SQL types in updates and deletes which should solve some problems with using Hammurapi with Oracle and MS SQL.
  2. Rolled back Tasneem changes in waiving infrastructure.
  3. New concept - Violation filter allows to accept or reject violations.
  4. New attribute "baselining" allows to perform "baselining" review and after that if baselining="on" none of "baseline" violations will appear in the report.
  5. AlphabeticalImportRule has been enhanced to understand that java. imports shall go before com. imports. The inspector needs further enhancement.
3.15.0 (cumulative from 3.11.1)
  1. NoPublicFieldsRule was enhanced
  2. Fixed a bug in AssignmentInsightConditionalRule
  3. Added a new method getRootDir() to ReviewRequest interface
  4. Hammurapi task collects metrics
  5. Added detach() method to InspectorContext
  6. VERY IMPORTANT: inspectors.xml has been renamed to TaskBase.xml and quick-inspectors.xml has been renamed to QuickHammurapiTask.xml. It has been done in order to leverage ClassResourceLoader class, which takes locale into account. Now if you want to translate inspectors descriptions to your language add org/hammurapi/TaskBase_<your locale>.xml  to classpath (or to Hammurapi.jar) and Hammurapi will pick up translated inspectors. 
  7. InvokeFinalizeRule was enhanced
  8. Output collects rendering time metrics
  9. PrioritizingInspectors collects a new metric to help prioritize classes for enhancement effort.
  10. There is a new attribute in the tasks - tabSize. 
  11. Added a new constructor to Reviewer
  12. SynchronizationInServletsRule was enhanced - when synchronized method or block is encountered the inspector traverses the caller graph and reports a violation if given method is invoked directly or indirectly from a method in a class, which is a subclass of Servlet and that method has two parameters of type ServletRequest and ServletResponse.
3.11.1
  1. Bug fix in Jsel. Thanks to Johannes for the test case.
  2. Bug fix in ER-035. Thanks to Pavol for reporting the bug.
  3. Bug fix in ER-069. Thanks to Pavol for reporting the bug.
  4. Bug fixes in waivers. Thanks to Tasneem.
3.11.0
  1. Fix in severityThreshold processing.
  2. Review description - attribute in the task and line in the summary.
  3. New handling of waivers - files which contain violations to be waived are forced reviewed even if unchanged. This behaviour is controlled by reviewOnWaivers attribute. Not thoroughly tested.
  4. Changes in waiving API.
  5. Inspectors summary contains a table of sources - name, location (path or url) and revision.
  6. <inspector-set> supports two new attributes - 'name' and 'revision'
  7. New inspector - DotChainInspector. Check for too long chains of dots like StringBuffer.append(...).append(...).append(...).
  8. New nested element in <hammurapi> task - <historyOutput>, stores summary information in a relational database. Not tested yet.
  9. Bug fixes.
  10. Enhancements in SqlCreateStatementWithoutCloseRule.
  11. New inspector - StringTokenizerDeprecatedInspector.
  12. New attribute in <hammurapi> and <quickurapi> - unpackDir.
  13. Enhancements in VendorNameViolation inspector.
  14. ArchitecturalLayerInspector.xml updated.
  15. Enhancements in FileHeaderRule.
  16. Eclipse plugin enhancements.
  17. HistoryOutput modifications caused by Oracle 'specifics'
  18. SqlCreateStatementWithoutCloseRule enhancements
  19. Fixed a typo in evictBadInspectors
3.10.0
  1. Refactoring caused by changes in Jsel.
  2. Fixed a bug in merics details page generation introduces in 3.9.x
  3. Updated ArchitecturalLayerInspector.xml, thanks to Tasneem.
  4. Enhanced HardcodedLiteralsRule.
  5. New 'virtual' inspector ER-209, thanks to Johannes.
  6. Fixes in 'vitrual' inpector processing.
  7. Enhancements in SqlStatementWithoutCloseRule, thanks to Johannes.
  8. New inspector - VendorNameViolation, thanks to Johannes.
3.9.3
  1. Refactoring caused by changes in hgcommons
  2. EnsureEjbCreate rule enhanced - it checks superclasses as well.
  3. Bug fixes
  4. PRIMARY_KEY table definition has been moved to Jsel.
  5. 'wrap' attribute removed as it caused a lot of confusion without bringing much of value.
3.9.0
  1. Minor modifications in the database schema and database layer caused by Oracle 'specifics'
  2. Oracle DDL script
  3. Modifications in ArchitecturalLayerInspector.java and ArchitecturalLayerInspector.xml
  4. Modifications in ReviewRequest and Reviewer - classloader passed to Reviewer through ReviewRequest instead of constructor. New class - ReviewRequestBase.
  5. Enhancements in HammurapiArchiver
  6. Fixed a bug which caused ClassCastException when "wrap" attribute was set to "true"
  7. New inspector - ER-017-E checks for assignments to parameters
  8. ER-017 is disabled by default because it produces a lot of noise
  9. NamingStandardsRule checks package names.
  10. Fixed a bug which caused generation of wrong violation summary for incremental reviews
3.8.2
  1. Reviewing and results processing now happens in different thread, which should increase performance on multiprocessor machines and with remote databases.
  2. Output creates directory if it does not exist and fails the build if the directory cannot be created.
  3. Distribution contains "projects" directory with a template project for quick-start. The template project compiles source files, builds javadoc, performs incremental review and applies waivers.
  4. LanguageElementFilter modified to work with Quick task as well.
  5. NamingStandardsRule modified to treat serialVersionUID as a special case.
  6. Presentation updated.
3.8.0
  1. Some code cleanup.
  2. Bug fixes.
  3. New class org.hammurapi.BufferedReviewRequest
  4. New attribute to Waiver - oneShot.
  5. FileHeaderRule supports multiple copyright strings and uses Glob pattern language (? and *)
  6. prettyPrint attribute removed.
  7. Changes in Reviewer class.
3.7.0
  1. Presentation in PDF and HTML
  2. New inspector - ER-114, UseEqualsInsteadOfCompareToInspector - finds code like a.compareTo(b)==0 and suggests to use a.equals(b) instead.
  3. Hammurapi generates summary of waived violations. New style in output - waived-violation.
  4. Signature of Inspector.initDB() changed to Inspector.initDB(Properties dbProperties) property "type" contains database type - "Hypersonic" or "Cloudscape".
  5. Fixed a bug in color codes in stylesheets which lead to improper rendering in Mozilla.
  6. Now in compilation unit path '/' is used as separator.
  7. New method Session.getClassPath().
  8. History inspector generates charts only if there is history for more than one day.
  9. getStorage() moved from InspectorContext to Session.
  10. Refactoring - BaseXxx classes renamed to XxxBase
  11. Performance improvements
  12. Changes due to refactoring in the rendering framework
  13. More JDBC stuff moved to SQLC
  14. Database schema changed to achieve smaller size and better performance
  15. cleanup attribute added to HammurapiTask
  16. skipIntactPackages attribute added to HammurapiTask
  17. HistoryInspector modified
  18. Bug fixes
  19. Refactoring - moving SQL to SQLC.
  20. Database schema changes
  21. Several inspectors which led to OutOfMemoryError on large codebases are disabled by default.
  22. Jsel: Operation has two new methods: visitCallers() and visitCallees(), Method has two new methods getOverrides() and getAllOverrides(). These new methods allow to write context-aware inspectors. For example ER-068 can now check that if some code invokes java.lang.Thread methods then this code is in call trace of one of EJB methods and only then issue a violation. In this release only method calls are taken into account.  Constructors and class/instance initialization blocks are ignored.
3.6.0
  1. Enhanced Technology stack inspector. Shows dependencies on external libraries. Includes implicit dependencies (e.g. int i=a.getSource().getLine() implicitly imports return type of getSource()). Groups dependencies by product, publisher and license. Has simple AI to guess publisher, product and license from package name.
  2. History inspector - produces history annotation, which shows codebase evolution over time. REPORT table has additional column - DESCRIPTION. And there is additional table for History inspector. Existing databases shall be modified. Additional attribute description and command line parameter -y.
  3. Return type of biz.hammurapi.config.Parameterizable.setParameter(String,Object) changed from void to boolean to allow to use helper classes to handle parameters. Custom parameterizable inspectors shall be modified and recompiled. setParameter() shall return true if operation was successful and false if parameter was not recognized (Hammurapi will throw an exception is this case).
  4. Hammurapi (and Quick Hammurapi) can now be configured through config files. See Ant task documentation. New command line options -m <config file> and -q <config url>
  5. Bug fixes.
  6. JFree Chart version upgrade. Modified NCSS sources to work with the new version.
  7. Refactoring: WaiverSourceEntry and InpsectorSourceEntry are now subclasses of XmlSourceEntry (in common library).
3.5.0
  1. New method disable() in BaseInspector allows its subclasses to disable itself on errors. Typical scenario - Struts inspector detects that there is no Struts classes in the classpath and as such it can't perform its job. The inspector disables itself. It is also a good idea to issue a warning before self-disabling.
  2. Persistence services for inspectors - new method initDb(SQLProcessor) in Inspector and getProcessor() in Session. Implement initDB() to create tables and other database objects, which the inspector will use to store its data. initDB() method gets invoked only for Hypersonic and Cloudscape temporary (default) or standalone (-D command line switch, database attribute) database when the database is created. More reading about SQLProcessor and SQL Compiler can be found on Documents page.
  3. New command line options -I <inspector name> - enable inspector, -X <inspector name> - disable inspector, -E - evict bad inspectors. Eviction means that inspectors which throw exception in their visit() and leave() method will be disabled on the first exception and a warning will be output.
  4. Refactoring: ExceptionSink changed to VisitorExceptionSink, AccumulatingExceptionSink changed to AccumulatingVisitorExceptionSink. You might need to recompile your custom inspectors and maybe make code modifications.
  5. Inspector set summary contains only enabled inspectors.
  6. New method shutdown() in Reviewer. IDE plugins shall invoke this method on IDE shutdown.
3.4.0
  1. Baseline reviews - report shows deltas between current report and report of some date in nthe past.
  2. Order of inspectors can be specified with <after> element in inspector descriptor
  3. Eclipse plugin, early implementation.
  4. Quick task enhanced.
  5. InspectorContext extends Attributable
  6. New interface - Session. InspectorContext has getSession() method.
  7. New inspectors check for proper JDBC resource handling.
  8. Bug fixes.
  9. Hammurapi archiver task - creates archives or sources and needed class/jars for review.
3.3.0
  1. ContinueRule doesn't complain about labeled continue.
  2. DefineLoggerForClassRule stipulates logger variable name be LOGGER as well and logger. Requires logger variable to be final.
  3. HidingInheritedFieldsRule doesn't complain about not visible fields.
  4. Fix in LogicalNestingRule
  5. Changes in Architecture, Jsp, Ncss and CallerTrace inspectors. Thanks to Johannes
  6. Formatting inspector (IndentationRule). Thanks to Jochen.
  7. Supports Cloudscape database.
  8. Quick task, which doesn't use database and doesn't invoke Repository and package level inspectors.
  9. failOnFirstException attribute in HammurapiTask and QuickHammurapiTask. By default Hammurapi tries as much work as possible and reports exceptions as warnings. If failOnFirstException is true then Hammurapi task will fail on the first exception.
  10. hostId attribute. This attribute is useful when you use database server to store results.
  11. Jsel supports calculation of dependencies. Hammurapi task now has an attribute calculateDependencies. If it is true dependencies will be stored in the database.
  12. Nested <connection> element to use database server to store review results.
  13. Hammurapi can store source code in the database as well as review results.
  14. Some SQL statements extracted from AggregatedResults into views.
  15. Time to generate report is stored in the database for performance analysis
  16. Some sources modified to use SQLC generated classes.
  17. org.hammurapi.Reviewer and org.hammurapi.ReviewRequest classes provide basis for developing IDE plugins.
  18. Fixed bug with metric min/max value in reports.
3.2.1
  1. Technology stack inspecor
3.2.0
  1. Updated inspectors by Johannes
  2. Fix in Jsel which caused ClassNotFoundException in situations where probable subclass didn't exist in classloader, but only in source repository
  3. VariablesRule enhanced
  4. Change ratio metric
  5. Exceptions throws by inspectors are reported as warnings
  6. Fix in LineLengthRule
  7. Removed debug output from LogicalNestingRule
  8. Database processing changes, significant improvement in performance
3.1.1
  1. Uses Hypersonic 1.7.2. If you run Hammurapi on Java 1.3 you'll need to replace hsqldb.jar with the one built for Java 1.3
  2. Sigma and DPMO are displayed even if there are warnings.
  3. Bug fixes
3.1.0
  1. Fixed a problem with severity summary.
  2. Added "version" attribute to Inspector summary.
  3. Added "forceOnWarnings" to Hammurapi task.
  4. Moved AbstractDomObject to Common library
3.0.0
  1. Improved performance. One user reported review time decrease from 19 min to 11 min, which is 42% improvement.
  2. Improved memory management.
  3. Hammurapi task supports nested <server> element to connect Hypersonic database server to store results. See Ant task documentation for details.
  4. <output> element supports nested <stylesheet> elements. See Ant task documentation and user manual.
  5. org.hammurapi.inspectors.samples.CollectStringLiterals inspector demonstrates how to:
    • use InspectorContext.getStorage() method to store inspector findings to the database;
    • create annotation
    • usage of inspector lifecycle methods init() and destroy()
  6. org.hammurapi.render.Renderer and org.hammurapi.render.dom.AbstractRenderer are now part of hgcommons library
  7. Metrics table now has links to the source of maximum measurement, the source of minimum measurement and a table with all measurements.
  8. <waiver> supports include-element,exclude-element, include-file, and exclude-file nested elements, which allows to assign waivers to packages, files, types and methods.
  9. Changed inspectors instantiation sequence, InspectorContext is now fully functional in Inspector.init() method.
  10. Incremental reviews, Comply-on-touch policy (see user manual). Only modified files are reviewed unless force attribute is set. Modified files are highlighted in the report by icon (configurable).
  11. Additional command line options T,D,R,j,p
  12. InspectorStack modified to invoke set parameters only once per inspector.
  13. Added findReviewResults() method to ResultsFactory (for incremental reviews)
  14. Added isNew() method to AggregatedResults (for incremental reviews)
  15. Modified database schema to support incremental reviews.
  16. Fixed bug in metrics total and average calculation
  17. Replaced java.lang.RuntimeException with biz.hammurapi.RuntimeException for Java 1.3 compatibility.
  18. Some refactoring.
  19. Changed "Possible Bugs" category to "Possible bugs" in inspectors.xml
  20. User manual updated.
2.5.0
  1. <waiver> element supports multiple <signature> elements
  2. biz.hammurapi.persistence.CompositeStorage InspectorContext.getStorage() method added.
  3. InspectorContext.addMetric() takes additional parameter 'source'
  4. Fixed typo in word "Miscellaneous"
  5. InspectorSetStack returns 'null' as default order, which is important for autoordering
  6. Filters autoordering, fixed bug in autoordering.
  7. Added setOrder() to inspector entry in Ant task
  8. Modified ER-102 message to be more detailed
  9. Fixed bug in 'output' element's leftPanelStyle attribute
  10. Moved Storage and InMemoryStorage to commons
  11. Filtering debugging - if you specify debugType attribute Hammurapi will output information on which filter's approve() method is assigned to which inspector's visit() or leave() method along with invocation registration information
  12. Added getStorage() method to ResultsFactory
  13. AggregatedResults.addMetric() takes additional 'source' parameter
  14. Performance improvements
  15. Individual metrics measurements are stored in the DB to be displayed on metric details page (coming in next release)
  16. Waiver interface changed - removed getSignature() method and added waive() and isActive() methods
  17. Fixed bugs in LanguageElementFilter
  18. Fixed bug in ThreadSubclassesRule
  19. Modified formatting of config info in DoNotUseTypeRule
  20. Updated documentation
2.4.1
  1. logger.fatal -> logger.error in fix and violation samples
  2. LanguageElementFilter - built-in filter which filters by package, type, operation and file name. See documentation for details
  3. Fix in UnusedVariablesRule
  4. Fix in SyncronizationInServletsRule - it now checks for synchronized methods as well.
  5. Added 'commit()' method to results
  6. Changes in Hammurapi database schema
  7. Inspector can now be null in warnings
  8. Fixed LogicalNestingRule
  9. Fixed CastingPrimitiveTypesRule
  10. Added RevisionMapper element to Hammurapi task
2.3.1
  1. Bug fix.
2.3.0
  1. Filtering. One inspector can filter invocations of another. Similar to autowaivers. See documentation for details.
  2. Updated documentation - filtering, inspectors.xml file format
  3. Removed BaseReflectionInspector
  4. Uses Jsel 1.2.8 and as such will not fail on syntax errors or duplicate classes, but will rather output warnings
  5. Architecture inspector. Disabled by default as it is in beta state.
  6. Resource handling inspector
2.2.1
  1. String Concatenation Inspector - finds places where string are constructed by using lots of + operators and suggests to use StringBuffer
  2. Ships with Jsel 1.2.7, therefore there is no more requirement to have Antlr classes loaded by the same classloader as Jsel classes
  3. Enhancements in ForControlVariableRule.
  4. Enhancements in CastingPrimitiveTypesToLowerPrecisionRule
2.2.0
  1. Updated documentation
  2. Fixed bug in HTML report generation introduced in 2.1.b4
  3. Table of Content added to the left panel of HTML report
  4. Enhancements in inspectors. Inspectors modified to not to use JavaTokenTypes but JavaTokenTypeNames instead.
  5. New JSP inspecctor and Caller Trace inpsectors contributed by Johannes. Enhanced NCSS inspector
  6. Command line interface
  7. Fix in nested 'insector' element's 'waivable' attribute
  8. Removed 'timeStampFilter' attribute from 'output' nested element
  9. Downloads moved to SourceForge because I almost exceeded my 5Gb limit in June
2.1.b7
  1. Updated documentation
  2. Removed paiThreshold, added dpmoThreshold and sigmaThreshold
  3. Added autowaiver ER-049 -> ER-075
2.1.b6
  1. Bug fixes
  2. Added styles to stylesheets for highlighting violation and fix samples. Violation can be highlighted in bold red by using <span class="problem">, Fix can be highlighted in bold green by using <span class="fix">.
2.1.b5
  1. Bug fixes and enhancements
2.1.b4
  1. Contains jars for JDK 1.3 in lib-1.3 directory. If you need to review JDK 1.3 sources exclude lib/Jsel-1.4.jar from Hammurapi classpath and include lib-1.3/Jsel-1.3.jar, If you need to run Hammurapi on JDK 1.3 exclude lib/hgcommons-1.4.jar from Hammurapi classpath and include lib-1.3/hgcommons-1.3.jar
2.1.b3
  1. Bug fixes
2.1.b2
  1. Bug fixes
2.1.beta-1
  1. Bug fixes
  2. Struts inspector
  3. Stores review results into database. Currently uses embedded Hypersonic.