mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
do not include unknown annotations in override (IDEA-109422)
This commit is contained in:
@@ -23,6 +23,7 @@ import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.RangeMarker;
|
||||
import com.intellij.openapi.editor.ScrollType;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -31,6 +32,7 @@ import com.intellij.psi.codeStyle.*;
|
||||
import com.intellij.psi.impl.light.LightTypeElement;
|
||||
import com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
@@ -512,7 +514,7 @@ public class GenerateMembersUtil {
|
||||
PsiModifierList targetModifierList = targetParam.getModifierList();
|
||||
if (sourceModifierList != null && targetModifierList != null) {
|
||||
if (sourceParam.getLanguage() == targetParam.getLanguage()) {
|
||||
targetModifierList.replace(sourceModifierList);
|
||||
targetModifierList = (PsiModifierList)targetModifierList.replace(sourceModifierList);
|
||||
}
|
||||
else {
|
||||
JVMElementFactory factory = JVMElementFactories.requireFactory(targetParam.getLanguage(), targetParam.getProject());
|
||||
@@ -523,6 +525,30 @@ public class GenerateMembersUtil {
|
||||
targetModifierList.setModifierProperty(m, sourceParam.hasModifierProperty(m));
|
||||
}
|
||||
}
|
||||
processAnnotations(sourceModifierList.getProject(), targetModifierList, targetModifierList.getResolveScope());
|
||||
}
|
||||
}
|
||||
|
||||
private static void processAnnotations(Project project, PsiModifierList modifierList, GlobalSearchScope moduleScope) {
|
||||
final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
|
||||
final Set<String> toRemove = new HashSet<String>();
|
||||
for (PsiAnnotation annotation : modifierList.getAnnotations()) {
|
||||
final String qualifiedName = annotation.getQualifiedName();
|
||||
if (qualifiedName != null) {
|
||||
for (OverrideImplementsAnnotationsHandler handler : Extensions.getExtensions(OverrideImplementsAnnotationsHandler.EP_NAME)) {
|
||||
final String[] annotations2Remove = handler.annotationsToRemove(project, qualifiedName);
|
||||
Collections.addAll(toRemove, annotations2Remove);
|
||||
if (moduleScope != null && psiFacade.findClass(qualifiedName, moduleScope) == null) {
|
||||
toRemove.add(qualifiedName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (String fqn : toRemove) {
|
||||
final PsiAnnotation psiAnnotation = modifierList.findAnnotation(fqn);
|
||||
if (psiAnnotation != null) {
|
||||
psiAnnotation.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
interface A {
|
||||
void f(@Unknown1 @Unknown2 String s, @Unknown3 s3);
|
||||
}
|
||||
class B implements A {
|
||||
@Override
|
||||
public void f(String s) {
|
||||
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
interface A {
|
||||
void f(@Unknown1 @Unknown2 String s, @Unknown3 s3);
|
||||
}
|
||||
class B implements A {
|
||||
<caret>
|
||||
}
|
||||
@@ -70,6 +70,7 @@ public class OverrideImplementTest extends LightCodeInsightTestCase {
|
||||
public void testImplementExtensionMethods() { doTest8(false, true); }
|
||||
public void testOverrideExtensionMethods() { doTest8(false, false); }
|
||||
public void testDoNotImplementExtensionMethods() { doTest8(false, true); }
|
||||
public void testSkipUnknownAnnotations() { doTest8(false, true); }
|
||||
|
||||
|
||||
public void testOverrideInInterface() { doTest8(false, false); }
|
||||
|
||||
Reference in New Issue
Block a user