CommentTracker: support removal of reference qualifier; used in AddSingleMemberStaticImportAction

This commit is contained in:
Tagir Valeev
2018-01-18 12:00:24 +07:00
parent 32e4a691f1
commit 44585d34d9
5 changed files with 54 additions and 8 deletions
@@ -87,10 +87,7 @@ public class CommentTracker {
* @param element element to delete
*/
public void delete(@NotNull PsiElement element) {
if (element instanceof PsiExpression && element.getParent() instanceof PsiExpressionStatement) {
element = element.getParent();
}
grabComments(element);
grabCommentsOnDelete(element);
element.delete();
}
@@ -114,7 +111,7 @@ public class CommentTracker {
* @param element element to delete
*/
public void deleteAndRestoreComments(@NotNull PsiElement element) {
grabComments(element);
grabCommentsOnDelete(element);
insertCommentsBefore(element instanceof PsiVariable ? element.getParent() : element);
element.delete();
}
@@ -264,6 +261,25 @@ public class CommentTracker {
return ignoredParents.stream().anyMatch(p -> PsiTreeUtil.isAncestor(p, comment, false));
}
private void grabCommentsOnDelete(PsiElement element) {
if (element instanceof PsiExpression && element.getParent() instanceof PsiExpressionStatement) {
element = element.getParent();
}
if (element.getParent() instanceof PsiJavaCodeReferenceElement) {
PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)element.getParent();
if (element == ref.getQualifier()) {
for (PsiElement child : ref.getChildren()) {
if(child.textMatches(".")) {
break;
}
grabComments(child);
}
return;
}
}
grabComments(element);
}
private void grabComments(PsiElement element) {
checkState();
for (PsiComment comment : PsiTreeUtil.collectElementsOfType(element, PsiComment.class)) {