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:
|
* 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue