From: <dal...@us...> - 2015-11-18 01:47:08
|
Revision: 24158 http://sourceforge.net/p/jedit/svn/24158 Author: daleanson Date: 2015-11-18 01:47:05 +0000 (Wed, 18 Nov 2015) Log Message: ----------- Real world beautifying with the java 8 beautifier, plus some code clean up. Modified Paths: -------------- plugins/Beauty/trunk/src/beauty/beautifiers/Java8Beautifier.java plugins/Beauty/trunk/src/beauty/options/java/Java8OptionPane.java plugins/Beauty/trunk/src/beauty/parsers/java/antlr/Java8BeautyListener.java Modified: plugins/Beauty/trunk/src/beauty/beautifiers/Java8Beautifier.java =================================================================== --- plugins/Beauty/trunk/src/beauty/beautifiers/Java8Beautifier.java 2015-11-18 01:28:31 UTC (rev 24157) +++ plugins/Beauty/trunk/src/beauty/beautifiers/Java8Beautifier.java 2015-11-18 01:47:05 UTC (rev 24158) @@ -1,21 +1,20 @@ package beauty.beautifiers; +import beauty.parsers.ParserException; +import beauty.parsers.java.antlr.*; + import java.io.*; import java.util.*; -import beauty.parsers.ParserException; -import beauty.parsers.java.antlr.*; import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.tree.*; - import org.gjt.sp.jedit.jEdit; + public class Java8Beautifier extends Beautifier { - - private int bracketStyle = 1; // JavaParser.ATTACHED; + private int bracketStyle = 1; // JavaParser.ATTACHED; private boolean breakElse = false; private boolean padParens = false; - private int blankLinesBeforePackage = 0; private int blankLinesAfterPackage = 1; private int blankLinesAfterImports = 2; @@ -29,43 +28,45 @@ private boolean sortModifiers = true; private int collapseMultipleBlankLinesTo = 1; - + public void init() { - bracketStyle = jEdit.getIntegerProperty("beauty.java.bracketStyle", Java8BeautyListener.ATTACHED); - breakElse = jEdit.getBooleanProperty("beauty.java.breakElse", true); - padParens = jEdit.getBooleanProperty("beauty.java.padParens", false); - blankLinesBeforePackage = jEdit.getIntegerProperty("beauty.java8.blankLinesBeforePackage", 0); - blankLinesAfterPackage = jEdit.getIntegerProperty("beauty.java8.blankLinesAfterPackage", 1); - blankLinesAfterImports = jEdit.getIntegerProperty("beauty.java8.blankLinesAfterImports", 2); - sortImports = jEdit.getBooleanProperty("beauty.java8.sortImports", true); - groupImports = jEdit.getBooleanProperty("beauty.java8.groupImports", true); - blankLinesBetweenImportGroups = jEdit.getIntegerProperty("beauty.java8.blankLinesBetweenImportGroups", 1); - blankLinesAfterClassDeclaration = jEdit.getIntegerProperty("beauty.java8.blankLinesAfterClassDeclaration", 1); - blankLinesAfterClassBody = jEdit.getIntegerProperty("beauty.java8.blankLinesAfterClassBody", 2); - blankLinesBeforeMethods = jEdit.getIntegerProperty("beauty.java8.blankLinesBeforeMethods", 1); - blankLinesAfterMethods = jEdit.getIntegerProperty("beauty.java8.blankLinesAfterMethods", 1); - sortModifiers = jEdit.getBooleanProperty("beauty.java8.sortModifiers", true); - collapseMultipleBlankLinesTo = jEdit.getIntegerProperty("beauty.java8.collapseMultipleBlankLinesTo", 1); + bracketStyle = jEdit.getIntegerProperty( "beauty.java.bracketStyle", Java8BeautyListener.ATTACHED ); + breakElse = jEdit.getBooleanProperty( "beauty.java.breakElse", true ); + padParens = jEdit.getBooleanProperty( "beauty.java.padParens", false ); + blankLinesBeforePackage = jEdit.getIntegerProperty( "beauty.java8.blankLinesBeforePackage", 0 ); + blankLinesAfterPackage = jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterPackage", 1 ); + blankLinesAfterImports = jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterImports", 2 ); + sortImports = jEdit.getBooleanProperty( "beauty.java8.sortImports", true ); + groupImports = jEdit.getBooleanProperty( "beauty.java8.groupImports", true ); + blankLinesBetweenImportGroups = jEdit.getIntegerProperty( "beauty.java8.blankLinesBetweenImportGroups", 1 ); + blankLinesAfterClassDeclaration = jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterClassDeclaration", 1 ); + blankLinesAfterClassBody = jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterClassBody", 2 ); + blankLinesBeforeMethods = jEdit.getIntegerProperty( "beauty.java8.blankLinesBeforeMethods", 1 ); + blankLinesAfterMethods = jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterMethods", 1 ); + sortModifiers = jEdit.getBooleanProperty( "beauty.java8.sortModifiers", true ); + collapseMultipleBlankLinesTo = jEdit.getIntegerProperty( "beauty.java8.collapseMultipleBlankLinesTo", 1 ); } - + + public String beautify( String text ) throws ParserException { - //System.out.println(text); + + // System.out.println(text); ErrorListener errorListener = null; try { + // protect unicode escaped character sequences - //text = text.replaceAll("\\\\u", "\\\\\\\\u"); - + // text = text.replaceAll("\\\\u", "\\\\\\\\u"); // set up the parser StringReader input = new StringReader( text ); ANTLRInputStream antlrInput = new ANTLRInputStream( input ); Java8Lexer lexer = new Java8Lexer( antlrInput ); CommonTokenStream tokens = new CommonTokenStream( lexer ); Java8Parser javaParser = new Java8Parser( tokens ); - + // for debugging - String trace = System.getProperty("beauty.java8.trace"); - javaParser.setTrace("true".equals(trace)); - + String trace = System.getProperty( "beauty.java8.trace" ); + javaParser.setTrace( "true".equals( trace ) ); + // add an error listener to the parser to capture any errors javaParser.removeErrorListeners(); errorListener = new ErrorListener(); @@ -73,26 +74,26 @@ ParseTree tree = javaParser.compilationUnit(); ParseTreeWalker walker = new ParseTreeWalker(); - Java8BeautyListener listener = new Java8BeautyListener(text.length() + 2048, tokens); + Java8BeautyListener listener = new Java8BeautyListener( text.length() + 2048, tokens ); // set the formatting settings - listener.setIndentWidth(getIndentWidth()); - listener.setUseSoftTabs(getUseSoftTabs()); - listener.setBracketStyle(bracketStyle); - listener.setBreakElse(breakElse); - listener.setPadParens(padParens); - listener.setBlankLinesBeforePackage(blankLinesBeforePackage); - listener.setBlankLinesAfterPackage(blankLinesAfterPackage); - listener.setBlankLinesAfterImports(blankLinesAfterImports); - listener.setSortImports(sortImports); - listener.setGroupImports(groupImports); - listener.setBlankLinesBetweenImportGroups(blankLinesBetweenImportGroups); - listener.setBlankLinesAfterClassDeclaration(blankLinesAfterClassDeclaration); - listener.setBlankLinesAfterClassBody(blankLinesAfterClassBody); - listener.setBlankLinesBeforeMethods(blankLinesBeforeMethods); - listener.setBlankLinesAfterMethods(blankLinesAfterMethods); - listener.setSortModifiers(sortModifiers); - listener.setCollapseMultipleBlankLinesTo(collapseMultipleBlankLinesTo); + listener.setIndentWidth( getIndentWidth() ); + listener.setUseSoftTabs( getUseSoftTabs() ); + listener.setBracketStyle( bracketStyle ); + listener.setBreakElse( breakElse ); + listener.setPadParens( padParens ); + listener.setBlankLinesBeforePackage( blankLinesBeforePackage ); + listener.setBlankLinesAfterPackage( blankLinesAfterPackage ); + listener.setBlankLinesAfterImports( blankLinesAfterImports ); + listener.setSortImports( sortImports ); + listener.setGroupImports( groupImports ); + listener.setBlankLinesBetweenImportGroups( blankLinesBetweenImportGroups ); + listener.setBlankLinesAfterClassDeclaration( blankLinesAfterClassDeclaration ); + listener.setBlankLinesAfterClassBody( blankLinesAfterClassBody ); + listener.setBlankLinesBeforeMethods( blankLinesBeforeMethods ); + listener.setBlankLinesAfterMethods( blankLinesAfterMethods ); + listener.setSortModifiers( sortModifiers ); + listener.setCollapseMultipleBlankLinesTo( collapseMultipleBlankLinesTo ); // parse and beautify the buffer contents walker.walk( listener, tree ); @@ -101,25 +102,27 @@ } catch ( Exception e ) { List<ParserException> errors = errorListener.getErrors(); - if (errors != null && errors.size() > 0) { - throw errors.get(0); + if ( errors != null && errors.size() > 0 ) { + throw errors.get( 0 ); } else { - throw new ParserException(e); + throw new ParserException( e ); } } } - - public void setBracketStyle(int style) { - bracketStyle = style; + + + public void setBracketStyle( int style ) { + bracketStyle = style; } - - public void setBreakElse(boolean b) { - breakElse = b; + + + public void setBreakElse( boolean b ) { + breakElse = b; } - - public void setPadParens(boolean pad) { - padParens = pad; + + + public void setPadParens( boolean pad ) { + padParens = pad; } - } Modified: plugins/Beauty/trunk/src/beauty/options/java/Java8OptionPane.java =================================================================== --- plugins/Beauty/trunk/src/beauty/options/java/Java8OptionPane.java 2015-11-18 01:28:31 UTC (rev 24157) +++ plugins/Beauty/trunk/src/beauty/options/java/Java8OptionPane.java 2015-11-18 01:47:05 UTC (rev 24158) @@ -1,81 +1,83 @@ package beauty.options.java; +import beauty.options.NumberTextField; + +import ise.java.awt.*; + import javax.swing.*; + import org.gjt.sp.jedit.*; -import ise.java.awt.*; -import beauty.options.NumberTextField; + public class Java8OptionPane extends JPanel { - private NumberTextField blankLinesBeforePackage; private NumberTextField blankLinesAfterPackage; - private NumberTextField blankLinesAfterImports; private JCheckBox sortImports; private JCheckBox groupImports; private NumberTextField blankLinesBetweenImportGroups; - private NumberTextField blankLinesAfterClassDeclaration; private NumberTextField blankLinesAfterClassBody; private NumberTextField blankLinesBeforeMethods; private NumberTextField blankLinesAfterMethods; - private JCheckBox sortModifiers; - private NumberTextField collapseMultipleBlankLinesTo; - + + public Java8OptionPane() { super( new KappaLayout() ); + setBorder( BorderFactory.createEmptyBorder( 6, 6, 6, 6 ) ); } + public void _init() { JLabel description = new JLabel( "<html><b>" + jEdit.getProperty( "beauty.msg.Java8_Options", "Java 8 Options" ) ); - JLabel blankLinesBeforePackageLabel = new JLabel(jEdit.getProperty("beauty.java8.Blank_Lines_Before_Package", "Blank Lines Before Package")); - blankLinesBeforePackage = new NumberTextField(0, 100); - blankLinesBeforePackage.setValue(jEdit.getIntegerProperty("beauty.java8.blankLinesBeforePackage", 0)); - - JLabel blankLinesAfterPackageLabel = new JLabel(jEdit.getProperty("beauty.java8.Blank_Lines_After_Package", "Blank Lines After Package")); - blankLinesAfterPackage = new NumberTextField(0, 100); - blankLinesAfterPackage.setValue(jEdit.getIntegerProperty("beauty.java8.blankLinesAfterPackage", 2)); - - JLabel blankLinesAfterImportsLabel = new JLabel(jEdit.getProperty("beauty.java8.Blank_Lines_After_Imports", "Blank Lines After Imports")); - blankLinesAfterImports = new NumberTextField(0, 100); - blankLinesAfterImports.setValue(jEdit.getIntegerProperty("beauty.java8.blankLinesAfterImports", 2)); - - sortImports = new JCheckBox(jEdit.getProperty("beauty.java8.Sort_Imports", "Sort Imports")); - sortImports.setSelected(jEdit.getBooleanProperty( "beauty.java8.sortImports", true )); - - groupImports = new JCheckBox(jEdit.getProperty("beauty.java8.Group_Imports", "Group Imports")); - groupImports.setSelected(jEdit.getBooleanProperty( "beauty.java8.groupImports", true)); - - JLabel blankLinesBetweenImportGroupsLabel = new JLabel(jEdit.getProperty("beauty.java8.Blank_Lines_Between_Import_Groups", "Blank Lines Between Import Groups")); - blankLinesBetweenImportGroups = new NumberTextField(0, 100); - blankLinesBetweenImportGroups.setValue(jEdit.getIntegerProperty("beauty.java8.blankLinesBetweenImportGroups", 1)); - - JLabel blankLinesAfterClassDeclarationLabel = new JLabel(jEdit.getProperty("beauty.java8.Blank_Lines_After_Class_Declaration", "Blank Lines After Class Declaration")); - blankLinesAfterClassDeclaration = new NumberTextField(0, 100); - blankLinesAfterClassDeclaration.setValue(jEdit.getIntegerProperty("beauty.java8.blankLinesAfterClassDeclaration", 1)); - - JLabel blankLinesAfterClassBodyLabel = new JLabel(jEdit.getProperty("beauty.java8.Blank_Lines_After_Class_Body", "Blank Lines After Class Body")); - blankLinesAfterClassBody = new NumberTextField(0, 100); - blankLinesAfterClassBody.setValue(jEdit.getIntegerProperty("beauty.java8.blankLinesAfterClassBody", 1)); - - JLabel blankLinesBeforeMethodsLabel = new JLabel(jEdit.getProperty("beauty.java8.Blank_Lines_Before_Methods", "Blank Lines Before Methods")); - blankLinesBeforeMethods = new NumberTextField(0, 100); - blankLinesBeforeMethods.setValue(jEdit.getIntegerProperty("beauty.java8.blankLinesBeforeMethods", 2)); - - JLabel blankLinesAfterMethodsLabel = new JLabel(jEdit.getProperty("beauty.java8.Blank_Lines_After_Methods", "Blank Lines After Methods")); - blankLinesAfterMethods = new NumberTextField(0, 100); - blankLinesAfterMethods.setValue(jEdit.getIntegerProperty("beauty.java8.blankLinesAfterMethods", 2)); - - sortModifiers = new JCheckBox(jEdit.getProperty("beauty.java8.Sort_Modifiers", "Sort Modifiers")); - sortModifiers.setSelected(jEdit.getBooleanProperty("beauty.java8.sortModifiers", true)); + JLabel blankLinesBeforePackageLabel = new JLabel( jEdit.getProperty( "beauty.java8.Blank_Lines_Before_Package", "Blank Lines Before Package" ) ); + blankLinesBeforePackage = new NumberTextField( 0, 100 ); + blankLinesBeforePackage.setValue( jEdit.getIntegerProperty( "beauty.java8.blankLinesBeforePackage", 0 ) ); - JLabel collapseMultipleBlankLinesToLabel = new JLabel(jEdit.getProperty("beauty.java8.Collapse_Multiple_Blank_Lines_To", "Collapse Multiple Blank Lines To")); - collapseMultipleBlankLinesTo = new NumberTextField(0, 100); - collapseMultipleBlankLinesTo.setValue(jEdit.getIntegerProperty("beauty.java8.collapseMultipleBlankLinesTo", 2)); + JLabel blankLinesAfterPackageLabel = new JLabel( jEdit.getProperty( "beauty.java8.Blank_Lines_After_Package", "Blank Lines After Package" ) ); + blankLinesAfterPackage = new NumberTextField( 0, 100 ); + blankLinesAfterPackage.setValue( jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterPackage", 2 ) ); + JLabel blankLinesAfterImportsLabel = new JLabel( jEdit.getProperty( "beauty.java8.Blank_Lines_After_Imports", "Blank Lines After Imports" ) ); + blankLinesAfterImports = new NumberTextField( 0, 100 ); + blankLinesAfterImports.setValue( jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterImports", 2 ) ); + + sortImports = new JCheckBox( jEdit.getProperty( "beauty.java8.Sort_Imports", "Sort Imports" ) ); + sortImports.setSelected( jEdit.getBooleanProperty( "beauty.java8.sortImports", true ) ); + + groupImports = new JCheckBox( jEdit.getProperty( "beauty.java8.Group_Imports", "Group Imports" ) ); + groupImports.setSelected( jEdit.getBooleanProperty( "beauty.java8.groupImports", true ) ); + + JLabel blankLinesBetweenImportGroupsLabel = new JLabel( jEdit.getProperty( "beauty.java8.Blank_Lines_Between_Import_Groups", "Blank Lines Between Import Groups" ) ); + blankLinesBetweenImportGroups = new NumberTextField( 0, 100 ); + blankLinesBetweenImportGroups.setValue( jEdit.getIntegerProperty( "beauty.java8.blankLinesBetweenImportGroups", 1 ) ); + + JLabel blankLinesAfterClassDeclarationLabel = new JLabel( jEdit.getProperty( "beauty.java8.Blank_Lines_After_Class_Declaration", "Blank Lines After Class Declaration" ) ); + blankLinesAfterClassDeclaration = new NumberTextField( 0, 100 ); + blankLinesAfterClassDeclaration.setValue( jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterClassDeclaration", 1 ) ); + + JLabel blankLinesAfterClassBodyLabel = new JLabel( jEdit.getProperty( "beauty.java8.Blank_Lines_After_Class_Body", "Blank Lines After Class Body" ) ); + blankLinesAfterClassBody = new NumberTextField( 0, 100 ); + blankLinesAfterClassBody.setValue( jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterClassBody", 1 ) ); + + JLabel blankLinesBeforeMethodsLabel = new JLabel( jEdit.getProperty( "beauty.java8.Blank_Lines_Before_Methods", "Blank Lines Before Methods" ) ); + blankLinesBeforeMethods = new NumberTextField( 0, 100 ); + blankLinesBeforeMethods.setValue( jEdit.getIntegerProperty( "beauty.java8.blankLinesBeforeMethods", 2 ) ); + + JLabel blankLinesAfterMethodsLabel = new JLabel( jEdit.getProperty( "beauty.java8.Blank_Lines_After_Methods", "Blank Lines After Methods" ) ); + blankLinesAfterMethods = new NumberTextField( 0, 100 ); + blankLinesAfterMethods.setValue( jEdit.getIntegerProperty( "beauty.java8.blankLinesAfterMethods", 2 ) ); + + sortModifiers = new JCheckBox( jEdit.getProperty( "beauty.java8.Sort_Modifiers", "Sort Modifiers" ) ); + sortModifiers.setSelected( jEdit.getBooleanProperty( "beauty.java8.sortModifiers", true ) ); + + JLabel collapseMultipleBlankLinesToLabel = new JLabel( jEdit.getProperty( "beauty.java8.Collapse_Multiple_Blank_Lines_To", "Collapse Multiple Blank Lines To" ) ); + collapseMultipleBlankLinesTo = new NumberTextField( 0, 100 ); + collapseMultipleBlankLinesTo.setValue( jEdit.getIntegerProperty( "beauty.java8.collapseMultipleBlankLinesTo", 2 ) ); + add( "0, 0, 1, 1, W, w, 3", description ); add( "0, 1, 1, 1, W, w, 3", blankLinesBeforePackageLabel ); add( "1, 1, 1, 1, W, w, 3", blankLinesBeforePackage ); @@ -100,18 +102,19 @@ add( "1, 12,1, 1, W, w, 3", collapseMultipleBlankLinesTo ); } + public void _save() { jEdit.setIntegerProperty( "beauty.java8.blankLinesBeforePackage", blankLinesBeforePackage.getValue() ); jEdit.setIntegerProperty( "beauty.java8.blankLinesAfterPackage", blankLinesAfterPackage.getValue() ); jEdit.setIntegerProperty( "beauty.java8.blankLinesAfterImports", blankLinesAfterImports.getValue() ); - jEdit.setBooleanProperty( "beauty.java8.sortImports", sortImports.isSelected( ) ); - jEdit.setBooleanProperty( "beauty.java8.groupImports", groupImports.isSelected( ) ); + jEdit.setBooleanProperty( "beauty.java8.sortImports", sortImports.isSelected() ); + jEdit.setBooleanProperty( "beauty.java8.groupImports", groupImports.isSelected() ); jEdit.setIntegerProperty( "beauty.java8.blankLinesBetweenImportGroups", blankLinesBetweenImportGroups.getValue() ); jEdit.setIntegerProperty( "beauty.java8.blankLinesAfterClassDeclaration", blankLinesAfterClassDeclaration.getValue() ); jEdit.setIntegerProperty( "beauty.java8.blankLinesAfterClassBody", blankLinesAfterClassBody.getValue() ); jEdit.setIntegerProperty( "beauty.java8.blankLinesBeforeMethods", blankLinesBeforeMethods.getValue() ); jEdit.setIntegerProperty( "beauty.java8.blankLinesAfterMethods", blankLinesAfterMethods.getValue() ); - jEdit.setBooleanProperty( "beauty.java8.sortModifiers", sortModifiers.isSelected()); - jEdit.setIntegerProperty( "beauty.java8.collapseMultipleBlankLinesTo", collapseMultipleBlankLinesTo.getValue()); + jEdit.setBooleanProperty( "beauty.java8.sortModifiers", sortModifiers.isSelected() ); + jEdit.setIntegerProperty( "beauty.java8.collapseMultipleBlankLinesTo", collapseMultipleBlankLinesTo.getValue() ); } } Modified: plugins/Beauty/trunk/src/beauty/parsers/java/antlr/Java8BeautyListener.java =================================================================== --- plugins/Beauty/trunk/src/beauty/parsers/java/antlr/Java8BeautyListener.java 2015-11-18 01:28:31 UTC (rev 24157) +++ plugins/Beauty/trunk/src/beauty/parsers/java/antlr/Java8BeautyListener.java 2015-11-18 01:47:05 UTC (rev 24158) @@ -7,9 +7,7 @@ import java.util.*; /** - * This class provides an empty implementation of {@link Java8Listener}, - * which can be extended to create a listener which only needs to handle a subset - * of the available methods. + * Beautifier for Java 8 and below. */ public class Java8BeautyListener implements Java8Listener { @@ -66,6 +64,9 @@ this.tokens = tokenStream; } + /** + * Set up tabs. + */ private void init() { if (softTabs) { StringBuilder sb = new StringBuilder(); @@ -288,6 +289,10 @@ return sb.toString(); } + /** + * Pads parenthesis so "(" becomes "( " and ")" becomes " )". + * @paren item The item immediately following or preceding the paren. + */ private String padParen(String paren) { return padParen(paren, " "); } @@ -296,7 +301,6 @@ * Pads parenthesis so "(" becomes "( " and ")" becomes " )". * @paren item The item immediately following or preceding the paren. */ - private String padParen(String paren, String item) { if (paren == null || paren.isEmpty() || !padParens || item == null || item.isEmpty()) { return paren; @@ -315,8 +319,6 @@ return sb.toString(); } - - /** * StringBuilder doesn't have an "endsWith" method. * @param sb The string builder to test. @@ -662,6 +664,9 @@ return formatComment(comment); } + /** + * Handles new line tokens preceding the <code>node</code>. + */ private void processWhitespace(TerminalNode node) { Token token = node.getSymbol(); @@ -757,6 +762,9 @@ return sb.toString(); } + /** + * This is for sorting the modifiers. + */ private static Comparator<String> modifierComparator = new Comparator<String>() { // From Java 8 language specification: "If two or more (distinct) class modifiers // appear in a class declaration, then it is customary, though not required, @@ -859,7 +867,6 @@ } private static Comparator<String> importComparator = new Comparator<String>() { - // No parameter checking here, this assumes the strings will be valid import // statements, not blank lines or null. @Override @@ -870,6 +877,9 @@ } }; + /** + * Removes all excess whitespace from each of the lines in <code>s</code>. + */ private String removeExcessWhitespace(String s) { String[] lines = s.split("\n"); StringBuilder sb = new StringBuilder(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |