Hi, latest version of the Jrefactory integration after feedback from maven-dev.
all modified files are as patch files. All new files are for jakarta-turbine-maven/src/java/org/apache/maven/sourcedef/ jrefactory.jar can be obtained from here and needs placing in lib.repo http://prdownloads.sourceforge.net/jrefactory/jrefactory-2.6.36-binary.zip FYI, running the maven:pretty-print target reduces checksource errors from 5K to 1K. Outstanding issues: when methods have static and final modifiers, Jrefactory orders them in a way that generates a checksource error. bug has been logged with jrefactory What should the default brace location be? turbine-style or sun-style? Should we be autogenerating javadoc? whilst reduces checkstyle errors, doesn't neccessarily improve the code? Should we autogenerate @author tags? If a file is missing the @author tag, the user who runs the pretty-print task will have their username inserted as the author. Only a problem if there is a significant number of files missing the @author tag. Cheers Nathan
Index: jakarta-turbine-maven/build.xml =================================================================== RCS file: /home/cvspublic/jakarta-turbine-maven/build.xml,v retrieving revision 1.37 diff -r1.37 build.xml 149a150,153 > > <target name="maven:pretty-print"> > <ant antfile="${maven.home}/plugins/core/build.xml" target="pretty-print"/> > </target>
Index: jakarta-turbine-maven/src/templates/build/plugins/core/build.xml =================================================================== RCS file: /home/cvspublic/jakarta-turbine-maven/src/templates/build/plugins/core/build.xml,v retrieving revision 1.4 diff -r1.4 build.xml 331a332,374 > > <!-- ================================================================== --> > <!-- JRefactory Pretty Print --> > <!-- ================================================================== --> > > <target > name="pretty-print" > depends="local-init, env" > description="modify code according to maven source definition"> > > <taskdef > name="prettyprintconfig" > classname="org.apache.maven.sourcedef.PrettyPrintConfigTask"> > <classpath refid="maven-classpath"/> > </taskdef> > > <prettyprintconfig/> > > <taskdef name="filesetfrompath" > classname="org.apache.maven.ant.FileSetFromPath"> > <classpath> > <path refid="maven-classpath"/> > </classpath> > </taskdef> > > <filesetfrompath pathid="maven.src.set" > filesetid="maven.sourceDirectories.fileset" > includes="${maven.jrefactory.includes}" > excludes="${maven.jrefactory.excludes}"/> > > <taskdef > name="prettyprint" > classname="org.acm.seguin.ant.Pretty"> > <classpath refid="maven-classpath"/> > </taskdef> > > <prettyprint settingsDir="${maven.build.dir}"> > <fileset refid="maven.sourceDirectories.fileset" /> > </prettyprint> > > </target> > > 341a385,391 > <taskdef > name="checkstyleconfig" > classname="org.apache.maven.sourcedef.CheckStyleConfigTask"> > <classpath refid="maven-classpath"/> > </taskdef> > > 366,403c416,420 < <checkstyle < lcurlyType="${maven.checkstyle.lcurly.type}" < lcurlyMethod="${maven.checkstyle.lcurly.method}" < lcurlyOther="${maven.checkstyle.lcurly.other}" < rcurly="${maven.checkstyle.rcurly}" < parenPad="${maven.checkstyle.paren.pad}" < allowTabs="${maven.checkstyle.allow.tabs}" < allowProtected="${maven.checkstyle.allow.protected}" < allowPackage="${maven.checkstyle.allow.package}" < allowNoAuthor="${maven.checkstyle.allow.no.author}" < maxLineLen="${maven.checkstyle.max.line.len}" < tabWidth="${maven.checkstyle.tab.width}" < ignoreLineLengthPattern="${maven.checkstyle.ignore.line.len.pattern}" < maxMethodLen="${maven.checkstyle.max.method.len}" < maxConstructorLen="${maven.checkstyle.max.constructor.len}" < maxFileLen="${maven.checkstyle.max.file.len}" < ignoreImportLen="${maven.checkstyle.ignore.import.len}" < memberPattern="${maven.checkstyle.member.pattern}" < publicMemberPattern="${maven.checkstyle.public.member.pattern}" < paramPattern="${maven.checkstyle.param.pattern}" < constPattern="${maven.checkstyle.const.pattern}" < staticPattern="${maven.checkstyle.static.pattern}" < typePattern="${maven.checkstyle.type.pattern}" < methodPattern="${maven.checkstyle.method.pattern}" < localVarPattern="${maven.checkstyle.local.var.pattern}" < headerFile="${maven.checkstyle.header.file}" < headerLinesRegexp="${maven.checkstyle.header.lines.regexp}" < headerIgnoreLine="${maven.checkstyle.header.ignore.line}" < javadocScope="${maven.checkstyle.javadoc.scope}" < requirePackageHtml="${maven.checkstyle.require.package.html}" < ignoreImports="${maven.checkstyle.ignore.imports}" < illegalImports="${maven.checkstyle.illegal.imports}" < ignoreWhitespace="${maven.checkstyle.ignore.whitespace}" < ignoreCastWhitespace="${maven.checkstyle.ignore.cast.whitespace}" < ignoreBraces="${maven.checkstyle.ignore.braces}" < ignorePublicInInterface="${maven.checkstyle.ignore.public.in.interface}" < failOnViolation="${maven.checkstyle.fail.on.violation}" < cacheFile="${maven.checkstyle.cache.file}" > --- > <checkstyleconfig/> > > <checkstyle > properties="${maven.checkstyle.dir}/CheckStyleConfig.properties" > failOnViolation="${maven.checkstyle.fail.on.violation}"> 405,406c422,423 < <formatter type="xml" toFile="${maven.build.dir}/checkstyle-raw-report.xml"/> < <formatter type="plain" toFile="${maven.build.dir}/checkstyle-raw-report.txt"/> --- > <formatter type="xml" >toFile="${maven.checkstyle.dir}/checkstyle-raw-report.xml"/> > <formatter type="plain" >toFile="${maven.checkstyle.dir}/checkstyle-raw-report.txt"/> 413,414c430,431 < in="${maven.build.dir}/checkstyle-raw-report.xml" < out="${maven.gen.docs}/checkstyle-report.xml"> --- > in="${maven.checkstyle.dir}/checkstyle-raw-report.xml" > out="${maven.checkstyle.dir}/checkstyle-report.xml">
Index: jakarta-turbine-maven/src/templates/build/plugins/core/default.properties =================================================================== RCS file: /home/cvspublic/jakarta-turbine-maven/src/templates/build/plugins/core/default.properties,v retrieving revision 1.4 diff -r1.4 default.properties 77a78,90 > # source definition properties. if not set, default values below are > # set by org.apache.maven.sourcedef.SourceDefinition > # > > #maven.sourcedef.class.brace.style=PASCAL > #maven.sourcedef.method.brace.style=PASCAL > #maven.sourcedef.block.brace.style=PASCAL > #maven.sourcedef.keyword.location.right.brace=alone > #maven.sourcedef.max.line.len=80 > #maven.sourcedef.header.file=LICENSE.txt > #maven.sourcedef.allow.tabs=false > > # 80a94 > maven.checkstyle.dir=${maven.build.dir}/checkstyle 83,86d96 < maven.checkstyle.lcurly.type = nl < maven.checkstyle.lcurly.method = nl < maven.checkstyle.lcurly.other = nl < maven.checkstyle.rcurly = alone 88d97 < maven.checkstyle.allow.tabs = false 92d100 < maven.checkstyle.max.line.len = 80 107d114 < maven.checkstyle.header.file = LICENSE.txt 109c116 < maven.checkstyle.header.ignore.line = 1,6 --- > maven.checkstyle.header.ignore.line= 119c126,213 < maven.checkstyle.cache.file = ${maven.build.dir}/checkstyle-cachefile --- > maven.checkstyle.cache.file = ${maven.checkstyle.dir}/checkstyle-cachefile > > # > # jrefactroy properties > # > > maven.jrefactory.includes=**/*.java > maven.jrefactory.excludes= > maven.jrefactory.version=3.8 > maven.jrefactory.indent=4 > maven.jrefactory.indent.char=space > maven.jrefactory.expr.space=false > maven.jrefactory.lines.between=2 > maven.jrefactory.cast.space=true > maven.jrefactory.cast.force.nospace=false > maven.jrefactory.surprise.return=double > maven.jrefactory.throws.newline=false > maven.jrefactory.field.name.indent=-1 > maven.jrefactory.end.line=CRNL > maven.jrefactory.variable.spacing=single > maven.jrefactory.dynamic.variable.spacing=1 > maven.jrefactory.variable.align.with.block=false > maven.jrefactory.case.indent=4 > maven.jrefactory.keyword.space=true > maven.jrefactory.insert.space.around.local.variables=false > maven.jrefactory.lines.after.package=1 > maven.jrefactory.maintain.newlines.around.imports=true > maven.jrefactory.lines.before.class=0 > maven.jrefactory.indent.in.initializer=false > maven.jrefactory.bang.space=false > maven.jrefactory.method.space=false > maven.jrefactory.cast.inside.space=false > maven.jrefactory.space.around.ops=true > maven.jrefactory.force.block=true > maven.jrefactory.empty.block.single.line=true > maven.jrefactory.remove.excess.blocks=false > maven.jrefactory.singleline.comment.ownline=true > maven.jrefactory.singleline.comment.absoluteindent=0 > maven.jrefactory.singleline.comment.incrementalindent=0 > maven.jrefactory.singleline.comment.indentstyle.shared=incremental > maven.jrefactory.singleline.comment.indentstyle.ownline=code > maven.jrefactory.c.style.format=align.star > maven.jrefactory.c.style.indent=2 > maven.jrefactory.method.minimum=all > maven.jrefactory.field.minimum=protected > maven.jrefactory.class.minimum=all > maven.jrefactory.javadoc.star=2 > maven.jrefactory.javadoc.wordwrap.min=40 > maven.jrefactory.space.before.javadoc=true > maven.jrefactory.javadoc.id.lineup=true > maven.jrefactory.javadoc.indent=2 > maven.jrefactory.reformat.comments=true > maven.jrefactory.exception.tag.name=@exception > maven.jrefactory.document.nested.classes=true > maven.jrefactory.allow.singleline.javadoc=false > maven.jrefactory.keep.all.javadoc=false > maven.jrefactory.class.descr=Description of the Class > maven.jrefactory.interface.descr=Description of the Interface > maven.jrefactory.constructor.descr=Constructor for the {0} object > maven.jrefactory.method.descr=Description of the Method > maven.jrefactory.getter.descr=Gets the {3} attribute of the {1} {2} > maven.jrefactory.getter.return.descr=The {3} value > maven.jrefactory.setter.descr=Sets the {3} attribute of the {1} {2} > maven.jrefactory.setter.param.descr=The new {3} value > maven.jrefactory.field.descr=Description of the Field > maven.jrefactory.run.descr=Main processing method for the {1} {2} > maven.jrefactory.main.descr=The main program for the {1} {2} > maven.jrefactory.main.param.descr=The command line arguments > maven.jrefactory.adder.descr=Adds a feature to the {0} attribute of the {1} {2} > maven.jrefactory.adder.param.descr=The feature to be added to the {0} attribute > maven.jrefactory.junit.setUp.descr=The JUnit setup method > maven.jrefactory.junit.test.descr=A unit test for JUnit > maven.jrefactory.junit.tearDown.descr=The teardown method for JUnit > maven.jrefactory.junit.suite.descr=A unit test suite for JUnit > maven.jrefactory.junit.suite.return.descr=The test suite > maven.jrefactory.author.descr={0} > maven.jrefactory.created.descr={1} > maven.jrefactory.param.descr=Description of the Parameter > maven.jrefactory.return.descr=Description of the Return Value > maven.jrefactory.exception.descr=Description of the Exception > maven.jrefactory.class.tags=created > maven.jrefactory.method.tags=param,return,exception > maven.jrefactory.field.tags= > maven.jrefactory.char.stream.type=1 > maven.jrefactory.pretty.printer.backup.ext= > maven.jrefactory.sort.top=false > maven.jrefactory.import.sort.important= > maven.jrefactory.import.sort.neighbourhood=0
Index: jakarta-turbine-maven/jars.list =================================================================== RCS file: /home/cvspublic/jakarta-turbine-maven/jars.list,v retrieving revision 1.9 diff -r1.9 jars.list 41a42 > jrefactory.jar
Index: jakarta-turbine-maven/project.xml =================================================================== RCS file: /home/cvspublic/jakarta-turbine-maven/project.xml,v retrieving revision 1.80 diff -r1.80 project.xml 329a330,338 > <dependency> > <name>jrefactory</name> > <type>required</type> > <version>2.6.36</version> > <jar>jrefactory.jar</jar> > <url>http://jrefactory.sourceforge.net/chrissoft.html</url> > </dependency> > >
/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Maven" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Maven", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ package org.apache.maven.sourcedef; import java.io.File; import com.puppycrawl.tools.checkstyle.CheckStyleTask; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.apache.tools.ant.Project; import java.io.FileOutputStream; import java.io.IOException; import java.util.Hashtable; import java.util.Properties; import java.util.Iterator; /** * task responsible for writing the checkstyle config file by combining * properties with these prefixes maven.sourcedef and maven.checkstyle. generic * maven.sourcedef properties are converted to checkstyle counterpart. For * allowed properties and conversions see the {@link org.apache.maven.sourcedef * package description}. * * @created 28 May 2002 * @author Nathan Coast ([EMAIL PROTECTED]) */ public class CheckStyleConfigTask extends Task { /** * checkstyle property name for the class brace style property */ private final static String CLASS_BRACE_STYLE_KEY = "checkstyle.lcurly.type"; /** * checkstyle property name for the method brace style property */ private final static String METHOD_BRACE_STYLE_KEY = "checkstyle.lcurly.method"; /** * checkstyle property name for the all other brace styles */ private final static String OTHER_BRACE_STYLE_KEY = "checkstyle.lcurly.other"; /** * checkstyle property name for the location of keyword relative to right * brace. */ private final static String RIGHT_BRACE_KEYWORD_LOCATION_KEY = "checkstyle.rcurly"; /** * checkstyle property name for allow tabs property */ private final static String ALLOW_TABS_KEY = "checkstyle.allow.tabs"; /** * checkstyle property name for max line lenght property */ private final static String MAX_LINE_LENGTH_KEY = "checkstyle.maxlinelen"; /** * checkstyle property name for header file property */ private final static String HEADER_FILE_KEY = "checkstyle.header.file"; /** * eol left brace style value */ private final static String LEFT_CURLY_EOL = "eol"; /** * nl left brace style value */ private final static String LEFT_CURLY_NL = "nl"; /** * name of the generated checkstyle config file */ private final static String CONFIG_FILENAME = "CheckStyleConfig.properties"; /** * prefix for checkstyle properties in default.properties */ private final static String CHECKSTYLE_PROP_PREFIX = "maven.checkstyle."; /** * execute method to combine the maven.checkstyle properties with converted * maven.sourcedef properties and write them to * ${maven.checkstyle.dir}/CheckStyleConfig.properties * * @exception BuildException Description of the Exception */ public void execute() throws BuildException { Project project = getProject(); Hashtable props = project.getProperties(); String checkstyleDirStr = (String) props.get("maven.checkstyle.dir"); File checkstyleDir = new File(checkstyleDirStr); if (!checkstyleDir.exists()) { if (!checkstyleDir.mkdir()) { throw new BuildException("unable to create checkstyle directory: " + checkstyleDir); } } File configFile = new File(checkstyleDir, CONFIG_FILENAME); Properties config = new Properties(); Iterator it = props.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); if (key.startsWith(CHECKSTYLE_PROP_PREFIX)) { config.put(key.substring(6), props.get(key)); } } SourceDefinition.setProjectProperties(getProject().getProperties()); String classBraceStyle = SourceDefinition.getClassBraceStyle(); classBraceStyle = convertLeftBraceType(classBraceStyle); config.put(CLASS_BRACE_STYLE_KEY, classBraceStyle); String methodBraceStyle = SourceDefinition.getMethodBraceStyle(); methodBraceStyle = convertLeftBraceType(methodBraceStyle); config.put(METHOD_BRACE_STYLE_KEY, methodBraceStyle); String blockBraceStyle = SourceDefinition.getBlockBraceStyle(); blockBraceStyle = convertLeftBraceType(blockBraceStyle); config.put(OTHER_BRACE_STYLE_KEY, blockBraceStyle); config.put(RIGHT_BRACE_KEYWORD_LOCATION_KEY, SourceDefinition.getKeywordLocationRightBrace()); config.put(ALLOW_TABS_KEY, "" + SourceDefinition.getAllowTabs()); config.put(MAX_LINE_LENGTH_KEY, "" + SourceDefinition.getMaxLineLength()); File headerFile = SourceDefinition.getHeaderFile(); if (headerFile.exists() && headerFile.canRead() && headerFile.isFile()) { config.put(HEADER_FILE_KEY, headerFile.toString()); } FileOutputStream fos = null; try { fos = new FileOutputStream(configFile); config.store(fos, "this is a generated file do not edit"); } catch (IOException e) { throw new BuildException(e); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * utility to convert between maven.sourcedef properties and checkstyle. * properties for the left brace style. * * @param type the maven.sourcedef property to convert * @return the maven.sourcedef property converted to checkstyle * property. */ private static String convertLeftBraceType(String type) { String convertedType = null; if (SourceDefinition.BRACE_STYLE_C.equals(type)) { convertedType = LEFT_CURLY_EOL; } else if (SourceDefinition.BRACE_STYLE_PASCAL.equals(type)) { convertedType = LEFT_CURLY_NL; } else { throw new BuildException("Unknown left brace type " + type); } return convertedType; } }
/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Maven" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Maven", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ package org.apache.maven.sourcedef; import org.apache.tools.ant.Task; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import java.util.Properties; import java.util.Iterator; import java.util.Set; import java.util.Hashtable; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.BufferedReader; import java.io.FileReader; /** * task responsible for writing the Jrefactory pretty print config file by * combining properties with these prefixes maven.sourcedef and * maven.jrefactory. Generic maven.sourcedef properties are converted to their * jrefactory counterparts. For allowed properties and conversions see the * {@link org.apache.maven.sourcedef package description}. * * @created 28 May 2002 * @author Nathan Coast ([EMAIL PROTECTED]) */ public class PrettyPrintConfigTask extends Task { /** * jrefactory property name for the catch start line property */ private final static String CATCH_START_LINE = "catch.start.line"; /** * jrefactory property name for the else start line property */ private final static String ELSE_START_LINE = "else.start.line"; /** * jrefactory property name for the block property */ private final static String BLOCK_STYLE = "block.style"; /** * jrefactory property name for the method block style property */ private final static String METHOD_BLOCK_STYLE = "method.block.style"; /** * jrefactory property name for the class block style property */ private final static String CLASS_BLOCK_STYLE = "class.block.style"; /** * jrefactory property name for the javadoc wordwrap property */ private final static String JAVADOC_WORDWRAP_MAX = "javadoc.wordwrap.max"; /** * allowed 'space' value for the indent char property */ private final static String SPACE = "space"; /** * allowed 'tab' value for the indent char property */ private final static String TAB = "tab"; /** * jrefactory property name for the indent char property */ private final static String INDENT_CHAR = "indent.char"; /** * prefix for jrefactory specific propeties */ private final static String JREFACTORY_PROP_PREFIX = "maven.jrefactory."; /** * execute method to combine the maven.jrefactory properties with converted * maven.sourcedef properties and write them to the file * ${maven.build.dir}/.Refactory/pretty.settings * * @exception BuildException Description of the Exception */ public void execute() throws BuildException { Hashtable props = getProject().getProperties(); SourceDefinition.setProjectProperties(props); Properties config = new Properties(); Iterator it = props.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); if (key.startsWith(JREFACTORY_PROP_PREFIX)) { config.put(key.substring(JREFACTORY_PROP_PREFIX.length()), props.get(key)); } } String buildDirStr = (String) props.get("maven.build.dir"); File buildDir = new File(buildDirStr); File prettyDir = new File(buildDir, ".Refactory"); if (!prettyDir.exists()) { if (!prettyDir.mkdir()) { throw new BuildException( "unable to create jrefactory pretty print config directory: " + prettyDir); } } File prettySettings = new File(prettyDir, "pretty.settings"); if (prettySettings.exists()) { prettySettings.delete(); } FileOutputStream fos = null; try { String classBlockStyle = SourceDefinition.getClassBraceStyle(); config.put(CLASS_BLOCK_STYLE, classBlockStyle); String methodBlockStyle = SourceDefinition.getMethodBraceStyle(); config.put(METHOD_BLOCK_STYLE, methodBlockStyle); String blockStyle = SourceDefinition.getBlockBraceStyle(); config.put(BLOCK_STYLE, blockStyle); String keyLoc = SourceDefinition.getKeywordLocationRightBrace(); String catchStartLine = convertKeywordLocationRightBrace(keyLoc); config.put(CATCH_START_LINE, catchStartLine); config.put(ELSE_START_LINE, catchStartLine); File headerFile = SourceDefinition.getHeaderFile(); populateHeaderFile(headerFile, config); int javadocWordwrapMax = SourceDefinition.getMaxLineLength(); config.put(JAVADOC_WORDWRAP_MAX, "" + javadocWordwrapMax); boolean allowTabs = SourceDefinition.getAllowTabs(); String indentChar = convertAllowTabs(allowTabs); config.put(INDENT_CHAR, indentChar); /* * if(SourceDefinition.getFollowJlsOrder()){ * config.put("sort.1","Type(Field,Constructor,Method,NestedClass,NestedInterface,Initializer)"); * config.put("sort.2","Class(Instance,Static)"); * config.put("sort.3","Method(setter,getter,other)"); * config.put("sort.4","Final(top)"); * config.put("sort.5","Protection(public)"); * config.put("sort.6","Bean()"); * config.put("sort.7","Alphabetical()"); * config.put("sort.8","FieldInitializers()"); * } */ //File tmpPrettyProps = new File("tmpPrettyProps.settings"); fos = new FileOutputStream(prettySettings); config.store(fos, "this is a generated file do not edit"); } catch (IOException e) { throw new BuildException(e); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * method to convert property from maven.sourcedef.keyword.location.right.brace * to jrefactory property values. * * @param location the maven.sourcdef property * @return the property converted to a jrefactory property */ private static String convertKeywordLocationRightBrace(String location) { String convertedLocation = null; if (SourceDefinition.KEYWORD_LOCATION_RIGHT_BRACE_SAME.equals(location)) { convertedLocation = "false"; } else if (SourceDefinition.KEYWORD_LOCATION_RIGHT_BRACE_ALONE.equals(location)) { convertedLocation = "true"; } else { throw new BuildException("Unrecognised keyword location " + location); } return convertedLocation; } /** * method to read the header file and populate the contents of the file * into the properties using the property names 'header.[line_num]' * * @param headerFile the headerFile * @param props the properties to load the header file into. * @exception IOException Description of the Exception */ private static void populateHeaderFile(File headerFile, Properties props) throws IOException { FileReader fr = new FileReader(headerFile); BufferedReader br = new BufferedReader(fr); String str = null; int count = 0; while ((str = br.readLine()) != null) { count++; String headerLine = "header." + count; props.put(headerLine, str); } } /** * method to convert the maven.sourcedef.allow.tabs property to the * appropriate jrefactory property * * @param allowTabs the maven.sourcedef.allow.tabs property * @return allow tabs property converted to jrefactory property */ private static String convertAllowTabs(boolean allowTabs) { String indentChar = null; if (allowTabs) { indentChar = TAB; } else { indentChar = SPACE; } return indentChar; } }
/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Maven" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Maven", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ package org.apache.maven.sourcedef; import java.io.File; import java.util.Arrays; import java.util.List; import java.util.Hashtable; import org.apache.tools.ant.BuildException; /** * Utility class to provide access to the maven.sourcedef properties. If a * property exisits in the project properties, it is against allowed values for * that property (if there are any). If the property isn't set, a default is * returned. * * @created 28 May 2002 * @author Nathan Coast ([EMAIL PROTECTED]) */ class SourceDefinition { /** * value for 'C' brace style */ public final static String BRACE_STYLE_C = "C"; /** * value for 'pascal' brace style */ public final static String BRACE_STYLE_PASCAL = "PASCAL"; /** * allowed brace styles 'C' or 'PASCAL' */ private final static String[] BRACE_STYLE_ALLOWED = {BRACE_STYLE_C, BRACE_STYLE_PASCAL}; /** * property name for block brace style */ private final static String BLOCK_BRACE_STYLE_KEY = "maven.sourcedef.block.brace.style"; /** * default value for block brace style */ private final static String BLOCK_BRACE_STYLE_DEFAULT = BRACE_STYLE_C; private final static String METHOD_BRACE_STYLE_KEY = "maven.sourcedef.method.brace.style"; private final static String METHOD_BRACE_STYLE_DEFAULT = BRACE_STYLE_C; private final static String CLASS_BRACE_STYLE_KEY = "maven.sourcedef.class.brace.style"; private final static String CLASS_BRACE_STYLE_DEFAULT = BRACE_STYLE_C; /** * Description of the Field */ public final static String KEYWORD_LOCATION_RIGHT_BRACE_SAME = "same"; /** * Description of the Field */ public final static String KEYWORD_LOCATION_RIGHT_BRACE_ALONE = "alone"; private final static String[] KEYWORD_LOCATION_RIGHT_BRACE_ALLOWED = {KEYWORD_LOCATION_RIGHT_BRACE_SAME, KEYWORD_LOCATION_RIGHT_BRACE_ALONE}; private final static String KEYWORD_LOCATION_RIGHT_BRACE_KEY = "maven.sourcedef.keyword.location.right.brace"; private final static String KEYWORD_LOCATION_RIGHT_BRACE_DEFAULT = KEYWORD_LOCATION_RIGHT_BRACE_SAME; private final static String MAX_LINE_LENGTH_KEY = "maven.sourcedef.max.line.len"; private final static int MAX_LINE_LENGTH_DEFAULT = 80; private final static String HEADER_FILE_KEY = "maven.sourcedef.header.file"; private final static String HEADER_FILE_DEFAULT = "LICENSE.txt"; private final static String ALLOW_TABS_KEY = "maven.sourcedef.allow.tabs"; private final static boolean ALLOW_TABS_DEFAULT = false; private final static String FOLLOW_JLS_ORDER_KEY = "maven.sourcedef.follow.jls.order"; private final static boolean FOLLOW_JLS_ORDER_DEFAULT = true; private static Hashtable projectProps = null; /** * provides SourceDefinition with access to the ant properties * * @param props the hashtable of the ant properties. */ public final static void setProjectProperties(Hashtable props) { projectProps = props; } /** * @return the block brace style */ public final static String getBlockBraceStyle() { return getStringProperty(BLOCK_BRACE_STYLE_KEY, BLOCK_BRACE_STYLE_DEFAULT, BRACE_STYLE_ALLOWED); } /** * Gets the methodBraceStyle attribute of the SourceDefinition class * * @return The methodBraceStyle value */ public final static String getMethodBraceStyle() { return getStringProperty(METHOD_BRACE_STYLE_KEY, METHOD_BRACE_STYLE_DEFAULT, BRACE_STYLE_ALLOWED); } /** * Gets the classBraceStyle attribute of the SourceDefinition class * * @return The classBraceStyle value */ public final static String getClassBraceStyle() { return getStringProperty(CLASS_BRACE_STYLE_KEY, CLASS_BRACE_STYLE_DEFAULT, BRACE_STYLE_ALLOWED); } /** * Gets the keywordLocationRightBrace attribute of the SourceDefinition * class * * @return The keywordLocationRightBrace value */ public final static String getKeywordLocationRightBrace() { return getStringProperty(KEYWORD_LOCATION_RIGHT_BRACE_KEY, KEYWORD_LOCATION_RIGHT_BRACE_DEFAULT, KEYWORD_LOCATION_RIGHT_BRACE_ALLOWED); } /** * Gets the allowTabs attribute of the SourceDefinition class * * @return The allowTabs value */ public final static boolean getAllowTabs() { return getBooleanProperty(ALLOW_TABS_KEY, ALLOW_TABS_DEFAULT); } /** * Gets the maxLineLength attribute of the SourceDefinition class * * @return The maxLineLength value */ public final static int getMaxLineLength() { return getIntProperty(MAX_LINE_LENGTH_KEY, MAX_LINE_LENGTH_DEFAULT); } /** * Gets the headerFile attribute of the SourceDefinition class * * @return The headerFile value */ public final static File getHeaderFile() { return getFileProperty(HEADER_FILE_KEY, HEADER_FILE_DEFAULT); } /** * Gets the followJlsOrder attribute of the SourceDefinition class * * @return The followJlsOrder value */ public final static boolean getFollowJlsOrder() { return getBooleanProperty(FOLLOW_JLS_ORDER_KEY, FOLLOW_JLS_ORDER_DEFAULT); } /** * Gets the intProperty attribute of the SourceDefinition class * * @param key Description of the Parameter * @param defaultValue Description of the Parameter * @return The intProperty value */ public final static int getIntProperty(String key, int defaultValue) { String propStr = (String) projectProps.get(key); int prop = 0; if (propStr != null) { prop = Integer.parseInt(propStr); } else { prop = defaultValue; } return prop; } /** * Gets the booleanProperty attribute of the SourceDefinition class * * @param key Description of the Parameter * @param defaultValue Description of the Parameter * @return The booleanProperty value */ private final static boolean getBooleanProperty(String key, boolean defaultValue) { String propStr = (String) projectProps.get(key); boolean prop = false; if (propStr != null) { prop = new Boolean(propStr).booleanValue(); } else { prop = defaultValue; } return prop; } /** * Gets the stringProperty attribute of the SourceDefinition class * * @param key Description of the Parameter * @param defaultValue Description of the Parameter * @param allowedValues Description of the Parameter * @return The stringProperty value */ private final static String getStringProperty(String key, String defaultValue, String[] allowedValues) { String prop = (String) projectProps.get(key); //String prop = (String) projectProps.get(key,defaultValue); System.out.println("key = " + key + " val = " + prop + " default " + defaultValue + " allowed = " + allowedValues); if (prop == null) { prop = defaultValue; } if (allowedValues != null) { List list = Arrays.asList(allowedValues); if (!list.contains(prop)) { StringBuffer sb = new StringBuffer("unrecognised value: "); sb.append(prop); sb.append(" for property: "); sb.append(key); sb.append(" allowed values are: "); for (int i = 0; i < allowedValues.length; i++) { sb.append(allowedValues[i]); if (i < (allowedValues.length - 1)) { sb.append(","); } } throw new BuildException(sb.toString()); } } return prop; } /** * Gets the fileProperty attribute of the SourceDefinition class * * @param key Description of the Parameter * @param defaultValue Description of the Parameter * @return The fileProperty value */ private final static File getFileProperty(String key, String defaultValue) { String prop = (String) projectProps.get(key); if (prop == null) { prop = defaultValue; } return new File(prop); } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>