From 7a1d3aaaae7c8f18a9d8770e0eb1a2eaf0e95a0f Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 25 May 2016 19:26:03 +0200 Subject: [PATCH] IG: fix "Remove leading zero to make decimal" quickfix problem (IDEA-156488) --- .../ig/numeric/RemoveLeadingZeroFix.java | 29 +++++++------------ .../octal/RemoveLeadingZeroLong.after.java | 3 ++ .../numeric/octal/RemoveLeadingZeroLong.java | 3 ++ .../ig/numeric/OctalLiteralFixesTest.java | 4 +++ 4 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/RemoveLeadingZeroLong.after.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/RemoveLeadingZeroLong.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/RemoveLeadingZeroFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/RemoveLeadingZeroFix.java index 9ddd84a1b54e..91d78fb2559e 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/RemoveLeadingZeroFix.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/RemoveLeadingZeroFix.java @@ -1,5 +1,5 @@ /* - * Copyright 2010 Bas Leijdekkers + * Copyright 2010-2016 Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,13 +17,11 @@ package com.siyeh.ig.numeric; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementFactory; -import com.intellij.psi.PsiExpression; -import com.intellij.util.IncorrectOperationException; +import com.intellij.psi.PsiLiteralExpression; +import com.intellij.psi.PsiType; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.InspectionGadgetsFix; +import com.siyeh.ig.PsiReplacementUtil; import org.jetbrains.annotations.NotNull; class RemoveLeadingZeroFix extends InspectionGadgetsFix { @@ -31,8 +29,7 @@ class RemoveLeadingZeroFix extends InspectionGadgetsFix { @Override @NotNull public String getName() { - return InspectionGadgetsBundle.message( - "remove.leading.zero.to.make.decimal.quickfix"); + return InspectionGadgetsBundle.message("remove.leading.zero.to.make.decimal.quickfix"); } @NotNull @@ -42,11 +39,10 @@ class RemoveLeadingZeroFix extends InspectionGadgetsFix { } @Override - protected void doFix(Project project, ProblemDescriptor descriptor) - throws IncorrectOperationException { - final PsiElement element = descriptor.getPsiElement(); - final String text = element.getText(); - final int max = text.length() - 1; + protected void doFix(Project project, ProblemDescriptor descriptor) { + final PsiLiteralExpression literal = (PsiLiteralExpression)descriptor.getPsiElement(); + final String text = literal.getText(); + final int max = text.length() - (PsiType.LONG.equals(literal.getType()) ? 2 : 1); if (max < 1) { return; } @@ -54,12 +50,7 @@ class RemoveLeadingZeroFix extends InspectionGadgetsFix { while (index < max && (text.charAt(index) == '0' || text.charAt(index) == '_')) { index++; } - final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); - final PsiElementFactory factory = psiFacade.getElementFactory(); final String textWithoutLeadingZeros = text.substring(index); - final PsiExpression decimalNumber = - factory.createExpressionFromText(textWithoutLeadingZeros, - element); - element.replace(decimalNumber); + PsiReplacementUtil.replaceExpression(literal, textWithoutLeadingZeros); } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/RemoveLeadingZeroLong.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/RemoveLeadingZeroLong.after.java new file mode 100644 index 000000000000..82bb684f1bca --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/RemoveLeadingZeroLong.after.java @@ -0,0 +1,3 @@ +class C { + long l = 0L; +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/RemoveLeadingZeroLong.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/RemoveLeadingZeroLong.java new file mode 100644 index 000000000000..c76f55bffad1 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/RemoveLeadingZeroLong.java @@ -0,0 +1,3 @@ +class C { + long l = 00L; +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/OctalLiteralFixesTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/OctalLiteralFixesTest.java index cfdd64db2eb6..c123d1c77fa1 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/OctalLiteralFixesTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/OctalLiteralFixesTest.java @@ -37,6 +37,10 @@ public class OctalLiteralFixesTest extends IGQuickFixesTestCase { doTest("RemoveLeadingZero", InspectionGadgetsBundle.message("remove.leading.zero.to.make.decimal.quickfix")); } + public void testRemoveLeadingZeroLong() { + doTest(InspectionGadgetsBundle.message("remove.leading.zero.to.make.decimal.quickfix")); + } + @Override protected String getRelativePath() { return "numeric/octal";