Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,117 +26,118 @@
import consulo.annotation.component.ExtensionImpl;
import consulo.language.editor.inspection.ProblemDescriptor;
import consulo.language.psi.PsiElement;
import consulo.localize.LocalizeValue;
import consulo.project.Project;
import jakarta.annotation.Nonnull;

@ExtensionImpl
public class MissingDeprecatedAnnotationInspection extends BaseInspection {

@Override
@Nonnull
public String getDisplayName() {
return InspectionGadgetsLocalize.missingDeprecatedAnnotationDisplayName().get();
}

@Override
@Nonnull
protected String buildErrorString(Object... infos) {
return InspectionGadgetsLocalize.missingDeprecatedAnnotationProblemDescriptor().get();
}

@Override
public boolean runForWholeFile() {
return true;
}

@Override
protected InspectionGadgetsFix buildFix(Object... infos) {
return new MissingDeprecatedAnnotationFix();
}

private static class MissingDeprecatedAnnotationFix extends InspectionGadgetsFix {
@Nonnull
public String getName() {
return InspectionGadgetsLocalize.missingDeprecatedAnnotationAddQuickfix().get();
@Override
public LocalizeValue getDisplayName() {
return InspectionGadgetsLocalize.missingDeprecatedAnnotationDisplayName();
}

@Override
public void doFix(Project project, ProblemDescriptor descriptor) {
final PsiElement identifier = descriptor.getPsiElement();
final PsiModifierListOwner parent = (PsiModifierListOwner)identifier.getParent();
if (parent == null) {
return;
}
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
final PsiAnnotation annotation = factory.createAnnotationFromText("@java.lang.Deprecated", parent);
final PsiModifierList modifierList = parent.getModifierList();
if (modifierList == null) {
return;
}
modifierList.addAfter(annotation, null);
@Nonnull
protected String buildErrorString(Object... infos) {
return InspectionGadgetsLocalize.missingDeprecatedAnnotationProblemDescriptor().get();
}
}

@Override
public BaseInspectionVisitor buildVisitor() {
return new MissingDeprecatedAnnotationVisitor();
}

private static class MissingDeprecatedAnnotationVisitor extends BaseInspectionVisitor {

@Override
public void visitClass(@Nonnull PsiClass aClass) {
super.visitClass(aClass);
if (!PsiUtil.isLanguageLevel5OrHigher(aClass)) {
return;
}
if (!hasDeprecatedComment(aClass) || hasDeprecatedAnnotation(aClass)) {
return;
}
registerClassError(aClass);
public boolean runForWholeFile() {
return true;
}

@Override
public void visitMethod(@Nonnull PsiMethod method) {
if (!PsiUtil.isLanguageLevel5OrHigher(method)) {
return;
}
if (method.getNameIdentifier() == null) {
return;
}
if (!hasDeprecatedComment(method) || hasDeprecatedAnnotation(method)) {
return;
}
registerMethodError(method);
protected InspectionGadgetsFix buildFix(Object... infos) {
return new MissingDeprecatedAnnotationFix();
}

@Override
public void visitField(@Nonnull PsiField field) {
if (!PsiUtil.isLanguageLevel5OrHigher(field)) {
return;
}
if (!hasDeprecatedComment(field) || hasDeprecatedAnnotation(field)) {
return;
}
registerFieldError(field);
private static class MissingDeprecatedAnnotationFix extends InspectionGadgetsFix {
@Nonnull
@Override
public LocalizeValue getName() {
return InspectionGadgetsLocalize.missingDeprecatedAnnotationAddQuickfix();
}

@Override
public void doFix(Project project, ProblemDescriptor descriptor) {
final PsiElement identifier = descriptor.getPsiElement();
final PsiModifierListOwner parent = (PsiModifierListOwner) identifier.getParent();
if (parent == null) {
return;
}
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
final PsiAnnotation annotation = factory.createAnnotationFromText("@java.lang.Deprecated", parent);
final PsiModifierList modifierList = parent.getModifierList();
if (modifierList == null) {
return;
}
modifierList.addAfter(annotation, null);
}
}

private static boolean hasDeprecatedAnnotation(PsiModifierListOwner element) {
final PsiModifierList modifierList = element.getModifierList();
if (modifierList == null) {
return false;
}
final PsiAnnotation annotation = modifierList.findAnnotation(CommonClassNames.JAVA_LANG_DEPRECATED);
return annotation != null;
@Override
public BaseInspectionVisitor buildVisitor() {
return new MissingDeprecatedAnnotationVisitor();
}

private static boolean hasDeprecatedComment(PsiDocCommentOwner element) {
final PsiDocComment comment = element.getDocComment();
if (comment == null) {
return false;
}
final PsiDocTag deprecatedTag = comment.findTagByName("deprecated");
return deprecatedTag != null;
private static class MissingDeprecatedAnnotationVisitor extends BaseInspectionVisitor {

@Override
public void visitClass(@Nonnull PsiClass aClass) {
super.visitClass(aClass);
if (!PsiUtil.isLanguageLevel5OrHigher(aClass)) {
return;
}
if (!hasDeprecatedComment(aClass) || hasDeprecatedAnnotation(aClass)) {
return;
}
registerClassError(aClass);
}

@Override
public void visitMethod(@Nonnull PsiMethod method) {
if (!PsiUtil.isLanguageLevel5OrHigher(method)) {
return;
}
if (method.getNameIdentifier() == null) {
return;
}
if (!hasDeprecatedComment(method) || hasDeprecatedAnnotation(method)) {
return;
}
registerMethodError(method);
}

@Override
public void visitField(@Nonnull PsiField field) {
if (!PsiUtil.isLanguageLevel5OrHigher(field)) {
return;
}
if (!hasDeprecatedComment(field) || hasDeprecatedAnnotation(field)) {
return;
}
registerFieldError(field);
}

private static boolean hasDeprecatedAnnotation(PsiModifierListOwner element) {
final PsiModifierList modifierList = element.getModifierList();
if (modifierList == null) {
return false;
}
final PsiAnnotation annotation = modifierList.findAnnotation(CommonClassNames.JAVA_LANG_DEPRECATED);
return annotation != null;
}

private static boolean hasDeprecatedComment(PsiDocCommentOwner element) {
final PsiDocComment comment = element.getDocComment();
if (comment == null) {
return false;
}
final PsiDocTag deprecatedTag = comment.findTagByName("deprecated");
return deprecatedTag != null;
}
}
}
}
Loading
Loading