mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix for 126871, invalid auto-activation of content-assist after ':' and '>'.
This commit is contained in:
parent
ebe2158c23
commit
ba7fc92b2e
5 changed files with 89 additions and 10 deletions
|
@ -7,6 +7,7 @@
|
|||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
* Markus Schorn (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
|
||||
/*
|
||||
|
@ -174,7 +175,7 @@ public class ContentAssistTests extends BaseUITestCase {
|
|||
|
||||
String contentType = editor.getViewer().getDocument().getContentType(offset);
|
||||
ContentAssistant assistant = new ContentAssistant();
|
||||
CContentAssistProcessor processor = new CContentAssistProcessor(editor, assistant, contentType);
|
||||
CContentAssistProcessor processor = new CContentAssistProcessor(editor, editor.getViewer(), assistant, contentType);
|
||||
return processor.computeCompletionProposals(editor.getViewer(), offset);
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
* IBM Rational Software - Initial API and implementation
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
* Bryan Wilkinson (QNX)
|
||||
* Markus Schorn (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.ui.tests.text.contentassist2;
|
||||
|
||||
|
@ -102,7 +103,7 @@ public abstract class AbstractContentAssistTest extends BaseUITestCase {
|
|||
ISourceViewer sourceViewer= EditorTestHelper.getSourceViewer((AbstractTextEditor)fEditor);
|
||||
String contentType = sourceViewer.getDocument().getContentType(offset);
|
||||
ContentAssistant assistant = new ContentAssistant();
|
||||
CContentAssistProcessor processor = new CContentAssistProcessor(fEditor, assistant, contentType);
|
||||
CContentAssistProcessor processor = new CContentAssistProcessor(fEditor, sourceViewer, assistant, contentType);
|
||||
long startTime= System.currentTimeMillis();
|
||||
Object[] results = isCompletion
|
||||
? (Object[]) processor.computeCompletionProposals(sourceViewer, offset)
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
* QNX Software System
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
* Sergey Prigogin, Google
|
||||
* Markus Schorn (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text;
|
||||
|
||||
|
@ -357,19 +358,19 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
|||
|
||||
assistant.setRestoreCompletionProposalSize(getSettings("completion_proposal_size")); //$NON-NLS-1$
|
||||
|
||||
IContentAssistProcessor processor = new CContentAssistProcessor(getEditor(), assistant, IDocument.DEFAULT_CONTENT_TYPE);
|
||||
IContentAssistProcessor processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, IDocument.DEFAULT_CONTENT_TYPE);
|
||||
assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE);
|
||||
|
||||
processor = new CContentAssistProcessor(getEditor(), assistant, ICPartitions.C_MULTI_LINE_COMMENT);
|
||||
processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, ICPartitions.C_MULTI_LINE_COMMENT);
|
||||
assistant.setContentAssistProcessor(processor, ICPartitions.C_MULTI_LINE_COMMENT);
|
||||
|
||||
processor = new CContentAssistProcessor(getEditor(), assistant, ICPartitions.C_SINGLE_LINE_COMMENT);
|
||||
processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, ICPartitions.C_SINGLE_LINE_COMMENT);
|
||||
assistant.setContentAssistProcessor(processor, ICPartitions.C_SINGLE_LINE_COMMENT);
|
||||
|
||||
processor = new CContentAssistProcessor(getEditor(), assistant, ICPartitions.C_STRING);
|
||||
processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, ICPartitions.C_STRING);
|
||||
assistant.setContentAssistProcessor(processor, ICPartitions.C_STRING);
|
||||
|
||||
processor = new CContentAssistProcessor(getEditor(), assistant, ICPartitions.C_PREPROCESSOR);
|
||||
processor = new CContentAssistProcessor(getEditor(), sourceViewer, assistant, ICPartitions.C_PREPROCESSOR);
|
||||
assistant.setContentAssistProcessor(processor, ICPartitions.C_PREPROCESSOR);
|
||||
|
||||
ContentAssistPreference.configure(assistant, fPreferenceStore);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
* Bryan Wilkinson (QNX)
|
||||
* Markus Schorn (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
|
@ -20,12 +21,14 @@ import org.eclipse.core.runtime.CoreException;
|
|||
import org.eclipse.core.runtime.IConfigurationElement;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.InvalidRegistryObjectException;
|
||||
import org.eclipse.jface.text.BadLocationException;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
import org.eclipse.jface.text.ITextViewer;
|
||||
import org.eclipse.jface.text.contentassist.ContentAssistant;
|
||||
import org.eclipse.jface.text.contentassist.ICompletionProposal;
|
||||
import org.eclipse.jface.text.contentassist.IContextInformation;
|
||||
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
|
||||
import org.eclipse.jface.text.source.ISourceViewer;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.ui.IEditorPart;
|
||||
|
@ -120,12 +123,22 @@ public class CContentAssistProcessor extends ContentAssistProcessor {
|
|||
}
|
||||
|
||||
|
||||
private static final int IDX_AFTERDASH = 0;
|
||||
private static final int IDX_AFTERCOLON = 1;
|
||||
private static final int IDX_AFTEROTHER = 2;
|
||||
private static final int IDX_ALL = 3;
|
||||
|
||||
|
||||
|
||||
private IContextInformationValidator fValidator;
|
||||
private final IEditorPart fEditor;
|
||||
private char[][] fCompletionAutoActivationCharacters;
|
||||
private ISourceViewer fViewer;
|
||||
|
||||
public CContentAssistProcessor(IEditorPart editor, ContentAssistant assistant, String partition) {
|
||||
public CContentAssistProcessor(IEditorPart editor, ISourceViewer viewer, ContentAssistant assistant, String partition) {
|
||||
super(assistant, partition);
|
||||
fEditor= editor;
|
||||
fViewer= viewer;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -205,5 +218,67 @@ public class CContentAssistProcessor extends ContentAssistProcessor {
|
|||
protected ContentAssistInvocationContext createContext(ITextViewer viewer, int offset, boolean isCompletion) {
|
||||
return new CContentAssistInvocationContext(viewer, offset, fEditor, isCompletion);
|
||||
}
|
||||
|
||||
public void setCompletionProposalAutoActivationCharacters(char[] activationSet) {
|
||||
if (activationSet == null) {
|
||||
fCompletionAutoActivationCharacters= null;
|
||||
}
|
||||
else {
|
||||
final int len= activationSet.length;
|
||||
StringBuffer afterDash= new StringBuffer(len);
|
||||
StringBuffer afterColon= new StringBuffer(len);
|
||||
StringBuffer afterOther= new StringBuffer(len);
|
||||
for (int i = 0; i < activationSet.length; i++) {
|
||||
final char c = activationSet[i];
|
||||
switch(c) {
|
||||
case ':':
|
||||
afterColon.append(c);
|
||||
break;
|
||||
case '>':
|
||||
afterDash.append(c);
|
||||
break;
|
||||
default:
|
||||
afterDash.append(c);
|
||||
afterColon.append(c);
|
||||
afterOther.append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fCompletionAutoActivationCharacters= new char[4][];
|
||||
fCompletionAutoActivationCharacters[IDX_AFTERDASH]= afterDash.toString().toCharArray();
|
||||
fCompletionAutoActivationCharacters[IDX_AFTERCOLON]= afterColon.toString().toCharArray();
|
||||
fCompletionAutoActivationCharacters[IDX_AFTEROTHER]= afterOther.toString().toCharArray();
|
||||
fCompletionAutoActivationCharacters[IDX_ALL]= activationSet;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public char[] getCompletionProposalAutoActivationCharacters() {
|
||||
if (fCompletionAutoActivationCharacters == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (fViewer != null) {
|
||||
char prevChar= 0;
|
||||
try {
|
||||
final IDocument doc= fViewer.getDocument();
|
||||
if (doc != null) {
|
||||
prevChar= doc.getChar(fViewer.getSelectedRange().x-1);
|
||||
}
|
||||
}
|
||||
catch (BadLocationException e) {
|
||||
// beginning of document.
|
||||
}
|
||||
switch (prevChar) {
|
||||
case ':':
|
||||
return fCompletionAutoActivationCharacters[IDX_AFTERCOLON];
|
||||
case '-':
|
||||
return fCompletionAutoActivationCharacters[IDX_AFTERDASH];
|
||||
default:
|
||||
return fCompletionAutoActivationCharacters[IDX_AFTEROTHER];
|
||||
}
|
||||
}
|
||||
return fCompletionAutoActivationCharacters[IDX_ALL];
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
* Bryan Wilkinson (QNX)
|
||||
* Markus Schorn (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.text.contentassist;
|
||||
|
||||
|
@ -333,7 +334,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
|
|||
*
|
||||
* @param activationSet the activation set
|
||||
*/
|
||||
public final void setCompletionProposalAutoActivationCharacters(char[] activationSet) {
|
||||
public void setCompletionProposalAutoActivationCharacters(char[] activationSet) {
|
||||
fCompletionAutoActivationCharacters= activationSet;
|
||||
}
|
||||
|
||||
|
@ -341,7 +342,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
|
|||
/*
|
||||
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
|
||||
*/
|
||||
public final char[] getCompletionProposalAutoActivationCharacters() {
|
||||
public char[] getCompletionProposalAutoActivationCharacters() {
|
||||
return fCompletionAutoActivationCharacters;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue