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: * Contributors:
* IBM Corporation - initial API and implementation * 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); String contentType = editor.getViewer().getDocument().getContentType(offset);
ContentAssistant assistant = new ContentAssistant(); 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); return processor.computeCompletionProposals(editor.getViewer(), offset);
} }

View file

@ -9,6 +9,7 @@
* IBM Rational Software - Initial API and implementation * IBM Rational Software - Initial API and implementation
* Anton Leherbauer (Wind River Systems) * Anton Leherbauer (Wind River Systems)
* Bryan Wilkinson (QNX) * Bryan Wilkinson (QNX)
* Markus Schorn (Wind River Systems)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.ui.tests.text.contentassist2; package org.eclipse.cdt.ui.tests.text.contentassist2;
@ -102,7 +103,7 @@ public abstract class AbstractContentAssistTest extends BaseUITestCase {
ISourceViewer sourceViewer= EditorTestHelper.getSourceViewer((AbstractTextEditor)fEditor); ISourceViewer sourceViewer= EditorTestHelper.getSourceViewer((AbstractTextEditor)fEditor);
String contentType = sourceViewer.getDocument().getContentType(offset); String contentType = sourceViewer.getDocument().getContentType(offset);
ContentAssistant assistant = new ContentAssistant(); ContentAssistant assistant = new ContentAssistant();
CContentAssistProcessor processor = new CContentAssistProcessor(fEditor, assistant, contentType); CContentAssistProcessor processor = new CContentAssistProcessor(fEditor, sourceViewer, assistant, contentType);
long startTime= System.currentTimeMillis(); long startTime= System.currentTimeMillis();
Object[] results = isCompletion Object[] results = isCompletion
? (Object[]) processor.computeCompletionProposals(sourceViewer, offset) ? (Object[]) processor.computeCompletionProposals(sourceViewer, offset)

View file

@ -10,6 +10,7 @@
* QNX Software System * QNX Software System
* Anton Leherbauer (Wind River Systems) * Anton Leherbauer (Wind River Systems)
* Sergey Prigogin, Google * Sergey Prigogin, Google
* Markus Schorn (Wind River Systems)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.text; 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$ 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); 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); 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); 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); 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); assistant.setContentAssistProcessor(processor, ICPartitions.C_PREPROCESSOR);
ContentAssistPreference.configure(assistant, fPreferenceStore); ContentAssistPreference.configure(assistant, fPreferenceStore);

View file

@ -9,6 +9,7 @@
* IBM Corporation - initial API and implementation * IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems) * Anton Leherbauer (Wind River Systems)
* Bryan Wilkinson (QNX) * Bryan Wilkinson (QNX)
* Markus Schorn (Wind River Systems)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.text.contentassist; 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.IConfigurationElement;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.InvalidRegistryObjectException; import org.eclipse.core.runtime.InvalidRegistryObjectException;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.ContentAssistant; import org.eclipse.jface.text.contentassist.ContentAssistant;
import org.eclipse.jface.text.contentassist.ICompletionProposal; import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator; 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.Image;
import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IEditorPart; 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 IContextInformationValidator fValidator;
private final IEditorPart fEditor; 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); super(assistant, partition);
fEditor= editor; fEditor= editor;
fViewer= viewer;
} }
/* /*
@ -206,4 +219,66 @@ public class CContentAssistProcessor extends ContentAssistProcessor {
return new CContentAssistInvocationContext(viewer, offset, fEditor, 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 * IBM Corporation - initial API and implementation
* Anton Leherbauer (Wind River Systems) * Anton Leherbauer (Wind River Systems)
* Bryan Wilkinson (QNX) * Bryan Wilkinson (QNX)
* Markus Schorn (Wind River Systems)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.ui.text.contentassist; package org.eclipse.cdt.internal.ui.text.contentassist;
@ -333,7 +334,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
* *
* @param activationSet the activation set * @param activationSet the activation set
*/ */
public final void setCompletionProposalAutoActivationCharacters(char[] activationSet) { public void setCompletionProposalAutoActivationCharacters(char[] activationSet) {
fCompletionAutoActivationCharacters= activationSet; fCompletionAutoActivationCharacters= activationSet;
} }
@ -341,7 +342,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
/* /*
* @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters() * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
*/ */
public final char[] getCompletionProposalAutoActivationCharacters() { public char[] getCompletionProposalAutoActivationCharacters() {
return fCompletionAutoActivationCharacters; return fCompletionAutoActivationCharacters;
} }