From 452a9ee9c3ee7e5eaa9f3bc18a57e38b9adc6edc Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 25 May 2016 20:16:49 +0200 Subject: [PATCH] IDEA-156488 (Convert octal literal to decimal literal loses long modifier) --- .../ConvertOctalLiteralToDecimalFix.java | 39 +++++++++---------- .../ConvertOctalToDecimalLong.after.java | 3 ++ .../octal/ConvertOctalToDecimalLong.java | 3 ++ .../ig/numeric/OctalLiteralFixesTest.java | 14 ++++--- 4 files changed, 34 insertions(+), 25 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/ConvertOctalToDecimalLong.after.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/ConvertOctalToDecimalLong.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/ConvertOctalLiteralToDecimalFix.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/ConvertOctalLiteralToDecimalFix.java index c4545e760c6d..ed3bb690a7ff 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/ConvertOctalLiteralToDecimalFix.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/numeric/ConvertOctalLiteralToDecimalFix.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,14 +17,16 @@ package com.siyeh.ig.numeric; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.project.Project; -import com.intellij.psi.*; -import com.intellij.util.IncorrectOperationException; +import com.intellij.psi.PsiElement; +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 ConvertOctalLiteralToDecimalFix - extends InspectionGadgetsFix { +class ConvertOctalLiteralToDecimalFix extends InspectionGadgetsFix { + @Override @NotNull public String getFamilyName() { @@ -34,24 +36,21 @@ class ConvertOctalLiteralToDecimalFix @Override @NotNull public String getName() { - return InspectionGadgetsBundle.message( - "convert.octal.literal.to.decimal.literal.quickfix"); + return InspectionGadgetsBundle.message("convert.octal.literal.to.decimal.literal.quickfix"); } @Override - protected void doFix(Project project, ProblemDescriptor descriptor) - throws IncorrectOperationException { + protected void doFix(Project project, ProblemDescriptor descriptor) { final PsiElement element = descriptor.getPsiElement(); - if (!(element instanceof PsiLiteralExpression)) return; - - final Object value = ((PsiLiteralExpression)element).getValue(); - if (value == null) return; - - final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); - final PsiElementFactory factory = psiFacade.getElementFactory(); - final PsiExpression decimalNumber = - factory.createExpressionFromText(value.toString(), - element); - element.replace(decimalNumber); + if (!(element instanceof PsiLiteralExpression)) { + return; + } + final PsiLiteralExpression literalExpression = (PsiLiteralExpression)element; + final Object value = literalExpression.getValue(); + if (value == null) { + return; + } + final String decimalText = value + (PsiType.LONG.equals(literalExpression.getType()) ? "L" : ""); + PsiReplacementUtil.replaceExpression(literalExpression, decimalText); } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/ConvertOctalToDecimalLong.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/ConvertOctalToDecimalLong.after.java new file mode 100644 index 000000000000..cce878329cfb --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/ConvertOctalToDecimalLong.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/ConvertOctalToDecimalLong.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/ConvertOctalToDecimalLong.java new file mode 100644 index 000000000000..bf16602fe852 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/numeric/octal/ConvertOctalToDecimalLong.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 c123d1c77fa1..558658ee118c 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/OctalLiteralFixesTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/numeric/OctalLiteralFixesTest.java @@ -25,16 +25,20 @@ public class OctalLiteralFixesTest extends IGQuickFixesTestCase { myFixture.enableInspections(new OctalLiteralInspection()); } - public void testConvertOctalToDecimal1() { - doTest("ConvertToDecimal1", InspectionGadgetsBundle.message("convert.octal.literal.to.decimal.literal.quickfix")); + public void testConvertToDecimal1() { + doTest(InspectionGadgetsBundle.message("convert.octal.literal.to.decimal.literal.quickfix")); } - public void testConvertOctalToDecimal2() { - doTest("ConvertToDecimal2", InspectionGadgetsBundle.message("convert.octal.literal.to.decimal.literal.quickfix")); + public void testConvertToDecimal2() { + doTest(InspectionGadgetsBundle.message("convert.octal.literal.to.decimal.literal.quickfix")); + } + + public void testConvertOctalToDecimalLong() { + doTest(InspectionGadgetsBundle.message("convert.octal.literal.to.decimal.literal.quickfix")); } public void testRemoveLeadingZero() { - doTest("RemoveLeadingZero", InspectionGadgetsBundle.message("remove.leading.zero.to.make.decimal.quickfix")); + doTest(InspectionGadgetsBundle.message("remove.leading.zero.to.make.decimal.quickfix")); } public void testRemoveLeadingZeroLong() {