diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/cloneable/CloneReturnsClassTypeInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/cloneable/CloneReturnsClassTypeInspection.java index a38b9e5ebb4f..aa2103406ded 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/cloneable/CloneReturnsClassTypeInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/cloneable/CloneReturnsClassTypeInspection.java @@ -65,7 +65,8 @@ public class CloneReturnsClassTypeInspection extends BaseInspection { if (!(element instanceof PsiTypeElement)) { return; } - final PsiElement parent = element.getParent(); + final PsiTypeElement typeElement = (PsiTypeElement)element; + final PsiElement parent = typeElement.getParent(); if (!(parent instanceof PsiMethod)) { return; } @@ -96,7 +97,7 @@ public class CloneReturnsClassTypeInspection extends BaseInspection { commentTracker); } }); - element.replace(newTypeElement); + typeElement.getFirstChild().replace(newTypeElement.getFirstChild()); } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/cloneable/change_return_type/TypeUseAnnotation.after.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/cloneable/change_return_type/TypeUseAnnotation.after.java new file mode 100644 index 000000000000..0f91932a126c --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/cloneable/change_return_type/TypeUseAnnotation.after.java @@ -0,0 +1,14 @@ +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +class TypeUseAnnotation implements Cloneable { + + public @NonNull TypeUseAnnotation clone() throws CloneNotSupportedException { + return (TypeUseAnnotation) super.clone(); + } +} +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.TYPE_USE}) +@interface NonNull {} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igfixes/cloneable/change_return_type/TypeUseAnnotation.java b/plugins/InspectionGadgets/test/com/siyeh/igfixes/cloneable/change_return_type/TypeUseAnnotation.java new file mode 100644 index 000000000000..66e7d9363242 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igfixes/cloneable/change_return_type/TypeUseAnnotation.java @@ -0,0 +1,14 @@ +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +class TypeUseAnnotation implements Cloneable { + + public @NonNull Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} +@Retention(RetentionPolicy.CLASS) +@Target({ElementType.TYPE_USE}) +@interface NonNull {} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/cloneable/CloneReturnsClassTypeFixTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/cloneable/CloneReturnsClassTypeFixTest.java index 159c15bc8778..bad38b0d378a 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/cloneable/CloneReturnsClassTypeFixTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/fixes/cloneable/CloneReturnsClassTypeFixTest.java @@ -18,6 +18,7 @@ public class CloneReturnsClassTypeFixTest extends IGQuickFixesTestCase { public void testSimple() { doTest("Change return type to 'Simple'"); } public void testReturnNull() { doTest("Change return type to 'ReturnNull'"); } + public void testTypeUseAnnotation() { doTest("Change return type to 'TypeUseAnnotation'"); } public void testCast() { doTest("Change return type to 'Cast'"); } public void testAnonymousClass() { doTest("Change return type to 'B'"); } public void testNested() { doTest("Change return type to 'Nested'"); }