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