do not insert annotations when classes are not accessible

This commit is contained in:
anna
2012-04-18 15:04:00 +02:00
parent 5c9818d3ca
commit 3fbf561d6a
6 changed files with 40 additions and 5 deletions

View File

@@ -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)));
}

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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};
}

View File

@@ -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>
}
}

View File

@@ -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 {}