Repository: buildr Updated Branches: refs/heads/master fb49ee846 -> 4934d3b16
Supply a default xsl file for generating the jdepend report. Project: http://git-wip-us.apache.org/repos/asf/buildr/repo Commit: http://git-wip-us.apache.org/repos/asf/buildr/commit/d5decfe7 Tree: http://git-wip-us.apache.org/repos/asf/buildr/tree/d5decfe7 Diff: http://git-wip-us.apache.org/repos/asf/buildr/diff/d5decfe7 Branch: refs/heads/master Commit: d5decfe7a2b7e9f0b833f78c012cb26f6adb6397 Parents: fb49ee8 Author: Peter Donald <[email protected]> Authored: Fri May 30 10:43:05 2014 +1000 Committer: Peter Donald <[email protected]> Committed: Fri May 30 10:43:05 2014 +1000 ---------------------------------------------------------------------- CHANGELOG | 1 + addon/buildr/jdepend-report.xsl | 404 +++++++++++++++++++++++++++++++++++ addon/buildr/jdepend.rb | 10 +- 3 files changed, 414 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/buildr/blob/d5decfe7/CHANGELOG ---------------------------------------------------------------------- diff --git a/CHANGELOG b/CHANGELOG index e10fc3f..9de1fad 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,5 @@ 1.4.18 (Pending) +* Change: Supply a default xsl file for generating the jdepend report. * Fixed: Fix the naming of css_lint addon file so it is made available as an addon. http://git-wip-us.apache.org/repos/asf/buildr/blob/d5decfe7/addon/buildr/jdepend-report.xsl ---------------------------------------------------------------------- diff --git a/addon/buildr/jdepend-report.xsl b/addon/buildr/jdepend-report.xsl new file mode 100644 index 0000000..81f3a29 --- /dev/null +++ b/addon/buildr/jdepend-report.xsl @@ -0,0 +1,404 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + + <!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + + <xsl:output method="html" indent="yes" encoding="US-ASCII"/> + + <xsl:template match="JDepend"> + <html> + <head> + <title>JDepend Analysis</title> + + <style type="text/css"> + body { + font:normal 68% verdana,arial,helvetica; + color:#000000; + } + table tr td, tr th { + font-size: 68%; + } + table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; + } + table.details tr td{ + background:#eeeee0; + } + + p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; + margin-left:2em; + margin-right:2em; + } + h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica + } + h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica + } + h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica + } + h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica + } + .Error { + font-weight:bold; color:red; + } + .Failure { + font-weight:bold; color:purple; + } + .Properties { + text-align:right; + } + </style> + + + </head> + <body> + <!--h1>JDepend Report</h1> + <ul> + <xsl:for-each select="./Packages/Package"> + <xsl:sort select="@name"/> + <li><xsl:value-of select="@name"/></li> + </xsl:for-each> + </ul--> + + <h1> + <a name="top">JDepend Analysis</a> + </h1> + <p align="right">Designed for use with + <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://buildr.apache.org">Buildr</a>. + </p> + <hr size="2"/> + + <table width="100%"> + <tr> + <td> + <a name="NVsummary"> + <h2>Summary</h2> + </a> + </td> + <td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td> + </tr> + </table> + + <table width="100%" class="details"> + <tr> + <th>Package</th> + <th>Total Classes</th> + <th> + <a href="#EXnumber">Abstract Classes</a> + </th> + <th> + <a href="#EXnumber">Concrete Classes</a> + </th> + <th> + <a href="#EXafferent">Afferent Couplings</a> + </th> + <th> + <a href="#EXefferent">Efferent Couplings</a> + </th> + <th> + <a href="#EXabstractness">Abstractness</a> + </th> + <th> + <a href="#EXinstability">Instability</a> + </th> + <th> + <a href="#EXdistance">Distance</a> + </th> + + </tr> + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) = 0"> + <tr> + <td align="left"> + <a> + <xsl:attribute name="href">#PK<xsl:value-of select="@name"/> + </xsl:attribute> + <xsl:value-of select="@name"/> + </a> + </td> + <td align="right"> + <xsl:value-of select="Stats/TotalClasses"/> + </td> + <td align="right"> + <xsl:value-of select="Stats/AbstractClasses"/> + </td> + <td align="right"> + <xsl:value-of select="Stats/ConcreteClasses"/> + </td> + <td align="right"> + <xsl:value-of select="Stats/Ca"/> + </td> + <td align="right"> + <xsl:value-of select="Stats/Ce"/> + </td> + <td align="right"> + <xsl:value-of select="Stats/A"/> + </td> + <td align="right"> + <xsl:value-of select="Stats/I"/> + </td> + <td align="right"> + <xsl:value-of select="Stats/D"/> + </td> + + + </tr> + </xsl:if> + </xsl:for-each> + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) > 0"> + <tr> + <td align="left"> + <xsl:value-of select="@name"/> + </td> + <td align="left" colspan="8"> + <xsl:value-of select="error"/> + </td> + </tr> + </xsl:if> + </xsl:for-each> + </table> + + <table width="100%"> + <tr> + <td> + <a name="NVpackages"> + <h2>Packages</h2> + </a> + </td> + <td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td> + </tr> + </table> + + <xsl:for-each select="./Packages/Package"> + <xsl:if test="count(error) = 0"> + <h3> + <a> + <xsl:attribute name="name">PK<xsl:value-of select="@name"/> + </xsl:attribute> + <xsl:value-of select="@name"/> + </a> + </h3> + + <table width="100%"> + <tr> + <td><a href="#EXafferent">Afferent Couplings</a>: + <xsl:value-of select="Stats/Ca"/> + </td> + <td><a href="#EXefferent">Efferent Couplings</a>: + <xsl:value-of select="Stats/Ce"/> + </td> + <td><a href="#EXabstractness">Abstractness</a>: + <xsl:value-of select="Stats/A"/> + </td> + <td><a href="#EXinstability">Instability</a>: + <xsl:value-of select="Stats/I"/> + </td> + <td><a href="#EXdistance">Distance</a>: + <xsl:value-of select="Stats/D"/> + </td> + </tr> + </table> + + <table width="100%" class="details"> + <tr> + <th>Abstract Classes</th> + <th>Concrete Classes</th> + <th>Used by Packages</th> + <th>Uses Packages</th> + </tr> + <tr> + <td valign="top" width="25%"> + <xsl:if test="count(AbstractClasses/Class)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="AbstractClasses/Class"> + <xsl:value-of select="node()"/> + <br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(ConcreteClasses/Class)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="ConcreteClasses/Class"> + <xsl:value-of select="node()"/> + <br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(UsedBy/Package)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="UsedBy/Package"> + <a> + <xsl:attribute name="href">#PK<xsl:value-of select="node()"/> + </xsl:attribute> + <xsl:value-of select="node()"/> + </a> + <br/> + </xsl:for-each> + </td> + <td valign="top" width="25%"> + <xsl:if test="count(DependsUpon/Package)=0"> + <i>None</i> + </xsl:if> + <xsl:for-each select="DependsUpon/Package"> + <a> + <xsl:attribute name="href">#PK<xsl:value-of select="node()"/> + </xsl:attribute> + <xsl:value-of select="node()"/> + </a> + <br/> + </xsl:for-each> + </td> + </tr> + </table> + </xsl:if> + </xsl:for-each> + + <table width="100%"> + <tr> + <td> + <a name="NVcycles"> + <h2>Cycles</h2> + </a> + </td> + <td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td> + </tr> + </table> + + <xsl:if test="count(Cycles/Package) = 0"> + <p>There are no cyclic dependancies.</p> + </xsl:if> + <xsl:for-each select="Cycles/Package"> + <h3> + <xsl:value-of select="@Name"/> + </h3> + <p> + <xsl:for-each select="Package"> + <xsl:value-of select="."/> + <br/> + </xsl:for-each> + </p> + </xsl:for-each> + + <table width="100%"> + <tr> + <td> + <a name="NVexplanations"> + <h2>Explanations</h2> + </a> + </td> + <td align="right"> + [<a href="#NVsummary">summary</a>] + [<a href="#NVpackages">packages</a>] + [<a href="#NVcycles">cycles</a>] + [<a href="#NVexplanations">explanations</a>] + </td> + </tr> + </table> + + <p>The following explanations are for quick reference and are lifted directly from the original<a + href="http://www.clarkware.com/software/JDepend.html"> + JDepend documentation</a>. + </p> + + <h3> + <a name="EXnumber">Number of Classes</a> + </h3> + <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the + extensibility of the package. + </p> + <h3> + <a name="EXafferent">Afferent Couplings</a> + </h3> + <p>The number of other packages that depend upon classes within the package is an indicator of the package's + responsibility. + </p> + <h3> + <a name="EXefferent">Efferent Couplings</a> + </h3> + <p>The number of other packages that the classes in the package depend upon is an indicator of the package's + independence. + </p> + <h3> + <a name="EXabstractness">Abstractness</a> + </h3> + <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of + classes in the analyzed package. + </p> + <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a + completely abstract package. + </p> + <h3> + <a name="EXinstability">Instability</a> + </h3> + <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the + package's resilience to change. + </p> + <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a + completely instable package. + </p> + <h3> + <a name="EXdistance">Distance</a> + </h3> + <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the + package's balance between abstractness and stability. + </p> + <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. + Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, + y=0). + </p> + <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence + and D=1 indicating a package that is as far from the main sequence as possible. + </p> + + </body> + </html> + </xsl:template> + +</xsl:stylesheet> http://git-wip-us.apache.org/repos/asf/buildr/blob/d5decfe7/addon/buildr/jdepend.rb ---------------------------------------------------------------------- diff --git a/addon/buildr/jdepend.rb b/addon/buildr/jdepend.rb index ad6d6a6..b22761f 100644 --- a/addon/buildr/jdepend.rb +++ b/addon/buildr/jdepend.rb @@ -98,7 +98,15 @@ module Buildr attr_writer :style_file def style_file - @style_file || "#{self.config_directory}/jdepend.xsl" + unless @style_file + project_xsl = "#{self.config_directory}/jdepend-report.xsl" + if File.exist?(project_xsl) + @style_file = project_xsl + else + @style_file = "#{File.dirname(__FILE__)}/jdepend-report.xsl" + end + end + @style_file end def target_paths
