1
0
Fork 0
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:
Markus Schorn 2007-06-20 13:21:37 +00:00
parent ebe2158c23
commit ba7fc92b2e
5 changed files with 89 additions and 10 deletions

View file

@ -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);
}

View file

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

View file

@ -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);

View file

@ -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];
}
}

View file

@ -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;
}