Skip to content

Commit 61d4c77

Browse files
committed
some merge
1 parent 0d3a421 commit 61d4c77

14 files changed

Lines changed: 2798 additions & 2171 deletions

File tree

java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
import org.jetbrains.java.generate.GenerationUtil;
2929
import org.jetbrains.java.generate.exception.GenerateCodeException;
3030
import org.jetbrains.java.generate.template.TemplatesManager;
31+
import com.intellij.codeInsight.AnnotationTargetUtil;
32+
import com.intellij.codeInsight.AnnotationUtil;
3133
import com.intellij.codeInsight.ExceptionUtil;
34+
import com.intellij.codeInsight.NullableNotNullManager;
3235
import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils;
3336
import com.intellij.lang.ASTNode;
3437
import com.intellij.openapi.diagnostic.Logger;
@@ -37,6 +40,8 @@
3740
import com.intellij.openapi.editor.RangeMarker;
3841
import com.intellij.openapi.editor.ScrollType;
3942
import com.intellij.openapi.extensions.Extensions;
43+
import com.intellij.openapi.module.Module;
44+
import com.intellij.openapi.module.ModuleUtilCore;
4045
import com.intellij.openapi.project.Project;
4146
import com.intellij.openapi.util.Comparing;
4247
import com.intellij.openapi.util.Condition;
@@ -48,7 +53,6 @@
4853
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
4954
import com.intellij.psi.codeStyle.NameUtil;
5055
import com.intellij.psi.codeStyle.VariableKind;
51-
import com.intellij.psi.impl.PsiImplUtil;
5256
import com.intellij.psi.impl.light.LightTypeElement;
5357
import com.intellij.psi.impl.source.codeStyle.JavaCodeStyleManagerImpl;
5458
import com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl;
@@ -716,10 +720,16 @@ public static void copyOrReplaceModifierList(@NotNull PsiModifierListOwner sourc
716720

717721
if(sourceModifierList != null && targetModifierList != null)
718722
{
723+
final Module module = ModuleUtilCore.findModuleForPsiElement(targetModifierList);
724+
final GlobalSearchScope moduleScope = module != null ? GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module) : null;
725+
final Project project = targetModifierList.getProject();
726+
final JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
719727
JVMElementFactory factory = JVMElementFactories.requireFactory(targetParam.getLanguage(), targetParam.getProject());
720-
for(PsiAnnotation annotation : sourceModifierList.getAnnotations())
728+
for(PsiAnnotation annotation : AnnotationUtil.getAllAnnotations(sourceParam, false, null, false))
721729
{
722-
if(!PsiImplUtil.isTypeAnnotation(annotation))
730+
final String qualifiedName = annotation.getQualifiedName();
731+
if(qualifiedName != null && (moduleScope == null || facade.findClass(qualifiedName, moduleScope) != null) &&
732+
!AnnotationTargetUtil.isTypeAnnotation(annotation))
723733
{
724734
targetModifierList.add(factory.createAnnotationFromText(annotation.getText(), sourceParam));
725735
}
@@ -855,23 +865,21 @@ private static PsiMethod generatePrototype(@NotNull PsiField field, PsiClass psi
855865
}
856866
result = (PsiMethod) CodeStyleManager.getInstance(project).reformat(result);
857867

858-
PsiModifierListOwner listOwner = null;
868+
PsiModifierListOwner annotationTarget;
859869
if(isGetter)
860870
{
861-
listOwner = result;
871+
annotationTarget = result;
862872
}
863873
else
864874
{
865875
final PsiParameter[] parameters = result.getParameterList().getParameters();
866-
if(parameters.length == 1)
867-
{
868-
listOwner = parameters[0];
869-
}
876+
annotationTarget = parameters.length == 1 ? parameters[0] : null;
870877
}
871-
if(listOwner != null)
878+
if(annotationTarget != null)
872879
{
873-
PropertyUtil.annotateWithNullableStuff(field, listOwner);
880+
NullableNotNullManager.getInstance(project).copyNullableOrNotNullAnnotation(field, annotationTarget);
874881
}
882+
875883
return generatePrototype(field, result);
876884
}
877885

java-impl/src/com/intellij/codeInsight/generation/GenerationInfoBase.java

Lines changed: 44 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,56 +15,62 @@
1515
*/
1616
package com.intellij.codeInsight.generation;
1717

18+
import org.jetbrains.annotations.NotNull;
19+
import org.jetbrains.annotations.Nullable;
1820
import com.intellij.openapi.editor.Editor;
1921
import com.intellij.psi.JavaTokenType;
2022
import com.intellij.psi.PsiClass;
2123
import com.intellij.psi.PsiElement;
2224
import com.intellij.psi.PsiMember;
2325
import com.intellij.util.IncorrectOperationException;
24-
import org.jetbrains.annotations.NotNull;
25-
import org.jetbrains.annotations.Nullable;
2626

2727
/**
2828
* @author peter
2929
*/
30-
public abstract class GenerationInfoBase implements GenerationInfo {
31-
32-
@Override
33-
public abstract void insert(PsiClass aClass, PsiElement anchor, boolean before) throws IncorrectOperationException;
30+
public abstract class GenerationInfoBase implements GenerationInfo
31+
{
32+
@Override
33+
public abstract void insert(PsiClass aClass, PsiElement anchor, boolean before) throws IncorrectOperationException;
3434

35-
@Override
36-
public abstract PsiMember getPsiMember();
35+
@Override
36+
public abstract PsiMember getPsiMember();
3737

38-
/**
39-
* @param aClass
40-
* @param leaf leaf element. Is guaranteed to be a tree descendant of aClass.
41-
* @return the value that will be passed to the {@link #insert(com.intellij.psi.PsiClass, com.intellij.psi.PsiElement, boolean)} method later.
42-
*/
43-
@Override
44-
@Nullable
45-
public PsiElement findInsertionAnchor(@NotNull PsiClass aClass, @NotNull PsiElement leaf) {
46-
PsiElement element = leaf;
47-
while (element.getParent() != aClass) {
48-
element = element.getParent();
49-
}
38+
/**
39+
* @param aClass
40+
* @param leaf leaf element. Is guaranteed to be a tree descendant of aClass.
41+
* @return the value that will be passed to the {@link #insert(com.intellij.psi.PsiClass, com.intellij.psi.PsiElement, boolean)} method later.
42+
*/
43+
@Override
44+
@Nullable
45+
public PsiElement findInsertionAnchor(@NotNull PsiClass aClass, @NotNull PsiElement leaf)
46+
{
47+
PsiElement element = leaf;
48+
while(element.getParent() != aClass)
49+
{
50+
element = element.getParent();
51+
}
5052

51-
PsiElement lBrace = aClass.getLBrace();
52-
if (lBrace == null) {
53-
return null;
54-
}
55-
PsiElement rBrace = aClass.getRBrace();
56-
if (!GenerateMembersUtil.isChildInRange(element, lBrace.getNextSibling(), rBrace)) {
57-
return null;
58-
}
59-
PsiElement prev = leaf.getPrevSibling();
60-
if (prev != null && prev.getNode() != null && prev.getNode().getElementType() == JavaTokenType.END_OF_LINE_COMMENT) {
61-
element = leaf.getNextSibling();
62-
}
63-
return element;
64-
}
53+
PsiElement lBrace = aClass.getLBrace();
54+
if(lBrace == null)
55+
{
56+
return null;
57+
}
58+
PsiElement rBrace = aClass.getRBrace();
59+
if(!GenerateMembersUtil.isChildInRange(element, lBrace.getNextSibling(), rBrace))
60+
{
61+
return null;
62+
}
63+
PsiElement prev = leaf.getPrevSibling();
64+
if(prev != null && prev.getNode() != null && prev.getNode().getElementType() == JavaTokenType.END_OF_LINE_COMMENT)
65+
{
66+
element = leaf.getNextSibling();
67+
}
68+
return element;
69+
}
6570

66-
@Override
67-
public void positionCaret(Editor editor, boolean toEditMethodBody) {
68-
GenerateMembersUtil.positionCaret(editor, getPsiMember(), toEditMethodBody);
69-
}
71+
@Override
72+
public void positionCaret(Editor editor, boolean toEditMethodBody)
73+
{
74+
GenerateMembersUtil.positionCaret(editor, getPsiMember(), toEditMethodBody);
75+
}
7076
}

java-impl/src/com/intellij/codeInsight/generation/PsiGenerationInfo.java

Lines changed: 85 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -15,78 +15,100 @@
1515
*/
1616
package com.intellij.codeInsight.generation;
1717

18+
import org.jetbrains.annotations.NotNull;
19+
import org.jetbrains.annotations.Nullable;
1820
import com.intellij.openapi.diagnostic.Logger;
19-
import com.intellij.psi.*;
21+
import com.intellij.psi.PsiAnnotation;
22+
import com.intellij.psi.PsiClass;
23+
import com.intellij.psi.PsiElement;
24+
import com.intellij.psi.PsiField;
25+
import com.intellij.psi.PsiMember;
26+
import com.intellij.psi.PsiMethod;
27+
import com.intellij.psi.PsiModifierList;
2028
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
2129
import com.intellij.util.IncorrectOperationException;
22-
import org.jetbrains.annotations.NotNull;
23-
import org.jetbrains.annotations.Nullable;
2430

2531
/**
2632
* @author peter
2733
*/
28-
public class PsiGenerationInfo<T extends PsiMember> extends GenerationInfoBase implements GenerationInfo {
29-
private T myMember;
30-
private final boolean myMergeIfExists;
31-
private static final Logger LOG = Logger.getInstance("#" + PsiGenerationInfo.class.getName());
34+
public class PsiGenerationInfo<T extends PsiMember> extends GenerationInfoBase implements GenerationInfo
35+
{
36+
private T myMember;
37+
private final boolean myMergeIfExists;
38+
private static final Logger LOG = Logger.getInstance("#" + PsiGenerationInfo.class.getName());
3239

33-
public PsiGenerationInfo(@NotNull final T member) {
34-
myMember = member;
35-
myMergeIfExists = true;
36-
}
40+
public PsiGenerationInfo(@NotNull final T member)
41+
{
42+
myMember = member;
43+
myMergeIfExists = true;
44+
}
3745

38-
public PsiGenerationInfo(@NotNull T member, boolean mergeIfExists) {
39-
myMember = member;
40-
myMergeIfExists = mergeIfExists;
41-
}
46+
public PsiGenerationInfo(@NotNull T member, boolean mergeIfExists)
47+
{
48+
myMember = member;
49+
myMergeIfExists = mergeIfExists;
50+
}
4251

43-
@Override
44-
public final T getPsiMember() {
45-
return myMember;
46-
}
52+
@Override
53+
public final T getPsiMember()
54+
{
55+
return myMember;
56+
}
4757

48-
@Override
49-
public void insert(@NotNull final PsiClass aClass, @Nullable PsiElement anchor, boolean before) throws IncorrectOperationException {
50-
final PsiMember existingMember;
51-
if (myMember instanceof PsiField) {
52-
existingMember = aClass.findFieldByName(myMember.getName(), false);
53-
}
54-
else if (myMember instanceof PsiMethod) {
55-
existingMember = aClass.findMethodBySignature((PsiMethod)myMember, false);
56-
}
57-
else {
58-
existingMember = null;
59-
}
60-
if (existingMember == null || !myMergeIfExists) {
61-
PsiElement newMember = GenerateMembersUtil.insert(aClass, myMember, anchor, before);
62-
myMember = (T)JavaCodeStyleManager.getInstance(aClass.getProject()).shortenClassReferences(newMember);
63-
LOG.assertTrue(myMember.isValid(), myMember);
64-
}
65-
else {
66-
final PsiModifierList modifierList = myMember.getModifierList();
67-
final PsiModifierList existingModifierList = existingMember.getModifierList();
68-
if (modifierList != null && existingModifierList != null) {
69-
final PsiAnnotation[] psiAnnotations = modifierList.getAnnotations();
70-
PsiElement annoAnchor = existingModifierList.getAnnotations().length > 0 ? existingModifierList.getAnnotations()[0] : existingModifierList.getFirstChild();
71-
if (psiAnnotations.length > 0) {
72-
for (PsiAnnotation annotation : psiAnnotations) {
73-
final PsiAnnotation existingAnno = existingModifierList.findAnnotation(annotation.getQualifiedName());
74-
if (existingAnno != null){
75-
annoAnchor = existingAnno.replace(annotation);
76-
}
77-
else {
78-
existingModifierList.addBefore(annotation, annoAnchor);
79-
}
80-
}
81-
}
82-
}
83-
myMember = (T)existingMember;
84-
if (!myMember.isValid()) {
85-
LOG.error("invalid member: " + myMember +
86-
" existing member: " + existingMember.isValid() +
87-
" self modified list: " + modifierList +
88-
" existing modified list: " + existingModifierList);
89-
}
90-
}
91-
}
58+
@Override
59+
public void insert(@NotNull final PsiClass aClass, @Nullable PsiElement anchor, boolean before) throws IncorrectOperationException
60+
{
61+
final PsiMember existingMember;
62+
if(myMember instanceof PsiField)
63+
{
64+
existingMember = aClass.findFieldByName(myMember.getName(), false);
65+
}
66+
else if(myMember instanceof PsiMethod)
67+
{
68+
existingMember = aClass.findMethodBySignature((PsiMethod) myMember, false);
69+
}
70+
else
71+
{
72+
existingMember = null;
73+
}
74+
if(existingMember == null || !myMergeIfExists)
75+
{
76+
PsiElement newMember = GenerateMembersUtil.insert(aClass, myMember, anchor, before);
77+
myMember = (T) JavaCodeStyleManager.getInstance(aClass.getProject()).shortenClassReferences(newMember);
78+
LOG.assertTrue(myMember.isValid(), myMember);
79+
}
80+
else
81+
{
82+
final PsiModifierList modifierList = myMember.getModifierList();
83+
final PsiModifierList existingModifierList = existingMember.getModifierList();
84+
if(modifierList != null && existingModifierList != null)
85+
{
86+
final PsiAnnotation[] psiAnnotations = modifierList.getAnnotations();
87+
PsiElement annoAnchor = existingModifierList.getAnnotations().length > 0 ? existingModifierList.getAnnotations()[0] : existingModifierList.getFirstChild();
88+
if(psiAnnotations.length > 0)
89+
{
90+
for(PsiAnnotation annotation : psiAnnotations)
91+
{
92+
final PsiAnnotation existingAnno = existingModifierList.findAnnotation(annotation.getQualifiedName());
93+
if(existingAnno != null)
94+
{
95+
annoAnchor = existingAnno.replace(annotation);
96+
}
97+
else
98+
{
99+
existingModifierList.addBefore(annotation, annoAnchor);
100+
}
101+
}
102+
}
103+
}
104+
myMember = (T) existingMember;
105+
if(!myMember.isValid())
106+
{
107+
LOG.error("invalid member: " + myMember +
108+
" existing member: " + existingMember.isValid() +
109+
" self modified list: " + modifierList +
110+
" existing modified list: " + existingModifierList);
111+
}
112+
}
113+
}
92114
}

0 commit comments

Comments
 (0)