From a7149e200a3f86169cd3de12298e92a91d8e8205 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 29 Apr 2020 12:44:14 +0700 Subject: [PATCH] Allow for Collections and Maps in non-internal mode GitOrigin-RevId: a3ddd348eb7e2ff50ea4d7c51c6beaf5a2127d97 --- .../UnmodifiableAnnotationProvider.java | 13 ++++++++----- .../UnmodifiableViewAnnotationProvider.java | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/externalAnnotation/UnmodifiableAnnotationProvider.java b/java/java-impl/src/com/intellij/codeInsight/externalAnnotation/UnmodifiableAnnotationProvider.java index cffe7947a545..fcd9867699da 100644 --- a/java/java-impl/src/com/intellij/codeInsight/externalAnnotation/UnmodifiableAnnotationProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/externalAnnotation/UnmodifiableAnnotationProvider.java @@ -2,11 +2,13 @@ package com.intellij.codeInsight.externalAnnotation; import com.intellij.codeInspection.dataFlow.Mutability; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.psi.CommonClassNames; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifierListOwner; -import com.siyeh.ig.psiutils.ClassUtils; +import com.intellij.psi.util.InheritanceUtil; +import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.NotNull; public class UnmodifiableAnnotationProvider implements AnnotationProvider { @@ -19,9 +21,10 @@ public class UnmodifiableAnnotationProvider implements AnnotationProvider { @Override public boolean isAvailable(PsiModifierListOwner owner) { - return ApplicationManager.getApplication().isInternal() && - owner instanceof PsiMethod && - !ClassUtils.isImmutable(((PsiMethod)owner).getReturnType()); + if (!(owner instanceof PsiMethod)) return false; + PsiClass returnClass = PsiUtil.resolveClassInClassTypeOnly(((PsiMethod)owner).getReturnType()); + return InheritanceUtil.isInheritor(returnClass, CommonClassNames.JAVA_UTIL_COLLECTION) || + InheritanceUtil.isInheritor(returnClass, CommonClassNames.JAVA_UTIL_MAP); } @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/externalAnnotation/UnmodifiableViewAnnotationProvider.java b/java/java-impl/src/com/intellij/codeInsight/externalAnnotation/UnmodifiableViewAnnotationProvider.java index 7cc3f40a8d54..4ba4e31a94c4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/externalAnnotation/UnmodifiableViewAnnotationProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/externalAnnotation/UnmodifiableViewAnnotationProvider.java @@ -2,11 +2,13 @@ package com.intellij.codeInsight.externalAnnotation; import com.intellij.codeInspection.dataFlow.Mutability; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.psi.CommonClassNames; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifierListOwner; -import com.siyeh.ig.psiutils.ClassUtils; +import com.intellij.psi.util.InheritanceUtil; +import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.NotNull; public class UnmodifiableViewAnnotationProvider implements AnnotationProvider { @@ -19,9 +21,10 @@ public class UnmodifiableViewAnnotationProvider implements AnnotationProvider { @Override public boolean isAvailable(PsiModifierListOwner owner) { - return ApplicationManager.getApplication().isInternal() && - owner instanceof PsiMethod && - !ClassUtils.isImmutable(((PsiMethod)owner).getReturnType()); + if (!(owner instanceof PsiMethod)) return false; + PsiClass returnClass = PsiUtil.resolveClassInClassTypeOnly(((PsiMethod)owner).getReturnType()); + return InheritanceUtil.isInheritor(returnClass, CommonClassNames.JAVA_UTIL_COLLECTION) || + InheritanceUtil.isInheritor(returnClass, CommonClassNames.JAVA_UTIL_MAP); } @Override