AnnotationCacheOwnerNormalizer: added normalizer for elements with cache (EA-354371)

GitOrigin-RevId: 523de13f3c36509682dbd8bbcbe15e1c7270233f
This commit is contained in:
Artemiy Sartakov
2021-08-26 13:50:15 +07:00
committed by intellij-monorepo-bot
parent b54911d412
commit 4d17737f2b
4 changed files with 85 additions and 11 deletions

View File

@@ -122,11 +122,12 @@ public class AnnotationUtil {
}
@Nullable
private static List<PsiAnnotation> findNonCodeAnnotations(@NotNull PsiModifierListOwner listOwner, @NotNull Collection<String> annotationNames) {
if (listOwner instanceof PsiLocalVariable) {
private static List<PsiAnnotation> findNonCodeAnnotations(@NotNull PsiModifierListOwner element, @NotNull Collection<String> annotationNames) {
if (element instanceof PsiLocalVariable) {
// Non-code annotations for local variables are not supported: don't bother to search them
return null;
}
PsiModifierListOwner listOwner = AnnotationCacheOwnerNormalizer.normalize(element);
Map<Collection<String>, List<PsiAnnotation>> map = CachedValuesManager.getCachedValue(
listOwner,
() -> {
@@ -181,19 +182,20 @@ public class AnnotationUtil {
@NotNull
public static <T extends PsiModifierListOwner> List<T> getSuperAnnotationOwners(@NotNull T element) {
return CachedValuesManager.getCachedValue(element, () -> {
PsiModifierListOwner listOwner = AnnotationCacheOwnerNormalizer.normalize(element);
return CachedValuesManager.getCachedValue(listOwner, () -> {
Set<PsiModifierListOwner> result = new LinkedHashSet<>();
if (element instanceof PsiMethod) {
if (!element.hasModifierProperty(PsiModifier.STATIC)) {
collectSuperMethods(result, ((PsiMethod)element).getHierarchicalMethodSignature(), element,
JavaPsiFacade.getInstance(element.getProject()).getResolveHelper());
if (listOwner instanceof PsiMethod) {
if (!listOwner.hasModifierProperty(PsiModifier.STATIC)) {
collectSuperMethods(result, ((PsiMethod)listOwner).getHierarchicalMethodSignature(), listOwner,
JavaPsiFacade.getInstance(listOwner.getProject()).getResolveHelper());
}
}
else if (element instanceof PsiClass) {
InheritanceUtil.processSupers((PsiClass)element, false, Processors.cancelableCollectProcessor(result));
else if (listOwner instanceof PsiClass) {
InheritanceUtil.processSupers((PsiClass)listOwner, false, Processors.cancelableCollectProcessor(result));
}
else if (element instanceof PsiParameter) {
collectSuperParameters(result, (PsiParameter)element);
else if (listOwner instanceof PsiParameter) {
collectSuperParameters(result, (PsiParameter)listOwner);
}
List<T> list;