diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/cloneable/CloneCallsConstructorsInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/cloneable/CloneCallsConstructorsInspection.java index 40d90c1ed6da..bed32082287a 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/cloneable/CloneCallsConstructorsInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/cloneable/CloneCallsConstructorsInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2014 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. @@ -17,10 +17,10 @@ package com.siyeh.ig.cloneable; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; -import com.siyeh.HardcodedMethodConstants; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.psiutils.CloneUtils; import org.jetbrains.annotations.NotNull; public class CloneCallsConstructorsInspection extends BaseInspection { @@ -49,37 +49,33 @@ public class CloneCallsConstructorsInspection extends BaseInspection { @Override public void visitMethod(@NotNull PsiMethod method) { - final String methodName = method.getName(); - final PsiParameterList parameterList = method.getParameterList(); - final boolean isClone = - HardcodedMethodConstants.CLONE.equals(methodName) && - parameterList.getParametersCount() == 0; - if (isClone) { - method.accept(new JavaRecursiveElementVisitor() { - - @Override - public void visitNewExpression( - @NotNull PsiNewExpression newExpression) { - super.visitNewExpression(newExpression); - final PsiExpression[] arrayDimensions = - newExpression.getArrayDimensions(); - if (arrayDimensions.length != 0) { - return; - } - if (newExpression.getArrayInitializer() != null) { - return; - } - if (newExpression.getAnonymousClass() != null) { - return; - } - if (PsiTreeUtil.getParentOfType(newExpression, - PsiThrowStatement.class) != null) { - return; - } - registerError(newExpression); - } - }); + if (!CloneUtils.isClone(method)) { + return; } + method.accept(new JavaRecursiveElementVisitor() { + + @Override + public void visitNewExpression( + @NotNull PsiNewExpression newExpression) { + super.visitNewExpression(newExpression); + final PsiExpression[] arrayDimensions = + newExpression.getArrayDimensions(); + if (arrayDimensions.length != 0) { + return; + } + if (newExpression.getArrayInitializer() != null) { + return; + } + if (newExpression.getAnonymousClass() != null) { + return; + } + if (PsiTreeUtil.getParentOfType(newExpression, + PsiThrowStatement.class) != null) { + return; + } + registerNewExpressionError(newExpression); + } + }); } } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/cloneable/clone_calls_constructors/CloneCallsConstructors.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/cloneable/clone_calls_constructors/CloneCallsConstructors.java new file mode 100644 index 000000000000..84696ac60cbe --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/cloneable/clone_calls_constructors/CloneCallsConstructors.java @@ -0,0 +1,9 @@ +package com.siyeh.igtest.cloneable.clone_calls_constructors; + +class CloneCallsConstructors implements Cloneable { + + @Override + protected Object clone() throws CloneNotSupportedException { + return new CloneCallsConstructors(); + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/cloneable/CloneCallsConstructorsInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/cloneable/CloneCallsConstructorsInspectionTest.java new file mode 100644 index 000000000000..db06e4e2f8c5 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/cloneable/CloneCallsConstructorsInspectionTest.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.cloneable; + +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; + +/** + * @author Bas Leijdekkers + */ +public class CloneCallsConstructorsInspectionTest extends LightInspectionTestCase { + @Override + protected InspectionProfileEntry getInspection() { + return new CloneCallsConstructorsInspection(); + } + + public void testCloneCallsConstructors() { doTest(); } +}