From 50b13255ab3fead9cb4f05c3a5fff210f5f54dca Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 23 Oct 2008 16:32:11 +0400 Subject: [PATCH] IDEADEV-31824 (Incorrect "manual array copy" warning) --- .../ig/performance/ManualArrayCopyInspection.java | 15 ++++-- .../ManualArrayCopyInspection.java | 10 +++- .../performance/manual_array_copy/expected.xml | 58 ++++++++++++++++++++++ .../performance/ManualArrayCopyInspectionTest.java | 11 ++++ 4 files changed, 89 insertions(+), 5 deletions(-) rename plugins/InspectionGadgets/test/com/siyeh/igtest/performance/{ => manual_array_copy}/ManualArrayCopyInspection.java (87%) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/performance/manual_array_copy/expected.xml create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ManualArrayCopyInspectionTest.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ManualArrayCopyInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ManualArrayCopyInspection.java index 413634f385..2ec55f1f7b 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ManualArrayCopyInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/ManualArrayCopyInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2008 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,26 +35,31 @@ import org.jetbrains.annotations.Nullable; public class ManualArrayCopyInspection extends BaseInspection { + @Override @NotNull public String getDisplayName() { return InspectionGadgetsBundle.message( "manual.array.copy.display.name"); } + @Override public boolean isEnabledByDefault() { return true; } + @Override @NotNull protected String buildErrorString(Object... infos) { return InspectionGadgetsBundle.message( "manual.array.copy.problem.descriptor"); } + @Override public BaseInspectionVisitor buildVisitor() { return new ManualArrayCopyVisitor(); } + @Override public InspectionGadgetsFix buildFix(Object... infos) { return new ManualArrayCopyFix(); } @@ -67,6 +72,7 @@ public class ManualArrayCopyInspection extends BaseInspection { "manual.array.copy.replace.quickfix"); } + @Override public void doFix(Project project, ProblemDescriptor descriptor) throws IncorrectOperationException { final PsiElement forElement = descriptor.getPsiElement(); @@ -165,7 +171,7 @@ public class ManualArrayCopyInspection extends BaseInspection { @NonNls @Nullable private static String getLengthText(PsiExpression expression, - PsiLocalVariable variable) { + PsiVariable variable) { expression = PsiUtil.deparenthesizeExpression(expression); if (expression == null) { @@ -310,7 +316,7 @@ public class ManualArrayCopyInspection extends BaseInspection { private static boolean expressionIsArrayCopy( @Nullable PsiExpression expression, - @NotNull PsiLocalVariable variable) { + @NotNull PsiVariable variable) { final PsiExpression strippedExpression = PsiUtil.deparenthesizeExpression(expression); if (strippedExpression == null) { @@ -374,7 +380,8 @@ public class ManualArrayCopyInspection extends BaseInspection { return false; } } else { - if (!lhsType.isAssignableFrom(rhsType)) { + if (!lhsType.isAssignableFrom(rhsType) || + rhsType instanceof PsiPrimitiveType) { return false; } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/ManualArrayCopyInspection.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/manual_array_copy/ManualArrayCopyInspection.java similarity index 87% rename from plugins/InspectionGadgets/test/com/siyeh/igtest/performance/ManualArrayCopyInspection.java rename to plugins/InspectionGadgets/test/com/siyeh/igtest/performance/manual_array_copy/ManualArrayCopyInspection.java index 055a168190..7e1536fc89 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/ManualArrayCopyInspection.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/manual_array_copy/ManualArrayCopyInspection.java @@ -1,4 +1,4 @@ -package com.siyeh.igtest.performance; +package com.siyeh.igtest.performance.manual_array_copy; public class ManualArrayCopyInspection { @@ -67,4 +67,12 @@ public class ManualArrayCopyInspection target[k] = source[k]; } } + + static Integer[] nono(int[] ints) { + Integer[] array = new Integer[ints.length]; + for ( int i = 0; i < ints.length; i++ ) { + array[i] = ints[i]; + } + return array; + } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/manual_array_copy/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/manual_array_copy/expected.xml new file mode 100644 index 0000000000..d167e9c791 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/manual_array_copy/expected.xml @@ -0,0 +1,58 @@ + + + + ManualArrayCopyInspection.java + 10 + Manual array copy + Manual array copy #loc + + + + ManualArrayCopyInspection.java + 12 + Manual array copy + Manual array copy #loc + + + + ManualArrayCopyInspection.java + 14 + Manual array copy + Manual array copy #loc + + + + ManualArrayCopyInspection.java + 18 + Manual array copy + Manual array copy #loc + + + + ManualArrayCopyInspection.java + 22 + Manual array copy + Manual array copy #loc + + + + ManualArrayCopyInspection.java + 36 + Manual array copy + Manual array copy #loc + + + + ManualArrayCopyInspection.java + 50 + Manual array copy + Manual array copy #loc + + + + ManualArrayCopyInspection.java + 66 + Manual array copy + Manual array copy #loc + + \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ManualArrayCopyInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ManualArrayCopyInspectionTest.java new file mode 100644 index 0000000000..e7e5aee1ba --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/performance/ManualArrayCopyInspectionTest.java @@ -0,0 +1,11 @@ +package com.siyeh.ig.performance; + +import com.IGInspectionTestCase; + +public class ManualArrayCopyInspectionTest extends IGInspectionTestCase { + + public void test() throws Exception { + doTest("com/siyeh/igtest/performance/manual_array_copy", + new ManualArrayCopyInspection()); + } +} \ No newline at end of file -- 2.11.4.GIT