From bf64ca2be67a16b3ee5784f7797fc06a4ed47c73 Mon Sep 17 00:00:00 2001 From: markiewb Date: Sat, 14 Jan 2017 11:55:36 +0100 Subject: [PATCH] Hints for converting ternary to if and back are missing #78 and bump to version 1.6.1 --- README.md | 139 ++++++++++--- doc/screenshot.png | Bin 51545 -> 47716 bytes pom.xml | 8 +- .../plugins/hints/ternary/ToTernary.java | 126 ++++++++++++ .../plugins/hints/ternary/ToTernaryTest.java | 192 ++++++++++++++++++ 5 files changed, 440 insertions(+), 25 deletions(-) create mode 100644 src/main/java/de/markiewb/netbeans/plugins/hints/ternary/ToTernary.java create mode 100644 src/test/java/de/markiewb/netbeans/plugins/hints/ternary/ToTernaryTest.java diff --git a/README.md b/README.md index dc4f181..5342ae1 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,126 @@ [![Build Status](https://travis-ci.org/markiewb/nb-additional-hints.svg?branch=master)](https://travis-ci.org/markiewb/nb-additional-hints) [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K4CMP92RZELE2) -Additional java hints for NetBeans IDE -=================== +Plugin page: http://plugins.netbeans.org/plugin/47589/ -Supported hints: -* "Replace '+' with 'MessageFormat.format()'" -* "Replace '+' with 'new StringBuilder().append()'" -* "Replace '+' with 'String.format()'" -* "Join literals" -* "Copy joined literals to clipboard" -* "Split at linebreaks" -* "Split at caret" (since 1.1) -* "Convert to assertTrue/assertFalse" (since 1.1) -* "Support transformation to BigDecimal constants" (since 1.1) -* "Remove "public abstract" modifiers from method declarations within interfaces" (since 1.1) -* ... and more see http://plugins.netbeans.org/plugin/47589/?show=true +

Additional Java hints for NetBeans IDE

+

Supported Hints:

-Example: --------- + -![Screenshot](https://raw.github.com/markiewb/nb-additional-hints/v1.4.0/doc/screenshot.png) +

Example:

+ -Further information: --------------------- -This plugin is originally based on code from the _"I18N Checker"_ plugin from _Jan Lahoda_. -The original sourcecode can be found at http://hg.netbeans.org/main/contrib/file/tip/editor.hints.i18n +

Updates

+

1.6.1:

+ +

1.6.0:

+ +

1.5.0:

+ +

1.4.0:

+ +

1.3.0:

+ -License remains CDDL-GPL-2-CP - http://www.netbeans.org/cddl-gplv2.html +

1.2.0:

+ -Compatible to NetBeans 7.4 and higher +

1.1.0:

+ +

1.0.x:

+ +

+Further information:

+ +

This plugin is orginally based on code from the "I18N Checker" plugin from Jan Lahoda. +The original sourcecode can be found at http://hg.netbeans.org/main/contrib/file/tip/editor.hints.i18n

+ +

License remains CDDL-GPL-2-CP - http://www.netbeans.org/cddl-gplv2.html

+ +

+Provide defects, request for enhancements and feedback at https://github.com/markiewb/nb-additional-hints/issues +

+

Compatible to NetBeans 8.1+

+

+btn_donate_SM.gif + +

\ No newline at end of file diff --git a/doc/screenshot.png b/doc/screenshot.png index 80c57c3e64cfb1c2d627c1c2d9c1ff20f3d24023..754683f1a218a32a05d9fc8b9327883532d92942 100644 GIT binary patch literal 47716 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%0DZBvvq9sSP)U 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 jfDnPPI*o6Hbewzt~ diff --git a/pom.xml b/pom.xml index 1ef7000..4f55be5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ de.markiewb.netbeans.plugins AdditionalHints - 1.6.0.10 + 1.6.1.0 nbm Additional Java hints @@ -220,9 +220,13 @@ </ul> <h2>Example:</h2> -<img src="https://raw.githubusercontent.com/markiewb/nb-additional-hints/v1.4.0/doc/screenshot.png"/> +<img src="https://raw.githubusercontent.com/markiewb/nb-additional-hints/v1.6.1/doc/screenshot.png"/> <h2>Updates</h2> +<h3>1.6.1:</h3> +<ul> +<li>[<a href="https://github.com/markiewb/nb-additional-hints/issues/78">Bugfix</a>]: Fixed: Hints for converting ternary to if and back are missing</li> +</ul> <h3>1.6.0:</h3> <ul> <li>[<a href="https://github.com/markiewb/nb-additional-hints/issues/55">New Fix</a>]: Replace with null-assignment to Optional with Optional.empty()</li> diff --git a/src/main/java/de/markiewb/netbeans/plugins/hints/ternary/ToTernary.java b/src/main/java/de/markiewb/netbeans/plugins/hints/ternary/ToTernary.java new file mode 100644 index 0000000..da6b4da --- /dev/null +++ b/src/main/java/de/markiewb/netbeans/plugins/hints/ternary/ToTernary.java @@ -0,0 +1,126 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2014 Oracle and/or its affiliates. All rights reserved. + * + * Oracle and Java are registered trademarks of Oracle and/or its affiliates. + * Other names may be trademarks of their respective owners. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file and include the License file at + * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + * + * Contributor(s): + * + * Portions Copyrighted 2014 Sun Microsystems, Inc. + * Portions Copyrighted 2014 benno.markiewicz@googlemail.com + */ +package de.markiewb.netbeans.plugins.hints.ternary; + +import com.sun.source.util.TreePath; +import org.netbeans.spi.editor.hints.ErrorDescription; +import org.netbeans.spi.editor.hints.Fix; +import org.netbeans.spi.editor.hints.Severity; +import org.netbeans.spi.java.hints.ErrorDescriptionFactory; +import org.netbeans.spi.java.hints.Hint; +import org.netbeans.spi.java.hints.HintContext; +import org.netbeans.spi.java.hints.TriggerPattern; +import org.netbeans.spi.java.hints.TriggerPatterns; +import org.openide.util.NbBundle; + +/** + * + * @author markiewb + */ +@NbBundle.Messages({ + "DN_ToTernaryReturn=Convert to ternary return", + "DESC_ToTernaryReturn=Converts if statement to ternary return statement.

For example: if ($cond) {return $a;} else {return $b;} will be transformed to return ($cond) ? $a : $b;

Provided by nb-additional-hints plugin

", + "DN_ToIfElseReturn=Convert to if/else return", + "DESC_ToIfElseReturn=Converts ternary return statement to if/else statement.

For example: return ($cond) ? $a : $b; will be transformed to if ($cond) {return $a;} else {return $b;}

Provided by nb-additional-hints plugin

", + "DN_ToTernaryAssign=Convert to ternary", + "DESC_ToTernaryAssign=Converts if statement to ternary assignment statement.

For example: if ($cond) {$var = $a;} else {$var = $b;} will be transformed to $var = ($cond) ? $a : $b;

Provided by nb-additional-hints plugin

", + "DN_ToIfElseAssign=Convert to if/else", + "DESC_ToIfElseAssign=Converts ternary assignment statement to if/else statement.

For example: $var = ($cond) ? $a : $b; will be transformed to if ($cond) {$var = $a;} else {$var = $b;}

Provided by nb-additional-hints plugin

",}) +public class ToTernary { + + @TriggerPattern(value = "if ($cond) {return $a;} else {return $b;}") + @Hint(displayName = "#DN_ToTernaryReturn", description = "#DESC_ToTernaryReturn", category = "suggestions", hintKind = Hint.Kind.ACTION, severity = Severity.HINT) + @NbBundle.Messages("ERR_ToTernaryReturn=Convert to ternary return") + public static ErrorDescription toTernaryReturn(HintContext ctx) { + Fix fix = org.netbeans.spi.java.hints.JavaFixUtilities.rewriteFix(ctx, Bundle.ERR_ToTernaryReturn(), ctx.getPath(), "return ($cond)?$a:$b;"); + return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.ERR_ToTernaryReturn(), fix); + } + + @TriggerPattern(value = "return ($cond)?$a:$b;") + @Hint(displayName = "#DN_ToIfElseReturn", description = "#DESC_ToIfElseReturn", category = "suggestions", hintKind = Hint.Kind.ACTION, severity = Severity.HINT) + @NbBundle.Messages("ERR_ToIfElseReturn=Convert to if/else return") + public static ErrorDescription toIfElseReturn(HintContext ctx) { + Fix fix = org.netbeans.spi.java.hints.JavaFixUtilities.rewriteFix(ctx, Bundle.ERR_ToIfElseReturn(), ctx.getPath(), "if ($cond) {return $a;} else {return $b;}"); + return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.ERR_ToIfElseReturn(), fix); + } + + @TriggerPattern(value = "if ($cond) {$var = $a;}else {$var = $b;}") + @Hint(displayName = "#DN_ToTernaryAssign", description = "#DESC_ToTernaryAssign", category = "suggestions", hintKind = Hint.Kind.ACTION, severity = Severity.HINT) + @NbBundle.Messages("ERR_ToTernaryAssign=Convert to ternary") + public static ErrorDescription toTernaryAssign(HintContext ctx) { + Fix fix = org.netbeans.spi.java.hints.JavaFixUtilities.rewriteFix(ctx, Bundle.ERR_ToTernaryAssign(), ctx.getPath(), "$var=($cond)?$a:$b;"); + return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.ERR_ToTernaryAssign(), fix); + } + + @TriggerPatterns( + { +// @TriggerPattern(value = "$var1=($cond)?$a:$b;"), + @TriggerPattern(value = "$var2=$cond?$a:$b;"), +// @TriggerPattern(value = "$type $var3=($cond)?$a:$b;"), + @TriggerPattern(value = "$type $var4=$cond?$a:$b;") + } + ) + @Hint(displayName = "#DN_ToIfElseAssign", description = "#DESC_ToIfElseAssign", category = "suggestions", hintKind = Hint.Kind.ACTION, severity = Severity.HINT) + @NbBundle.Messages("ERR_ToIfElseAssign=Convert to if/else") + public static ErrorDescription toIfElseAssign(HintContext ctx) { + + Fix fix = null; +// if (ctx.getVariables().containsKey("$var1")) { +// fix = org.netbeans.spi.java.hints.JavaFixUtilities.rewriteFix(ctx, Bundle.ERR_ToIfElseAssign(), ctx.getPath(), "if (($cond)) {$var1 = $a;} else {$var1 = $b;}"); +// } + if (ctx.getVariables().containsKey("$var2")) { + fix = org.netbeans.spi.java.hints.JavaFixUtilities.rewriteFix(ctx, Bundle.ERR_ToIfElseAssign(), ctx.getPath(), "if ($cond) {$var2 = $a;} else {$var2 = $b;}"); + } +// if (ctx.getVariables().containsKey("$var3")) { +// fix = org.netbeans.spi.java.hints.JavaFixUtilities.rewriteFix(ctx, Bundle.ERR_ToIfElseAssign(), ctx.getPath(), "$type $var3; if (($cond)) {$var3 = $a;} else {$var3 = $b;}"); +// } + if (ctx.getVariables().containsKey("$var4")) { + fix = org.netbeans.spi.java.hints.JavaFixUtilities.rewriteFix(ctx, Bundle.ERR_ToIfElseAssign(), ctx.getPath(), "$type $var4; if ($cond) {$var4 = $a;} else {$var4 = $b;}"); + } + if (null != fix) { + return ErrorDescriptionFactory.forName(ctx, ctx.getPath(), Bundle.ERR_ToIfElseAssign(), fix); + } else { + return null; + } + } +} diff --git a/src/test/java/de/markiewb/netbeans/plugins/hints/ternary/ToTernaryTest.java b/src/test/java/de/markiewb/netbeans/plugins/hints/ternary/ToTernaryTest.java new file mode 100644 index 0000000..01bcf51 --- /dev/null +++ b/src/test/java/de/markiewb/netbeans/plugins/hints/ternary/ToTernaryTest.java @@ -0,0 +1,192 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package de.markiewb.netbeans.plugins.hints.ternary; + +import org.junit.Ignore; +import org.junit.Test; +import org.netbeans.modules.java.hints.test.api.HintTest; + +/** + * + * @author markiewb + */ +public class ToTernaryTest { + + @Test + public void testToTernaryReturn() throws Exception { + HintTest.create() + .setCaretMarker('|') + .input("package test;\n" + + "public class Test {\n" + + " public static int main(String[] args) {\n" + + " if (tr|ue){return 1;}else{return 0;}\n" + + " }\n" + + "}\n") + .run(ToTernary.class) + .findWarning("3:14-3:14:hint:" + Bundle.ERR_ToTernaryReturn()) + .applyFix() + .assertCompilable() + .assertOutput("package test;\n" + + "public class Test {\n" + + " public static int main(String[] args) {\n" + + " return (true) ? 1 : 0;\n" + + " }\n" + + "}\n"); + + } + + @Test + public void testToIfElseReturn() throws Exception { + HintTest.create() + .setCaretMarker('|') + .input("package test;\n" + + "public class Test {\n" + + " public static int main(String[] args) {\n" + + " return (tr|ue) ? 1 : 0;\n" + + " }\n" + + "}\n") + .run(ToTernary.class) + .findWarning("3:18-3:18:hint:" + Bundle.ERR_ToIfElseReturn()) + .applyFix() + .assertCompilable() + .assertOutput("package test;\n" + + "public class Test {\n" + + " public static int main(String[] args) {\n" + + " if (true) { return 1; } else { return 0; }\n" + + " }\n" + + "}\n"); + + } + + @Ignore(value = "Since NB8.1: java.lang.IllegalArgumentException: No document available for MIME type: text/x-java\n" + +" at org.netbeans.api.editor.document.LineDocumentUtils.createDocument(LineDocumentUtils.java:554)") + @Test + public void testToTernaryAssign() throws Exception { + HintTest.create() + .setCaretMarker('|') + .input("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s;\n" + + " if (t|rue){s = 1;}else{s = 0;}\n" + + " }\n" + + "}\n") + .run(ToTernary.class) + .findWarning("4:13-4:13:hint:" + Bundle.ERR_ToTernaryAssign()) + .applyFix() + .assertCompilable() + .assertOutput("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s;\n" + + " s = (true) ? 1 : 0;\n" + + " }\n" + + "}\n"); + + } + + @Ignore(value = "Since NB8.1: java.lang.IllegalArgumentException: No document available for MIME type: text/x-java\n" + +" at org.netbeans.api.editor.document.LineDocumentUtils.createDocument(LineDocumentUtils.java:554)") + @Test + public void testToIfElseAssign() throws Exception { + HintTest.create() + .setCaretMarker('|') + .input("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s;\n" + + " s = (t|rue) ? 1 : 0;\n" + + " }\n" + + "}\n") + .run(ToTernary.class) + .findWarning("4:14-4:14:hint:" + Bundle.ERR_ToIfElseAssign()) + .applyFix() + .assertCompilable() + .assertOutput("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s;\n" + + " if (true) { s = 1; } else { s = 0; }\n" + + " }\n" + + "}\n"); + + } + + @Ignore(value = "Since NB8.1: java.lang.IllegalArgumentException: No document available for MIME type: text/x-java\n" + +" at org.netbeans.api.editor.document.LineDocumentUtils.createDocument(LineDocumentUtils.java:554)") + @Test + public void testToIfElseAssignWithoutBrackets() throws Exception { + HintTest.create() + .setCaretMarker('|') + .input("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s;\n" + + " s = t|rue ? 1 : 0;\n" + + " }\n" + + "}\n") + .run(ToTernary.class) + .findWarning("4:13-4:13:hint:" + Bundle.ERR_ToIfElseAssign()) + .applyFix() + .assertCompilable() + .assertOutput("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s;\n" + + " if (true) { s = 1; } else { s = 0; }\n" + + " }\n" + + "}\n"); + + } + + @Test + public void testToIfElseAssignNewVariable() throws Exception { + HintTest.create() + .setCaretMarker('|') + .input("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s = (t|rue) ? 1 : 0;\n" + + " }\n" + + "}\n") + .run(ToTernary.class) + .findWarning("3:18-3:18:hint:" + Bundle.ERR_ToIfElseAssign()) + .applyFix() + .assertCompilable() + .assertOutput("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s;\n" + + " if (true) { s = 1; } else { s = 0; }\n" + + " }\n" + + "}\n"); + + } + + @Test + public void testToIfElseAssignNewVariableWithoutBrackets() throws Exception { + HintTest.create() + .setCaretMarker('|') + .input("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s = t|rue ? 1 : 0;\n" + + " }\n" + + "}\n") + .run(ToTernary.class) + .findWarning("3:17-3:17:hint:" + Bundle.ERR_ToIfElseAssign()) + .applyFix() + .assertCompilable() + .assertOutput("package test;\n" + + "public class Test {\n" + + " public static void main(String[] args) {\n" + + " int s;\n" + + " if (true) { s = 1; } else { s = 0; }\n" + + " }\n" + + "}\n"); + + } +}