# 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.
module Buildr
# Provides the javancss:html
and javancss:xml
tasks.
# Require explicitly using require "buildr/javancss"
.
module JavaNCSS
class << self
# The specs for requirements
def dependencies
[
'org.codehaus.javancss:javancss:jar:32.53',
'javancss:ccl:jar:29.50',
'javancss:jhbasic:jar:29.50'
]
end
def javancss(output_file, source_paths, options = {})
dependencies = (options[:dependencies] || []) + self.dependencies
cp = Buildr.artifacts(dependencies).each(&:invoke).map(&:to_s)
args = []
args << "-all"
args << "-xml"
args << "-out"
args << output_file
args << "-recursive"
source_paths.each do |source_path|
args << source_path
end
begin
Java::Commands.java 'javancss.Main', *(args + [{:classpath => cp, :properties => options[:properties], :java_args => options[:java_args]}])
rescue => e
raise e if options[:fail_on_error]
end
end
end
class Config
def enabled?
!!@enabled
end
attr_writer :enabled
def html_enabled?
File.exist?(self.style_file)
end
attr_writer :config_directory
def config_directory
@config_directory || project._(:source, :main, :etc, :javancss)
end
attr_writer :report_dir
def report_dir
@report_dir || project._(:reports, :javancss)
end
attr_writer :fail_on_error
def fail_on_error?
@fail_on_error.nil? ? false : @fail_on_error
end
attr_writer :xml_output_file
def xml_output_file
@xml_output_file || "#{self.report_dir}/javancss.xml"
end
attr_writer :html_output_file
def html_output_file
@html_output_file || "#{self.report_dir}/javancss.html"
end
attr_writer :style_file
def style_file
@style_file || "#{self.config_directory}/javancss2html.xsl"
end
def source_paths
@source_paths ||= [self.project.compile.sources, self.project.test.compile.sources]
end
protected
def initialize(project)
@project = project
end
attr_reader :project
end
module ProjectExtension
include Extension
def javancss
@javancss ||= Buildr::JavaNCSS::Config.new(project)
end
after_define do |project|
if project.javancss.enabled?
desc "Generate JavaNCSS xml report."
project.task("javancss:xml") do
puts "JavaNCSS: Analyzing source code..."
mkdir_p File.dirname(project.javancss.xml_output_file)
Buildr::JavaNCSS.javancss(project.javancss.xml_output_file,
project.javancss.source_paths.flatten.compact,
:fail_on_error => project.javancss.fail_on_error?)
end
if project.javancss.html_enabled?
xml_task = project.task("javancss:xml")
desc "Generate JavaNCSS html report."
project.task("javancss:html" => xml_task) do
puts "JavaNCSS: Generating report"
mkdir_p File.dirname(project.javancss.html_output_file)
Buildr.ant "javancss" do |ant|
ant.xslt :in => project.javancss.xml_output_file,
:out => project.javancss.html_output_file,
:style => project.javancss.style_file
end
end
end
end
end
end
end
end
class Buildr::Project
include Buildr::JavaNCSS::ProjectExtension
end