mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
do not insert annotations when classes are not accessible
This commit is contained in:
@@ -182,7 +182,7 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
|
||||
PsiSubstitutor substitutor = TypeConversionUtil.getSuperClassSubstitutor(superClass, aClass, PsiSubstitutor.EMPTY);
|
||||
for (PsiMethod baseConstructor : baseConstructors) {
|
||||
if (substitutor != PsiSubstitutor.EMPTY) {
|
||||
baseConstructor = GenerateMembersUtil.substituteGenericMethod(baseConstructor, substitutor);
|
||||
baseConstructor = GenerateMembersUtil.substituteGenericMethod(baseConstructor, substitutor, aClass);
|
||||
}
|
||||
constructors.add(new PsiGenerationInfo(generateConstructorPrototype(aClass, baseConstructor, myCopyJavadoc, fields)));
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.ScrollType;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -31,6 +33,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
@@ -220,6 +223,12 @@ public class GenerateMembersUtil {
|
||||
}
|
||||
|
||||
public static PsiMethod substituteGenericMethod(PsiMethod method, final PsiSubstitutor substitutor) {
|
||||
return substituteGenericMethod(method, substitutor, null);
|
||||
}
|
||||
|
||||
public static PsiMethod substituteGenericMethod(PsiMethod method,
|
||||
final PsiSubstitutor substitutor,
|
||||
final PsiElement target) {
|
||||
Project project = method.getProject();
|
||||
final PsiElementFactory factory = JavaPsiFacade.getInstance(method.getProject()).getElementFactory();
|
||||
|
||||
@@ -244,6 +253,9 @@ public class GenerateMembersUtil {
|
||||
newMethod.addAfter(docComment, null);
|
||||
}
|
||||
|
||||
final Module module = target != null ? ModuleUtil.findModuleForPsiElement(target) : null;
|
||||
final GlobalSearchScope moduleScope = module != null ? GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module) : null;
|
||||
|
||||
PsiParameter[] parameters = method.getParameterList().getParameters();
|
||||
JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(project);
|
||||
Map<PsiType,Pair<String,Integer>> m = new HashMap<PsiType, Pair<String,Integer>>();
|
||||
@@ -283,7 +295,7 @@ public class GenerateMembersUtil {
|
||||
if (parameter.getLanguage() == JavaLanguage.INSTANCE) {
|
||||
PsiModifierList modifierList = newParameter.getModifierList();
|
||||
modifierList = (PsiModifierList)modifierList.replace(parameter.getModifierList());
|
||||
processAnnotations(project, modifierList);
|
||||
processAnnotations(project, modifierList, moduleScope);
|
||||
}
|
||||
newMethod.getParameterList().add(newParameter);
|
||||
}
|
||||
@@ -316,13 +328,17 @@ public class GenerateMembersUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static void processAnnotations(Project project, PsiModifierList modifierList) {
|
||||
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();
|
||||
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) {
|
||||
|
||||
@@ -262,7 +262,7 @@ public class OverrideImplementUtil {
|
||||
}
|
||||
}
|
||||
if (results.isEmpty()) {
|
||||
PsiMethod method1 = GenerateMembersUtil.substituteGenericMethod(method, substitutor);
|
||||
PsiMethod method1 = GenerateMembersUtil.substituteGenericMethod(method, substitutor, aClass);
|
||||
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(method.getProject()).getElementFactory();
|
||||
PsiMethod result = (PsiMethod)factory.createClass("Dummy").add(method1);
|
||||
|
||||
@@ -24,7 +24,6 @@ import com.intellij.codeInsight.AnnotationUtil;
|
||||
import com.intellij.codeInsight.NullableNotNullManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.JDOMExternalizableStringList;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -45,6 +44,7 @@ public class OverrideImplementsAnnotationsHandlerImpl implements OverrideImpleme
|
||||
if (manager.getNotNulls().contains(fqName)) {
|
||||
return ArrayUtil.toStringArray(manager.getNullables());
|
||||
}
|
||||
|
||||
if (Comparing.strEqual(fqName, AnnotationUtil.NLS)){
|
||||
return new String[]{AnnotationUtil.NON_NLS};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
// "Implement method 'foo'" "true"
|
||||
abstract class Test {
|
||||
public abstract void foo(@org.jetbrains.annotations.Nullable String a);
|
||||
}
|
||||
|
||||
class TImple extends Test {
|
||||
@Override
|
||||
public void foo(@Nullable String a) {
|
||||
<selection>//To change body of implemented methods use File | Settings | File Templates.</selection>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// "Implement method 'foo'" "true"
|
||||
abstract class Test {
|
||||
public abstract void f<caret>oo(@org.jetbrains.annotations.Nullable String a);
|
||||
}
|
||||
|
||||
class TImple extends Test {}
|
||||
Reference in New Issue
Block a user