diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/encapsulation/AssignmentOrReturnOfFieldWithMutableTypeInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/encapsulation/AssignmentOrReturnOfFieldWithMutableTypeInspection.java index 7943192505cf..21eb22bbeedf 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/encapsulation/AssignmentOrReturnOfFieldWithMutableTypeInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/encapsulation/AssignmentOrReturnOfFieldWithMutableTypeInspection.java @@ -145,7 +145,9 @@ public class AssignmentOrReturnOfFieldWithMutableTypeInspection extends BaseInsp if (field == null) return; final String type = TypeUtils.expressionHasTypeOrSubtype(returnValue, MUTABLE_TYPES); if (type == null && !(returnValue.getType() instanceof PsiArrayType)) return; - if (CollectionUtils.isConstantEmptyArray(field) || Mutability.getMutability(field).isUnmodifiable()) return; + if (CollectionUtils.isConstantEmptyArray(field) || + ClassUtils.isImmutable(field.getType()) || + Mutability.getMutability(field).isUnmodifiable()) return; registerError(returnValue, field, returnValue, type, Boolean.FALSE); } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/encapsulation/assignment_or_return_of_field_with_mutable_type/AssignmentOrReturnOfFieldWithMutableType.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/encapsulation/assignment_or_return_of_field_with_mutable_type/AssignmentOrReturnOfFieldWithMutableType.java index 2ca5bace4cf2..36fff3f7c0e0 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/encapsulation/assignment_or_return_of_field_with_mutable_type/AssignmentOrReturnOfFieldWithMutableType.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/encapsulation/assignment_or_return_of_field_with_mutable_type/AssignmentOrReturnOfFieldWithMutableType.java @@ -1,6 +1,7 @@ package com.siyeh.igtest.encapsulation; import java.util.*; +import com.google.common.collect.*; public class AssignmentOrReturnOfFieldWithMutableType { @@ -151,4 +152,12 @@ class ImmutableTest { public List getList() { return list; } +} + +class GuavaTest { + private final ImmutableList list = ImmutableList.of(); + + public ImmutableList getList() { + return list; + } } \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/encapsulation/AssignmentOrReturnOfFieldWithMutableTypeInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/encapsulation/AssignmentOrReturnOfFieldWithMutableTypeInspectionTest.java index 93daae40c4ce..1f30668033c3 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/encapsulation/AssignmentOrReturnOfFieldWithMutableTypeInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/encapsulation/AssignmentOrReturnOfFieldWithMutableTypeInspectionTest.java @@ -22,6 +22,19 @@ public class AssignmentOrReturnOfFieldWithMutableTypeInspectionTest extends Ligh } }; + @Override + protected String[] getEnvironmentClasses() { + return new String[] { + "package com.google.common.collect;\n" + + "\n" + + "import java.util.List;\n" + + "\n" + + "public class ImmutableList implements List {\n" + + " public static ImmutableList of() {return new ImmutableList<>();}\n" + + "}" + }; + } + @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() {