Bug 574248: [*-Editor] Adapt quick assists Rename in File and variants
to command support
Change-Id: I793ac8cddaedb397aab89a27de6784ef66346bd5
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RLinkedNamesAssistProposal.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RLinkedNamesAssistProposal.java
index b1ec7d5..f2480bd 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RLinkedNamesAssistProposal.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/correction/RLinkedNamesAssistProposal.java
@@ -16,6 +16,8 @@
import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+import static org.eclipse.statet.ecommons.ui.actions.UIActions.NO_COMMAND_ID;
+
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.link.LinkedPositionGroup;
@@ -28,6 +30,7 @@
import org.eclipse.statet.jcommons.text.core.TextRegion;
import org.eclipse.statet.internal.r.ui.RUIMessages;
+import org.eclipse.statet.ltk.ui.LtkActions;
import org.eclipse.statet.ltk.ui.sourceediting.assist.AssistInvocationContext;
import org.eclipse.statet.ltk.ui.sourceediting.assist.LinkedNamesAssistProposal;
import org.eclipse.statet.r.core.model.RElementAccess;
@@ -37,7 +40,7 @@
@NonNullByDefault
-public class RLinkedNamesAssistProposal extends LinkedNamesAssistProposal {
+public class RLinkedNamesAssistProposal extends LinkedNamesAssistProposal<AssistInvocationContext> {
public static final int IN_FILE= 1;
@@ -55,28 +58,9 @@
public RLinkedNamesAssistProposal(final int mode,
final AssistInvocationContext invocationContext, final RElementAccess access) {
- super(invocationContext);
+ super(init(invocationContext, mode, false));
this.mode= mode;
this.region= null;
- switch (mode) {
- case IN_FILE:
- init(RUIMessages.Proposal_RenameInFile_label,
- RUIMessages.Proposal_RenameInFile_description,
- 90 );
- break;
- case IN_FILE_PRECEDING:
- init(RUIMessages.Proposal_RenameInFilePrecending_label,
- RUIMessages.Proposal_RenameInFilePrecending_description,
- 85 );
- break;
- case IN_FILE_FOLLOWING:
- init(RUIMessages.Proposal_RenameInFileFollowing_label,
- RUIMessages.Proposal_RenameInFileFollowing_description,
- 84 );
- break;
- default:
- throw new IllegalArgumentException();
- }
this.access= access;
this.isReplFName= checkReplFName();
}
@@ -84,20 +68,47 @@
public RLinkedNamesAssistProposal(final int mode,
final AssistInvocationContext invocationContext, final RElementAccess access,
final TextRegion region) {
- super(invocationContext);
+ super(init(invocationContext, mode, true));
this.mode= mode;
this.region= nonNullAssert(region);
+ this.access= access;
+ this.isReplFName= checkReplFName();
+ }
+
+ private static ProposalParameters<AssistInvocationContext> init(
+ final AssistInvocationContext invocationContext,
+ final int mode, final boolean withRegion) {
switch (mode) {
+ case IN_FILE:
+ return new ProposalParameters<>(invocationContext,
+ LtkActions.QUICK_ASSIST_RENAME_IN_FILE,
+ RUIMessages.Proposal_RenameInFile_label,
+ RUIMessages.Proposal_RenameInFile_description,
+ 90 );
+ case IN_FILE_PRECEDING:
+ return new ProposalParameters<>(invocationContext,
+ NO_COMMAND_ID,
+ RUIMessages.Proposal_RenameInFilePrecending_label,
+ RUIMessages.Proposal_RenameInFilePrecending_description,
+ 85 );
+ case IN_FILE_FOLLOWING:
+ return new ProposalParameters<>(invocationContext,
+ NO_COMMAND_ID,
+ RUIMessages.Proposal_RenameInFileFollowing_label,
+ RUIMessages.Proposal_RenameInFileFollowing_description,
+ 84 );
case IN_CHUNK:
- init(RUIMessages.Proposal_RenameInChunk_label,
+ if (!withRegion) {
+ throw new IllegalArgumentException();
+ }
+ return new ProposalParameters<>(invocationContext,
+ NO_COMMAND_ID,
+ RUIMessages.Proposal_RenameInChunk_label,
RUIMessages.Proposal_RenameInChunk_description,
89 );
- break;
default:
throw new IllegalArgumentException();
}
- this.access= access;
- this.isReplFName= checkReplFName();
}
private boolean checkReplFName() {
@@ -128,27 +139,27 @@
}
int idx= 0;
- { final RAstNode nameNode= nonNullAssert(this.access.getNameNode());
- idx= addPosition(group, document, RAsts.getElementNameRegion(nameNode), idx);
+ { final var nameNode= nonNullAssert(this.access.getNameNode());
+ idx= addPosition(group, document, nameNode, idx);
if (idx == 0) {
return;
}
}
if (this.mode == IN_FILE || this.mode == IN_FILE_FOLLOWING) {
for (int i= current + 1; i < allAccess.size(); i++) {
- final RAstNode nameNode= allAccess.get(i).getNameNode();
+ final var nameNode= allAccess.get(i).getNameNode();
if (nameNode != null) {
- idx= addPosition(group, document, RAsts.getElementNameRegion(nameNode), idx);
+ idx= addPosition(group, document, nameNode, idx);
}
}
}
else if (this.mode == IN_CHUNK) {
final int regionOffset= getChunkRegion().getEndOffset();
for (int i= current + 1; i < allAccess.size(); i++) {
- final RAstNode nameNode= allAccess.get(i).getNameNode();
+ final var nameNode= allAccess.get(i).getNameNode();
if (nameNode != null) {
if (regionOffset > nameNode.getStartOffset()) {
- idx= addPosition(group, document, RAsts.getElementNameRegion(nameNode), idx);
+ idx= addPosition(group, document, nameNode, idx);
}
else {
break;
@@ -158,19 +169,19 @@
}
if (this.mode == IN_FILE || this.mode == IN_FILE_PRECEDING) {
for (int i= 0; i < current; i++) {
- final RAstNode nameNode= allAccess.get(i).getNameNode();
+ final var nameNode= allAccess.get(i).getNameNode();
if (nameNode != null) {
- idx= addPosition(group, document, RAsts.getElementNameRegion(nameNode), idx);
+ idx= addPosition(group, document, nameNode, idx);
}
}
}
else if (this.mode == IN_CHUNK) {
final int regionOffset= getChunkRegion().getStartOffset();
for (int i= 0; i < current; i++) {
- final RAstNode nameNode= allAccess.get(i).getNameNode();
+ final var nameNode= allAccess.get(i).getNameNode();
if (nameNode != null) {
if (regionOffset <= nameNode.getStartOffset()) {
- idx= addPosition(group, document, RAsts.getElementNameRegion(nameNode), idx);
+ idx= addPosition(group, document, nameNode, idx);
}
}
}
@@ -178,9 +189,9 @@
}
- @Override
protected int addPosition(final LinkedPositionGroup group, final IDocument document,
- @Nullable TextRegion position, final int idx) throws BadLocationException {
+ final RAstNode nameNode, final int idx) throws BadLocationException {
+ TextRegion position= RAsts.getElementNameRegion(nameNode);
if (this.isReplFName && position != null
&& document.get(position.getStartOffset(), position.getLength())
.endsWith(RTerminal.S_ARROW_LEFT) ) {