From 50bcecaaf84cff5a80f0b28bab3a5b7e58a9dbe1 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 18 May 2016 19:41:50 +0200 Subject: [PATCH] IDEA-156098 `@Deprecated` external annotation on method does not affect editor --- .../AddDeprecationAnnotationIntention.java | 3 +- .../com/intellij/psi/impl/PsiImplUtil.java | 4 +-- .../psi/impl/compiled/ClsMemberImpl.java | 6 ++-- .../psi/impl/compiled/ClsMethodImpl.java | 2 +- .../psi/impl/java/stubs/PsiClassStub.java | 4 +-- .../psi/impl/java/stubs/PsiFieldStub.java | 4 +-- .../psi/impl/java/stubs/PsiMemberStub.java | 28 +++++++++++++++++++ .../psi/impl/java/stubs/PsiMethodStub.java | 4 +-- 8 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiMemberStub.java diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationIntention.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationIntention.java index b106d49b9c7b..788997a77dd9 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationIntention.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationIntention.java @@ -25,6 +25,7 @@ package com.intellij.codeInsight.intention.impl; import com.intellij.codeInsight.intention.LowPriorityAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; +import com.intellij.psi.CommonClassNames; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; @@ -32,6 +33,6 @@ public class AddDeprecationAnnotationIntention extends AddAnnotationIntention im @NotNull @Override public Pair getAnnotations(@NotNull Project project) { - return Pair.create("java.lang.annotation.Deprecated", ArrayUtil.EMPTY_STRING_ARRAY); + return Pair.create(CommonClassNames.JAVA_LANG_DEPRECATED, ArrayUtil.EMPTY_STRING_ARRAY); } } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java index fe310d433546..d9f802ada99e 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java @@ -16,6 +16,7 @@ package com.intellij.psi.impl; import com.intellij.codeInsight.AnnotationTargetUtil; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.lang.ASTNode; import com.intellij.lang.FileASTNode; import com.intellij.openapi.application.ApplicationManager; @@ -469,8 +470,7 @@ public class PsiImplUtil { } public static boolean isDeprecatedByAnnotation(@NotNull PsiModifierListOwner owner) { - PsiModifierList modifierList = owner.getModifierList(); - return modifierList != null && modifierList.findAnnotation("java.lang.Deprecated") != null; + return AnnotationUtil.findAnnotation(owner, CommonClassNames.JAVA_LANG_DEPRECATED) != null; } public static boolean isDeprecatedByDocTag(@NotNull PsiDocCommentOwner owner) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsMemberImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsMemberImpl.java index c5f072c2a53e..c4f7e9463152 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsMemberImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsMemberImpl.java @@ -22,18 +22,18 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiIdentifier; import com.intellij.psi.PsiNameIdentifierOwner; import com.intellij.psi.impl.PsiImplUtil; +import com.intellij.psi.impl.java.stubs.PsiMemberStub; import com.intellij.psi.javadoc.PsiDocComment; -import com.intellij.psi.stubs.NamedStub; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; -public abstract class ClsMemberImpl extends ClsRepositoryPsiElement implements PsiDocCommentOwner, PsiNameIdentifierOwner { +public abstract class ClsMemberImpl extends ClsRepositoryPsiElement implements PsiDocCommentOwner, PsiNameIdentifierOwner { private final NotNullLazyValue myDocComment; private final NotNullLazyValue myNameIdentifier; protected ClsMemberImpl(T stub) { super(stub); - myDocComment = !isDeprecated() ? null : new AtomicNotNullLazyValue() { + myDocComment = !stub.isDeprecated() ? null : new AtomicNotNullLazyValue() { @NotNull @Override protected PsiDocComment compute() { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsMethodImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsMethodImpl.java index 4b049486b643..84157c5dcdf0 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsMethodImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsMethodImpl.java @@ -172,7 +172,7 @@ public class ClsMethodImpl extends ClsMemberImpl implements PsiAn @Override public boolean isDeprecated() { - return getStub().isDeprecated(); + return getStub().isDeprecated() || PsiImplUtil.isDeprecatedByAnnotation(this); } @Override diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiClassStub.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiClassStub.java index 0e1aa2fef94a..0803c882bb0b 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiClassStub.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiClassStub.java @@ -21,11 +21,10 @@ package com.intellij.psi.impl.java.stubs; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiClass; -import com.intellij.psi.stubs.NamedStub; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; -public interface PsiClassStub extends NamedStub { +public interface PsiClassStub extends PsiMemberStub { @NonNls @Nullable String getQualifiedName(); @@ -34,7 +33,6 @@ public interface PsiClassStub extends NamedStub { @Nullable String getBaseClassReferenceText(); - boolean isDeprecated(); boolean hasDeprecatedAnnotation(); boolean isInterface(); boolean isEnum(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiFieldStub.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiFieldStub.java index 423c1a93155c..df29231cbd05 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiFieldStub.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiFieldStub.java @@ -17,20 +17,18 @@ package com.intellij.psi.impl.java.stubs; import com.intellij.psi.PsiField; import com.intellij.psi.impl.cache.TypeInfo; -import com.intellij.psi.stubs.NamedStub; import org.jetbrains.annotations.NotNull; /** * @author max */ -public interface PsiFieldStub extends NamedStub { +public interface PsiFieldStub extends PsiMemberStub { String INITIALIZER_TOO_LONG = ";INITIALIZER_TOO_LONG;"; String INITIALIZER_NOT_STORED = ";INITIALIZER_NOT_STORED;"; @NotNull TypeInfo getType(boolean doResolve); String getInitializerText(); boolean isEnumConstant(); - boolean isDeprecated(); boolean hasDeprecatedAnnotation(); boolean hasDocComment(); } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiMemberStub.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiMemberStub.java new file mode 100644 index 000000000000..d443978b258f --- /dev/null +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiMemberStub.java @@ -0,0 +1,28 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.psi.impl.java.stubs; + +import com.intellij.psi.PsiMember; +import com.intellij.psi.PsiNamedElement; +import com.intellij.psi.stubs.NamedStub; + +/** + * @author peter + */ +public interface PsiMemberStub extends NamedStub { + boolean isDeprecated(); + +} diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiMethodStub.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiMethodStub.java index a82b8de0285a..d6ce70294030 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiMethodStub.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiMethodStub.java @@ -18,14 +18,13 @@ package com.intellij.psi.impl.java.stubs; import com.intellij.psi.PsiMethod; import com.intellij.psi.impl.cache.TypeInfo; -import com.intellij.psi.stubs.NamedStub; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author max */ -public interface PsiMethodStub extends NamedStub { +public interface PsiMethodStub extends PsiMemberStub { boolean isConstructor(); boolean isVarArgs(); boolean isAnnotationMethod(); @@ -33,7 +32,6 @@ public interface PsiMethodStub extends NamedStub { @Nullable String getDefaultValueText(); @NotNull TypeInfo getReturnTypeText(boolean doResolve); - boolean isDeprecated(); boolean hasDeprecatedAnnotation(); boolean hasDocComment();