From aa28a03f61d6fb9061cbb7dea84de435b535e234 Mon Sep 17 00:00:00 2001 From: "Natalia.Ukhorskaya" Date: Fri, 19 Oct 2012 15:29:31 +0400 Subject: [PATCH] Mark deprecated items in ProjectView (class, function, property, class-object) #KT-2944 Fixed Mark deprecated classes in Project Tree --- .../jetbrains/jet/lang/psi/JetPsiUtil.java | 29 +++++++++++++++++++ .../elements/JetAnnotationElementType.java | 16 +++------- .../projectView/JetClassObjectTreeNode.java | 6 ++++ .../projectView/JetClassOrObjectTreeNode.java | 6 ++++ .../projectView/JetDeclarationTreeNode.java | 5 ++++ 5 files changed, 50 insertions(+), 12 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index d1a67912f5f..07d555b5daa 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -185,6 +185,35 @@ public class JetPsiUtil { return firstPart.child(name); } + @Nullable + public static Name getShortName(JetAnnotationEntry annotation) { + JetTypeReference typeReference = annotation.getTypeReference(); + assert typeReference != null : "Annotation entry hasn't typeReference " + annotation.getText(); + JetTypeElement typeElement = typeReference.getTypeElement(); + if (typeElement instanceof JetUserType) { + JetUserType userType = (JetUserType) typeElement; + String shortName = userType.getReferencedName(); + if (shortName != null) { + return Name.identifier(shortName); + } + } + return null; + } + + public static boolean isDeprecated(JetModifierListOwner owner) { + JetModifierList modifierList = owner.getModifierList(); + if (modifierList != null) { + List annotationEntries = modifierList.getAnnotationEntries(); + for (JetAnnotationEntry annotation : annotationEntries) { + Name shortName = getShortName(annotation); + if (KotlinBuiltIns.getInstance().getDeprecatedAnnotation().getName().equals(shortName)) { + return true; + } + } + } + return false; + } + @Nullable @IfNotParsed public static ImportPath getImportPath(JetImportDirective importDirective) { final JetExpression importedReference = importDirective.getImportedReference(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetAnnotationElementType.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetAnnotationElementType.java index 34a2ef316c4..8b173109bd0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetAnnotationElementType.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetAnnotationElementType.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.stubs.PsiJetAnnotationStub; import org.jetbrains.jet.lang.psi.stubs.impl.PsiJetAnnotationStubImpl; +import org.jetbrains.jet.lang.resolve.name.Name; import java.io.IOException; @@ -48,18 +49,9 @@ public class JetAnnotationElementType extends JetStubElementType return super.canRepresent(element) || canRepresentPsiElement(getValue(), element, getSettings()); } + + @Override + protected boolean isDeprecated() { + return JetPsiUtil.isDeprecated(getValue()); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/projectView/JetClassOrObjectTreeNode.java b/idea/src/org/jetbrains/jet/plugin/projectView/JetClassOrObjectTreeNode.java index 5a896c19430..959454b8de4 100644 --- a/idea/src/org/jetbrains/jet/plugin/projectView/JetClassOrObjectTreeNode.java +++ b/idea/src/org/jetbrains/jet/plugin/projectView/JetClassOrObjectTreeNode.java @@ -25,6 +25,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.plugin.JetIconProvider; import java.util.Collection; @@ -75,6 +76,11 @@ public class JetClassOrObjectTreeNode extends AbstractPsiBasedNode data.setPresentableText(text); } } + + @Override + protected boolean isDeprecated() { + return JetPsiUtil.isDeprecated(getValue()); + } }