private void createProblemDescriptorWithQuickFixes(PsiModifierListOwner owner, InspectionManager manager, Collection<ProblemDescriptor> problemDescriptors, PsiElement element) { if (element.isPhysical()) { LocalQuickFix[] localQuickFixes = createQuickFixes(owner, isRemoveRedundantAnnotations()); ProblemDescriptor problemDescriptor = manager.createProblemDescriptor( element, MISSING_NULLABLE_NONNULL_ANNOTATION, localQuickFixes, GENERIC_ERROR_OR_WARNING, true, false); problemDescriptors.add(problemDescriptor); } }
static List<String> findAnnotations(PsiModifierListOwner element, boolean nullable) { if (overridesSuper(element)) { return Collections.emptyList(); } List<String> annotations = new ArrayList<>(); Project project = element.getProject(); PsiModifierList modifierList = element.getModifierList(); List<String> nullabilityAnnotations = nullable ? NullableNotNullManager.getInstance(project).getNullables() : NullableNotNullManager.getInstance(project).getNotNulls(); for (String notNullAnnotationFqn : nullabilityAnnotations) { PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); PsiAnnotation annotation = factory.createAnnotationFromText("@" + notNullAnnotationFqn, null); PsiAnnotation.TargetType[] targetTypes = getTargetsForLocation(modifierList); if (isNullabilityAnnotationForTypeQualifierDefault(annotation, nullable, targetTypes)) { annotations.add(annotation.getQualifiedName()); } } return annotations; }
public static PsiElement find( PsiModifierListOwner resolve, ManifoldPsiClass facade ) { PsiModifierList modifierList = resolve.getModifierList(); if( modifierList == null ) { return null; } PsiAnnotation[] annotations = modifierList.getAnnotations(); if( annotations.length > 0 && Objects.equals( annotations[0].getQualifiedName(), SourcePosition.class.getName() ) ) { return findTargetFeature( annotations[0], facade ); } if( !facade.getRawFiles().isEmpty() && DarkJavaTypeManifold.FILE_EXTENSIONS.stream() .anyMatch( ext -> ext.equalsIgnoreCase( facade.getRawFiles().get( 0 ).getVirtualFile().getExtension() ) ) ) { // DarkJava is Java return facade.getRawFiles().get( 0 ).findElementAt( resolve.getTextOffset() ); } return null; }
private static boolean isJavaElementForType( PsiModifierListOwner modifierListOwner, PsiClass psiClass ) { PsiAnnotation annotation = modifierListOwner.getModifierList().findAnnotation( TypeReference.class.getName() ); if( annotation != null ) { PsiNameValuePair[] attributes = annotation.getParameterList().getAttributes(); for( PsiNameValuePair pair : attributes ) { String fqn = pair.getLiteralValue(); if( psiClass.getQualifiedName().contains( fqn ) ) { return true; } } } return false; }
static PsiAnnotation findAnnotation(PsiElement element, String annotationName) { if (element instanceof PsiModifierListOwner) { PsiModifierListOwner listOwner = (PsiModifierListOwner) element; PsiModifierList modifierList = listOwner.getModifierList(); if (modifierList != null) { for (PsiAnnotation psiAnnotation : modifierList.getAnnotations()) { if (annotationName.equals(psiAnnotation.getQualifiedName())) { return psiAnnotation; } } } } return null; }
@Override public boolean isAvailable(@NotNull final Project project, Editor editor, PsiFile file) { final PsiElement leaf = file.findElementAt(editor.getCaretModel().getOffset()); final PsiModifierListOwner owner = getAnnotationOwner(leaf); if (owner != null && isSourceCode(owner)) { boolean hasSrcInferredAnnotation = ContainerUtil.or(findSignatureNonCodeAnnotations(owner, true), new Condition<PsiAnnotation>() { @Override public boolean value(PsiAnnotation annotation) { return AnnotationUtil.isInferredAnnotation(annotation); } }); if (hasSrcInferredAnnotation) { setText((CodeInsightSettings.getInstance().SHOW_SOURCE_INFERRED_ANNOTATIONS ? "Hide" : "Show") + " annotations inferred from source code"); return true; } } return false; }
@Override public void tokenize(@NotNull PsiLiteralExpression element, TokenConsumer consumer) { PsiLiteralExpressionImpl literalExpression = (PsiLiteralExpressionImpl)element; if (literalExpression.getLiteralElementType() != JavaTokenType.STRING_LITERAL) return; // not a string literal String text = literalExpression.getInnerText(); if (StringUtil.isEmpty(text) || text.length() <= 2) { // optimisation to avoid expensive injection check return; } if (InjectedLanguageUtil.hasInjections(literalExpression)) return; final PsiModifierListOwner listOwner = PsiTreeUtil.getParentOfType(element, PsiModifierListOwner.class); if (listOwner != null && AnnotationUtil.isAnnotated(listOwner, Collections.singleton(AnnotationUtil.NON_NLS), false, false)) { return; } if (!text.contains("\\")) { consumer.consumeToken(element, PlainTextSplitter.getInstance()); } else { processTextWithEscapeSequences(element, text, consumer); } }
@Override public Icon getLayerIcon(@NotNull Iconable element, boolean isLocked) { VirtualFile vFile = null; Project project = null; if (element instanceof PsiModifierListOwner) { project = ((PsiModifierListOwner) element).getProject(); final PsiFile containingFile = ((PsiModifierListOwner) element).getContainingFile(); vFile = containingFile == null ? null : containingFile.getVirtualFile(); } else if (element instanceof PsiDirectory) { project = ((PsiDirectory) element).getProject(); vFile = ((PsiDirectory) element).getVirtualFile(); } if (vFile != null && isExcluded(vFile, project)) { return PlatformIcons.EXCLUDED_FROM_COMPILE_ICON; } return null; }
@Override public void tokenize(@NotNull PsiLiteralExpression element, TokenConsumer consumer) { PsiLiteralExpressionImpl literalExpression = (PsiLiteralExpressionImpl) element; if (literalExpression.getLiteralElementType() != JavaTokenType.STRING_LITERAL) { return; // not a string literal } final PsiModifierListOwner listOwner = PsiTreeUtil.getParentOfType(element, PsiModifierListOwner.class); if (listOwner != null && AnnotationUtil.isAnnotated(listOwner, Collections.singleton(AnnotationUtil.NON_NLS), false, false)) { return; } String text = literalExpression.getInnerText(); if (text == null) { return; } if (!text.contains("\\")) { consumer.consumeToken(element, PlainTextSplitter.getInstance()); } else { processTextWithEscapeSequences(element, text, consumer); } }
/** * Check if listOwner is annotated with annotations or listOwner's annotations contain given annotations */ public static boolean isMetaAnnotated(@NotNull PsiModifierListOwner listOwner, @NotNull final Collection<String> annotations) { if(AnnotationUtil.isAnnotated(listOwner, annotations, false)) { return true; } final List<PsiClass> resolvedAnnotations = getResolvedClassesInAnnotationsList(listOwner); for(String annotationFQN : annotations) { for(PsiClass resolvedAnnotation : resolvedAnnotations) { if(metaAnnotationCached(resolvedAnnotation, annotationFQN) != null) { return true; } } } return false; }
public boolean validate(@NotNull PsiModifierListOwner psiModifierListOwner, @NotNull PsiType psiType, @NotNull PsiAnnotation psiAnnotation, @NotNull ProblemBuilder builder) { boolean result = true; if (psiModifierListOwner.hasModifierProperty(PsiModifier.STATIC)) { builder.addError("@Delegate is legal only on instance fields or no-argument instance methods."); result = false; } final Collection<PsiType> types = collectDelegateTypes(psiAnnotation, psiType); result &= validateTypes(types, builder); final Collection<PsiType> excludes = collectExcludeTypes(psiAnnotation); result &= validateTypes(excludes, builder); return result; }
@Nullable static PsiModifierListOwner getAnnotationOwner(@Nullable PsiElement element) { if(element == null) { return null; } PsiElement owner = element.getParent(); if(!(owner instanceof PsiModifierListOwner) || !(owner instanceof PsiNameIdentifierOwner)) { return null; } if(owner instanceof PsiParameter || owner instanceof PsiLocalVariable) { return null; } // support non-Java languages where getNameIdentifier may return non-physical psi with the same range PsiElement nameIdentifier = ((PsiNameIdentifierOwner) owner).getNameIdentifier(); if(nameIdentifier == null || !nameIdentifier.getTextRange().equals(element.getTextRange())) { return null; } return (PsiModifierListOwner) owner; }
@Override public boolean isAvailable(@NotNull final Project project, Editor editor, PsiFile file) { final PsiElement leaf = file.findElementAt(editor.getCaretModel().getOffset()); final PsiModifierListOwner owner = getAnnotationOwner(leaf); if(owner != null) { boolean hasSrcInferredAnnotation = ContainerUtil.exists(AnnotationDocGenerator.getAnnotationsToShow(owner), AnnotationDocGenerator::isInferredFromSource); if(hasSrcInferredAnnotation) { setText((JavaCodeInsightSettings.getInstance().SHOW_SOURCE_INFERRED_ANNOTATIONS ? "Hide" : "Show") + " annotations inferred from source code"); return true; } } return false; }
@Override public boolean isAvailable(@NotNull final Project project, Editor editor, PsiFile file) { final PsiElement leaf = file.findElementAt(editor.getCaretModel().getOffset()); final PsiModifierListOwner owner = ExternalAnnotationsLineMarkerProvider.getAnnotationOwner(leaf); if(owner != null && owner.getLanguage().isKindOf(JavaLanguage.INSTANCE) && isWritable(owner) && ModuleUtilCore.findModuleForPsiElement(file) != null && PsiUtil.getLanguageLevel(file) .isAtLeast(LanguageLevel.JDK_1_5)) { final PsiAnnotation[] annotations = InferredAnnotationsManager.getInstance(project).findInferredAnnotations(owner); if(annotations.length > 0) { final String annos = StringUtil.join(annotations, annotation -> { final PsiJavaCodeReferenceElement nameRef = correctAnnotation(annotation).getNameReferenceElement(); final String name = nameRef != null ? nameRef.getReferenceName() : annotation.getQualifiedName(); return "@" + name + annotation.getParameterList().getText(); }, " "); setText("Insert '" + annos + "'"); return true; } } return false; }
@Override public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { final PsiElement leaf = file.findElementAt(editor.getCaretModel().getOffset()); final PsiModifierListOwner owner = ExternalAnnotationsLineMarkerProvider.getAnnotationOwner(leaf); if(owner != null && owner.getLanguage().isKindOf(JavaLanguage.INSTANCE) && isWritable(owner) && ModuleUtilCore.findModuleForPsiElement(file) != null && PsiUtil.getLanguageLevel(file) .isAtLeast(LanguageLevel.JDK_1_5)) { final PsiAnnotation[] annotations = getAnnotations(project, owner); if(annotations.length > 0) { final String annos = StringUtil.join(annotations, annotation -> { final PsiJavaCodeReferenceElement nameRef = annotation.getNameReferenceElement(); final String name = nameRef != null ? nameRef.getReferenceName() : annotation.getQualifiedName(); return "@" + name + annotation.getParameterList().getText(); }, " "); setText("Insert '" + annos + "'"); return true; } } return false; }
private void addAnnotation(@NotNull PsiModifierListOwner targetElement, @NotNull PsiAnnotation newPsiAnnotation, @NotNull Class<? extends Annotation> annotationClass) { final PsiAnnotation presentAnnotation = PsiAnnotationSearchUtil.findAnnotation(targetElement, annotationClass); final Project project = targetElement.getProject(); final JavaCodeStyleManager javaCodeStyleManager = JavaCodeStyleManager.getInstance(project); javaCodeStyleManager.shortenClassReferences(newPsiAnnotation); if (null == presentAnnotation) { PsiModifierList modifierList = targetElement.getModifierList(); if (null != modifierList) { modifierList.addAfter(newPsiAnnotation, null); } } else { presentAnnotation.setDeclaredAttributeValue(PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME, newPsiAnnotation.findDeclaredAttributeValue(PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME)); } }
@NotNull private PsiAnnotation[] getAnnotations(@NotNull Project project, PsiModifierListOwner owner) { PsiAnnotation[] annotations = ExternalAnnotationsManager.getInstance(project).findExternalAnnotations(owner); if(annotations == null) { return PsiAnnotation.EMPTY_ARRAY; } else { JavaPsiFacade facade = JavaPsiFacade.getInstance(project); return Arrays.stream(annotations).filter(anno -> { String qualifiedName = anno.getQualifiedName(); return qualifiedName != null && facade.findClass(qualifiedName, owner.getResolveScope()) != null; }).toArray(PsiAnnotation[]::new); } }
@Nullable public static PsiGuard of(@Nullable PsiAnnotation annotation) { if ( annotation == null ) { return null; } PsiGuardType psiGuardType = PsiGuardType.ofPsiAnnotation(annotation); if ( psiGuardType == null ) { return null; } if ( !(annotation.getOwner() instanceof PsiModifierListOwner) ) { return null; } PsiGuardTarget target = PsiGuardTarget.get((PsiModifierListOwner)annotation.getOwner()); if ( target == null ) { return null; } return new PsiGuard(annotation, psiGuardType, target); }
public <T extends PsiModifierListOwner> void registerTopLevelSem(SemRegistrar registrar, final ElementPattern<? extends T> parentPattern, final JamMemberMeta<T,?> parentMeta) { final boolean isPackage = parentMeta instanceof JamPackageMeta; final PsiAnnotationPattern annoPattern = myAnnoNamePattern.withSuperParent( 2, isPackage ? PACKAGE_STATEMENT.with(new PatternCondition<PsiPackageStatement>("package") { @Override public boolean accepts(@NotNull PsiPackageStatement psiPackageStatement, ProcessingContext context) { return parentPattern.accepts(psiPackageStatement.getPackageReference().resolve(), context); } }) : parentPattern); registrar.registerSemElementProvider(myMetaKey, annoPattern, annotation -> { final PsiElement parent = annotation.getParent().getParent(); final T element = (isPackage && parent instanceof PsiPackageStatement? (T)((PsiPackageStatement)parent).getPackageReference().resolve() : (T)parent); if (element != null && SemService.getSemService(annotation.getProject()).getSemElement(parentMeta.getMetaKey(), element) == parentMeta) { return this; } return null; }); registerChildren(registrar, annoPattern); }
@RequiredReadAction public static Collection<String> getInjectAnnotations(@NotNull PsiModifierListOwner element) { GoogleGuiceModuleExtension extension = ModuleUtilCore.getExtension(element, GoogleGuiceModuleExtension.class); if(extension == null) { return Collections.emptyList(); } List<String> anno = new ArrayList<>(2); if(extension.isUseJSR330()) { anno.add(JSR330_INJECT); } anno.add(GUICE_INJECT); return anno; }
@RequiredReadAction public static Collection<String> getSingletonAnnotations(@NotNull PsiModifierListOwner element) { GoogleGuiceModuleExtension extension = ModuleUtilCore.getExtension(element, GoogleGuiceModuleExtension.class); if(extension == null) { return Collections.emptyList(); } List<String> anno = new ArrayList<>(2); if(extension.isUseJSR330()) { anno.add(JSR330_SINGLETON); } anno.add(GUICE_SINGLETON); return anno; }
@NotNull private List<AnnotationData> collectExternalAnnotations(@NotNull PsiModifierListOwner listOwner) { if(!hasAnyAnnotationsRoots()) { return Collections.emptyList(); } List<AnnotationData> cached; while(true) { cached = (List<AnnotationData>) cache.get(listOwner); if(cached == NO_DATA || !cached.isEmpty()) { return cached; } List<AnnotationData> computed = doCollect(listOwner, false); if(cache.replace(listOwner, cached, computed)) { cached = computed; break; } } return cached; }
@Nullable @Override public LineMarkerInfo getLineMarkerInfo(@NotNull final PsiElement element) { PsiModifierListOwner owner = getAnnotationOwner(element); if(owner == null) { return null; } boolean includeSourceInferred = JavaCodeInsightSettings.getInstance().SHOW_SOURCE_INFERRED_ANNOTATIONS; boolean hasAnnotationsToShow = ContainerUtil.exists(NonCodeAnnotationGenerator.getSignatureNonCodeAnnotations(owner).values(), a -> includeSourceInferred || !a.isInferredFromSource()); if(!hasAnnotationsToShow) { return null; } return new LineMarkerInfo<>(element, element.getTextRange(), JavaIcons.Gutter.ExtAnnotation, Pass.LINE_MARKERS, ourTooltipProvider, MyIconGutterHandler.INSTANCE, GutterIconRenderer.Alignment .RIGHT); }
@Nullable public PsiAnnotation findInferredAnnotation(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN) { if(!(listOwner instanceof PsiCompiledElement)) { return null; } if(annotationFQN.equals(AnnotationUtil.NOT_NULL) || annotationFQN.equals(AnnotationUtil.NULLABLE) || annotationFQN.equals(ControlFlowAnalyzer.ORG_JETBRAINS_ANNOTATIONS_CONTRACT)) { PsiAnnotation[] annotations = findInferredAnnotations(listOwner); for(PsiAnnotation annotation : annotations) { if(annotationFQN.equals(annotation.getQualifiedName())) { return annotation; } } return null; } else { return null; } }
@NotNull public PsiAnnotation[] findInferredAnnotations(@NotNull final PsiModifierListOwner listOwner) { if(!(listOwner instanceof PsiCompiledElement)) { return PsiAnnotation.EMPTY_ARRAY; } return CachedValuesManager.getCachedValue(listOwner, new CachedValueProvider<PsiAnnotation[]>() { @Nullable @Override public Result<PsiAnnotation[]> compute() { return CachedValueProvider.Result.create(ProjectBytecodeAnalysis.this.collectInferredAnnotations(listOwner), listOwner); } }); }
@Nullable public static HKey getKey(@NotNull PsiModifierListOwner owner, MessageDigest md) { LOG.assertTrue(owner instanceof PsiCompiledElement, owner); if(owner instanceof PsiMethod) { return BytecodeAnalysisConverter.psiKey((PsiMethod) owner, Out, md); } if(owner instanceof PsiParameter) { PsiElement parent = owner.getParent(); if(parent instanceof PsiParameterList) { PsiElement gParent = parent.getParent(); if(gParent instanceof PsiMethod) { final int index = ((PsiParameterList) parent).getParameterIndex((PsiParameter) owner); return BytecodeAnalysisConverter.psiKey((PsiMethod) gParent, new In(index, In.NOT_NULL_MASK), md); } } } return null; }
@Override public boolean isAvailable(@NotNull Project project, @NotNull PsiFile file, @NotNull PsiElement startElement, @NotNull PsiElement endElement) { if(!super.isAvailable(project, file, startElement, endElement)) { return false; } PsiModifierListOwner owner = getContainer(file, startElement.getTextRange().getStartOffset()); if(owner == null || AnnotationUtil.isAnnotated(owner, getAnnotationsToRemove()[0], false, false)) { return false; } if(owner instanceof PsiMethod) { PsiType returnType = ((PsiMethod) owner).getReturnType(); return returnType != null && !(returnType instanceof PsiPrimitiveType); } return true; }
static LocalQuickFix[] createQuickFixes(PsiModifierListOwner owner, boolean removeRedundantAnnotations) { List<LocalQuickFix> quickFixes = new ArrayList<>(); NullabilityAnnotationsWithTypeQualifierDefault.findAnnotations(owner, false) .forEach(defaultAnnotation -> quickFixes.add(new AddPackageInfoWithNullabilityDefaultsFix(owner, defaultAnnotation, false, removeRedundantAnnotations))); NullabilityAnnotationsWithTypeQualifierDefault.findAnnotations(owner, true) .forEach(defaultAnnotation -> quickFixes.add(new AddPackageInfoWithNullabilityDefaultsFix(owner, defaultAnnotation, true, removeRedundantAnnotations))); quickFixes.add(new AddNotNullAnnotationFix(owner) { @Override protected boolean isAvailable() { return true; } }); quickFixes.add(new AddNullableAnnotationFix(owner) { @Override protected boolean isAvailable() { return true; } }); return quickFixes.toArray(new LocalQuickFix[0]); }
AddPackageInfoWithNullabilityDefaultsFix(PsiModifierListOwner element, String annotationForTypeQualifierFqn, boolean nullable, boolean removeRedundantAnnotations) { super(element); this.annotationForTypeQualifierFqn = annotationForTypeQualifierFqn; this.nullable = nullable; this.removeRedundantAnnotations = removeRedundantAnnotations; }
private void removeRedundantAnnotations(PsiModifierListOwner element, List<String> redundantAnnotations, Set<PsiAnnotation.TargetType> targetsForDefaultAnnotation) { PsiAnnotation.TargetType[] targetTypes = getTargetsForLocation(element.getModifierList()); boolean isTargeted = targetsForDefaultAnnotation.isEmpty() || ContainerUtil.intersects(targetsForDefaultAnnotation, Arrays.asList(targetTypes)); if (isTargeted) { removePhysicalAnnotations(element, ArrayUtil.toStringArray(redundantAnnotations)); } }
private static boolean overridesSuper(PsiModifierListOwner element) { if (element instanceof PsiParameter) { PsiMethod method = (PsiMethod) element.getParent().getParent(); return !superMethods(method).isEmpty(); } else if (element instanceof PsiMethod) { return !superMethods((PsiMethod) element).isEmpty(); } return false; }
Optional<PsiAnnotation> getConfigAnnotation(@NotNull PsiModifierListOwner psiModifierListOwner) { return Optional.ofNullable(psiModifierListOwner.getModifierList()) .map(PsiAnnotationOwner::getAnnotations) .map(Arrays::stream) .map(stream -> stream.filter(annotation -> Optional.ofNullable(annotation.getNameReferenceElement()) .map(PsiReference::resolve) .map(psiElement -> psiElement == configAnnotationClass) .orElse(false) )) .flatMap(Stream::findFirst); }
private PsiAnnotation getPathAnnotation(PsiClass pathAnnotationClass, @NotNull PsiModifierListOwner psiModifierListOwner) { return Optional.ofNullable(psiModifierListOwner.getModifierList()) .map(PsiAnnotationOwner::getAnnotations) .map(Arrays::stream) .map(stream -> stream.filter(annotation -> Optional.ofNullable(annotation.getNameReferenceElement()) .map(PsiReference::resolve) .map(psiElement -> psiElement == pathAnnotationClass) .orElse(false) )) .flatMap(Stream::findFirst) .orElse(null); }
public static PsiElement find( PsiElement resolve ) { PsiFile file = resolve.getContainingFile(); if( file != null ) { ManifoldPsiClass facade = resolve instanceof ManifoldPsiClass ? (ManifoldPsiClass)resolve : file.getUserData( ManifoldPsiClass.KEY_MANIFOLD_PSI_CLASS ); if( facade != null ) { PsiElement annotations = find( (PsiModifierListOwner)resolve, facade ); if( annotations != null ) return annotations; } } return null; }
private static boolean isJavaElementFor( PsiModifierListOwner modifierListOwner, PsiElement element ) { PsiAnnotation annotation = modifierListOwner.getModifierList().findAnnotation( SourcePosition.class.getName() ); if( annotation != null ) { int textOffset = element.getTextOffset(); int textLength = element instanceof PsiNamedElement ? ((PsiNamedElement)element).getName().length() : element.getTextLength(); PsiNameValuePair[] attributes = annotation.getParameterList().getAttributes(); int offset = -1; for( PsiNameValuePair pair : attributes ) { if( pair.getNameIdentifier().getText().equals( SourcePosition.OFFSET ) ) { String literalValue = pair.getLiteralValue(); if( literalValue == null ) { return false; } offset = Integer.parseInt( literalValue ); break; } } if( offset >= textOffset && offset <= textOffset + textLength ) { return true; } } return false; }
private void addAnnotations( SrcAnnotated<?> srcAnnotated, PsiModifierListOwner annotated ) { for( PsiAnnotation psiAnno : annotated.getModifierList().getAnnotations() ) { SrcAnnotationExpression annoExpr = new SrcAnnotationExpression( psiAnno.getQualifiedName() ); for( PsiNameValuePair value : psiAnno.getParameterList().getAttributes() ) { SrcArgument srcArg = new SrcArgument( new SrcRawExpression( value.getLiteralValue() ) ); annoExpr.addArgument( srcArg ).name( value.getName() ); } srcAnnotated.addAnnotation( annoExpr ); } }
@Override public boolean isEntryPoint(@NotNull PsiElement element) { if (!(element instanceof PsiModifierListOwner)) return false; PsiModifierListOwner owner = (PsiModifierListOwner)element; if (!ADDITIONAL_ANNOTATIONS.isEmpty() && ADDITIONAL_ANNOTATIONS.contains(Deprecated.class.getName()) && element instanceof PsiDocCommentOwner && ((PsiDocCommentOwner)element).isDeprecated()) { return true; } return AnnotationUtil.checkAnnotatedUsingPatterns(owner, ADDITIONAL_ANNOTATIONS) || AnnotationUtil.checkAnnotatedUsingPatterns(owner, getAdditionalAnnotations()); }
public static void createAddToSpecialAnnotationFixes(@NotNull PsiModifierListOwner owner, @NotNull Processor<String> processor) { final PsiModifierList modifierList = owner.getModifierList(); if (modifierList != null) { final PsiAnnotation[] psiAnnotations = modifierList.getAnnotations(); for (PsiAnnotation psiAnnotation : psiAnnotations) { @NonNls final String name = psiAnnotation.getQualifiedName(); if (name == null) continue; if (name.startsWith("java.") || name.startsWith("javax.") || name.startsWith("org.jetbrains.") && AnnotationUtil.isJetbrainsAnnotation(StringUtil.getShortName(name))) continue; if (!processor.process(name)) break; } } }