diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CodeAssistPreferencePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CodeAssistPreferencePage.java index 034a186af9b..f6ff9b37c17 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CodeAssistPreferencePage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CodeAssistPreferencePage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2002, 2008 QNX Software Systems and others. + * Copyright (c) 2002, 2010 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -9,6 +9,7 @@ * QNX Software Systems - Initial API and implementation * Anton Leherbauer (Wind River Systems) * IBM Corporation + * Kirk Beitz (Nokia) *******************************************************************************/ package org.eclipse.cdt.internal.ui.preferences; @@ -52,6 +53,7 @@ public class CodeAssistPreferencePage extends AbstractPreferencePage { overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_DOT)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_ARROW)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_DOUBLECOLON)); + overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW)); // overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.SHOW_DOCUMENTED_PROPOSALS)); overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.ORDER_PROPOSALS)); // overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, ContentAssistPreference.ADD_INCLUDE)); @@ -109,10 +111,6 @@ public class CodeAssistPreferencePage extends AbstractPreferencePage { label = PreferencesMessages.CEditorPreferencePage_ContentAssistPage_insertCommonProposalAutomatically; addCheckBox(insertionGroup, label, ContentAssistPreference.PREFIX_COMPLETION, 0); - - // parsing timeout (no longer supported) -// label = PreferencesMessages.CEditorPreferencePage_ContentAssistPage_timeoutDelay; -// addTextField(insertionGroup, label, ContentAssistPreference.TIMEOUT_DELAY, 6, 0, true); //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // sorting and filtering @@ -138,7 +136,10 @@ public class CodeAssistPreferencePage extends AbstractPreferencePage { label = PreferencesMessages.CEditorPreferencePage_ContentAssistPage_autoActivationEnableDoubleColon; addCheckBox(enableGroup, label, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_DOUBLECOLON, 0); - + + label = PreferencesMessages.CEditorPreferencePage_ContentAssistPage_autoActivationEnableReplaceDotWithArrow; + addCheckBox(enableGroup, label, ContentAssistPreference.AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW, 0); + label = PreferencesMessages.CEditorPreferencePage_ContentAssistPage_autoActivationDelay; addTextField(enableGroup, label, ContentAssistPreference.AUTOACTIVATION_DELAY, 4, 0, true); @@ -159,17 +160,15 @@ public class CodeAssistPreferencePage extends AbstractPreferencePage { store.setDefault(ContentAssistPreference.CURRENT_FILE_SEARCH_SCOPE, true); store.setDefault(ContentAssistPreference.PROJECT_SEARCH_SCOPE, false); -// store.setDefault(ContentAssistPreference.TIMEOUT_DELAY, 3000); - store.setDefault(ContentAssistPreference.AUTOACTIVATION_TRIGGERS_DOT, true); store.setDefault(ContentAssistPreference.AUTOACTIVATION_TRIGGERS_ARROW, true); store.setDefault(ContentAssistPreference.AUTOACTIVATION_TRIGGERS_DOUBLECOLON, true); + store.setDefault(ContentAssistPreference.AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW, true); store.setDefault(ContentAssistPreference.AUTOACTIVATION_DELAY, 500); - + store.setDefault(ContentAssistPreference.AUTOINSERT, true); store.setDefault(ContentAssistPreference.PREFIX_COMPLETION, true); store.setDefault(ContentAssistPreference.ORDER_PROPOSALS, false); -// store.setDefault(ContentAssistPreference.ADD_INCLUDE, true); store.setDefault(ContentAssistPreference.PROPOSALS_FILTER, ProposalFilterPreferencesUtil.getProposalFilternamesAsString()); // $NON_NLS 1$ } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.java index 9e8c92ea07d..e1cc4a64ea8 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.java @@ -11,6 +11,7 @@ * Markus Schorn (Wind River Systems) * Sergey Prigogin (Google) * Andrew Ferguson (Symbian) + * Kirk Beitz (Nokia) *******************************************************************************/ package org.eclipse.cdt.internal.ui.preferences; @@ -46,23 +47,22 @@ public final class PreferencesMessages extends NLS { public static String CEditorPreferencePage_ContentAssistPage_insertSingleProposalAutomatically; public static String CEditorPreferencePage_ContentAssistPage_insertCommonProposalAutomatically; public static String CEditorPreferencePage_ContentAssistPage_showProposalsInAlphabeticalOrder; -// public static String CEditorPreferencePage_ContentAssistPage_timeoutDelay; public static String CEditorPreferencePage_ContentAssistPage_autoActivationGroupTitle; public static String CEditorPreferencePage_ContentAssistPage_autoActivationEnableDot; public static String CEditorPreferencePage_ContentAssistPage_autoActivationEnableArrow; + public static String CEditorPreferencePage_ContentAssistPage_autoActivationEnableDoubleColon; + public static String CEditorPreferencePage_ContentAssistPage_autoActivationEnableReplaceDotWithArrow; public static String CEditorPreferencePage_ContentAssistPage_autoActivationDelay; public static String CEditorPreferencePage_ContentAssistPage_proposalFilterSelect; public static String CEditorPreferencePage_ContentAssistPage_completionProposalBackgroundColor; public static String CEditorPreferencePage_ContentAssistPage_completionProposalForegroundColor; public static String CEditorPreferencePage_ContentAssistPage_parameterBackgroundColor; public static String CEditorPreferencePage_ContentAssistPage_parameterForegroundColor; - public static String CEditorPreferencePage_ContentAssistPage_autoActivationEnableDoubleColon; public static String CEditorPreferencePage_ContentAssistPage_sortingSection_title; public static String CEditorPreferencePage_sourceHoverBackgroundColor; public static String CEditorColoringConfigurationBlock_MultiLine; public static String CEditorColoringConfigurationBlock_singleLine; public static String CEditorColoringConfigurationBlock_keywords; -// public static String CEditorColoringConfigurationBlock_returnKeyword; public static String CEditorColoringConfigurationBlock_builtInTypes; public static String CEditorColoringConfigurationBlock_strings; public static String CEditorColoringConfigurationBlock_operators; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties index 8c56c66fb38..d81f92a0258 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/PreferencesMessages.properties @@ -11,6 +11,7 @@ # Markus Schorn (Wind River Systems) # Sergey Prigogin (Google) # Andrew Ferguson (Symbian) +# Kirk Beitz (Nokia) ############################################################################### CEditorPreferencePage_link=C/C++ Editor Preferences. General preferences may be set via Text Editors. @@ -23,19 +24,19 @@ CEditorPreferencePage_colors=Synta&x #CEditorPreferencePage_ContentAssistPage_searchGroupCurrentProjectOption=Search current &project CEditorPreferencePage_ContentAssistPage_insertionGroupTitle=Insertion CEditorPreferencePage_ContentAssistPage_insertSingleProposalAutomatically=&Insert single proposals automatically -CEditorPreferencePage_ContentAssistPage_insertCommonProposalAutomatically=Insert common prefixes automatically +CEditorPreferencePage_ContentAssistPage_insertCommonProposalAutomatically=I&nsert common prefixes automatically CEditorPreferencePage_ContentAssistPage_showProposalsInAlphabeticalOrder=Present proposals in a&lphabetical order -#CEditorPreferencePage_ContentAssistPage_timeoutDelay=Content Assist parsing &timeout (ms) CEditorPreferencePage_ContentAssistPage_autoActivationGroupTitle=Auto-Activation -CEditorPreferencePage_ContentAssistPage_autoActivationEnableDot=Enable "." as trigger -CEditorPreferencePage_ContentAssistPage_autoActivationEnableArrow=Enable "->" as trigger +CEditorPreferencePage_ContentAssistPage_autoActivationEnableDot=Enable "." as &trigger +CEditorPreferencePage_ContentAssistPage_autoActivationEnableArrow=Enable "->" as tri&gger +CEditorPreferencePage_ContentAssistPage_autoActivationEnableDoubleColon=Enable "::" as trigg&er +CEditorPreferencePage_ContentAssistPage_autoActivationEnableReplaceDotWithArrow=Enable aut&o-replace of '.' with '->' for pointer types CEditorPreferencePage_ContentAssistPage_autoActivationDelay=Dela&y (ms) CEditorPreferencePage_ContentAssistPage_proposalFilterSelect=Completion Proposal Filter: CEditorPreferencePage_ContentAssistPage_completionProposalBackgroundColor=Completion proposal background CEditorPreferencePage_ContentAssistPage_completionProposalForegroundColor=Completion proposal foreground CEditorPreferencePage_ContentAssistPage_parameterBackgroundColor=Parameter hint background CEditorPreferencePage_ContentAssistPage_parameterForegroundColor=Parameter hint foreground -CEditorPreferencePage_ContentAssistPage_autoActivationEnableDoubleColon=Enable "::" as trigger CEditorPreferencePage_ContentAssistPage_sortingSection_title=Sorting and Filtering CEditorPreferencePage_sourceHoverBackgroundColor=Source hover background diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CContentAssistProcessor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CContentAssistProcessor.java index 0d18ed02aca..b88807878bd 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CContentAssistProcessor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CContentAssistProcessor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2008 IBM Corporation and others. + * Copyright (c) 2000, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,6 +10,7 @@ * Anton Leherbauer (Wind River Systems) * Bryan Wilkinson (QNX) * Markus Schorn (Wind River Systems) + * Kirk Beitz (Nokia) *******************************************************************************/ package org.eclipse.cdt.internal.ui.text.contentassist; @@ -32,6 +33,12 @@ import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.IEditorPart; +import org.eclipse.cdt.core.dom.ast.IASTCompletionNode; +import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.ast.IASTFieldReference; +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IPointerType; + import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.text.ICCompletionProposal; import org.eclipse.cdt.ui.text.contentassist.ContentAssistInvocationContext; @@ -47,6 +54,19 @@ import org.eclipse.cdt.internal.ui.text.Symbols; */ public class CContentAssistProcessor extends ContentAssistProcessor { + private static class ActivationSet { + private final String theSet; + ActivationSet(String s) { + theSet = s; + } + + boolean contains(char c) { + return -1 != theSet.indexOf(c); + } + } + private ActivationSet fReplacementAutoActivationCharacters; + private ActivationSet fCContentAutoActivationCharacters; + /** * A wrapper for {@link ICompetionProposal}s. */ @@ -225,12 +245,110 @@ public class CContentAssistProcessor extends ContentAssistProcessor { return contexts; } + /** + * Establishes this processor's set of characters checked after + * auto-activation to determine if auto-replacement correction + * is to occur. + *
+ * This set is a (possibly complete) subset of the set established by + * {@link ContentAssistProcessor#setCompletionProposalAutoActivationCharacters}, + * which is the set of characters used to initially trigger auto-activation + * for any content-assist operations, including this. (And while the + * name setCompletionProposalAutoActivationCharacters may now be a bit + * misleading, it is part of an API implementation called by jface.) + * + * @param activationSet the activation set + */ + public void setReplacementAutoActivationCharacters(String activationSet) { + fReplacementAutoActivationCharacters= new ActivationSet(activationSet); + } + + /** + * Establishes this processor's set of characters checked after + * auto-activation and any auto-correction to determine if completion + * proposal computation is to proceed. + *
+ * This set is a (possibly complete) subset of the set established by
+ * {@link ContentAssistProcessor#setCompletionProposalAutoActivationCharacters},
+ * which is the set of characters used to initially trigger auto-activation
+ * for any content-assist operations, including this. (And while the
+ * name setCompletionProposalAutoActivationCharacters may now be a bit
+ * misleading, it is part of an API implementation called by jface.)
+ *
+ * @param activationSet the activation set
+ */
+ public void setCContentAutoActivationCharacters(String activationSet) {
+ fCContentAutoActivationCharacters= new ActivationSet(activationSet);
+ }
+
/*
* @see org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistProcessor#createContext(org.eclipse.jface.text.ITextViewer, int)
*/
@Override
protected ContentAssistInvocationContext createContext(ITextViewer viewer, int offset, boolean isCompletion) {
- return new CContentAssistInvocationContext(viewer, offset, fEditor, isCompletion, isAutoActivated());
+ char activationChar = getActivationChar(viewer, offset);
+ CContentAssistInvocationContext context
+ = new CContentAssistInvocationContext(viewer, offset, fEditor, isCompletion, isAutoActivated());
+ if (isCompletion && activationChar == '.' && fReplacementAutoActivationCharacters.contains('.')) {
+ IASTCompletionNode node = context.getCompletionNode();
+ if (node != null) {
+ IASTName[] names = node.getNames();
+ if (names.length > 0 && names[0].getParent() instanceof IASTFieldReference) {
+ IASTFieldReference ref = (IASTFieldReference) names[0].getParent();
+ IASTExpression ownerExpr = ref.getFieldOwner();
+ if (ownerExpr.getExpressionType() instanceof IPointerType) {
+ context = replaceDotWithArrow(viewer, offset, isCompletion, context, activationChar);
+ }
+ }
+ }
+ }
+
+ return context;
+ }
+
+ private CContentAssistInvocationContext replaceDotWithArrow(ITextViewer viewer, int offset,
+ boolean isCompletion, CContentAssistInvocationContext context, char activationChar) {
+ IDocument doc = viewer.getDocument();
+ try {
+ doc.replace(offset-1, 1, "->"); //$NON-NLS-1$
+ context.dispose();
+ // if user turned on activation only for replacement characters,
+ // setting the context to null will skip the proposals popup later
+ if (!isAutoActivated() || fCContentAutoActivationCharacters.contains(activationChar))
+ context = new CContentAssistInvocationContext(viewer, offset+1, fEditor,
+ isCompletion, isAutoActivated());
+ else
+ context = null;
+ } catch (BadLocationException exc) {
+ if (isAutoActivated() && !fCContentAutoActivationCharacters.contains(activationChar)) {
+ if (context != null) {
+ context.dispose(); // XXX dang false positives null deref warnings
+ context = null;
+ }
+ }
+ }
+ return context;
+ }
+
+ /**
+ * Get the character preceding the content assist activation offset.
+ * @param viewer
+ * @param offset
+ * @return the activation character
+ */
+ private char getActivationChar(ITextViewer viewer, int offset) {
+ IDocument doc= viewer.getDocument();
+ if (doc == null) {
+ return 0;
+ }
+ if (offset <= 0) {
+ return 0;
+ }
+ try {
+ return doc.getChar(offset-1);
+ } catch (BadLocationException exc) {
+ }
+ return 0;
}
/*
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistPreference.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistPreference.java
index 19d25790da9..e669ef96d42 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistPreference.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistPreference.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
* Contributors:
* IBM - Initial API and implementation
* Anton Leherbauer (Wind River Systems)
+ * Kirk Beitz (Nokia)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text.contentassist;
@@ -54,7 +55,7 @@ public class ContentAssistPreference {
public final static String AUTOACTIVATION_TRIGGERS_DOT= "content_assist_autoactivation_trigger_dot"; //$NON-NLS-1$
public final static String AUTOACTIVATION_TRIGGERS_ARROW= "content_assist_autoactivation_trigger_arrow"; //$NON-NLS-1$
public final static String AUTOACTIVATION_TRIGGERS_DOUBLECOLON= "content_assist_autoactivation_trigger_doublecolon"; //$NON-NLS-1$
-
+ public final static String AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW= "content_assist_autoactivation_trigger_replace_dot_with_arrow"; //$NON-NLS-1$
// /** Preference key for visibility of proposals (unused) */
// public final static String SHOW_DOCUMENTED_PROPOSALS= "content_assist_show_visible_proposals"; //$NON-NLS-1$
/** Preference key for alphabetic ordering of proposals */
@@ -91,19 +92,8 @@ public class ContentAssistPreference {
CContentAssistProcessor ccp= getCProcessor(assistant);
if (ccp == null)
return;
+ configureActivationCharacters(store, ccp);
- String triggers = ""; //$NON-NLS-1$
- boolean useDotAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_DOT);
- if(useDotAsTrigger)
- triggers = "."; //$NON-NLS-1$
- boolean useArrowAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_ARROW);
- if(useArrowAsTrigger)
- triggers += ">"; //$NON-NLS-1$
- boolean useDoubleColonAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_DOUBLECOLON);
- if(useDoubleColonAsTrigger)
- triggers += ":"; //$NON-NLS-1$
- ccp.setCompletionProposalAutoActivationCharacters(triggers.toCharArray());
-
// boolean enabled;
// enabled= store.getBoolean(SHOW_DOCUMENTED_PROPOSALS);
// ccp.restrictProposalsToVisibility(enabled);
@@ -118,6 +108,36 @@ public class ContentAssistPreference {
// ccp.allowAddingIncludes(enabled);
}
+ private static void configureActivationCharacters(IPreferenceStore store, CContentAssistProcessor ccp) {
+ String triggers = ""; //$NON-NLS-1$
+ boolean useDotAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_DOT);
+ boolean useArrowAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_ARROW);
+ boolean useDoubleColonAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_DOUBLECOLON);
+
+ if (useDotAsTrigger)
+ triggers = "."; //$NON-NLS-1$
+ if (useArrowAsTrigger)
+ triggers += ">"; //$NON-NLS-1$
+ if (useDoubleColonAsTrigger)
+ triggers += ":"; //$NON-NLS-1$
+ ccp.setCContentAutoActivationCharacters(triggers);
+
+ boolean dotTriggersAutoReplace = store.getBoolean(AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW);
+
+ // quick and dirty, since we only have one thing to replace
+ // if other replacement auto-activate triggers are added,
+ // triggers will have to be cleared and characters that share
+ // such as "." will have to be ||ed together.
+ if (!useDotAsTrigger && dotTriggersAutoReplace)
+ triggers += "."; //$NON-NLS-1$
+ ccp.setCompletionProposalAutoActivationCharacters(triggers.toCharArray());
+
+ triggers = ""; //$NON-NLS-1$
+ if (dotTriggersAutoReplace)
+ triggers = "."; //$NON-NLS-1$
+ ccp.setReplacementAutoActivationCharacters(triggers);
+ }
+
/**
* Configure the given content assistant from the given store.
@@ -130,7 +150,12 @@ public class ContentAssistPreference {
boolean enabledDot= store.getBoolean(AUTOACTIVATION_TRIGGERS_DOT);
boolean enabledArrow= store.getBoolean(AUTOACTIVATION_TRIGGERS_ARROW);
boolean enabledDoubleColon= store.getBoolean(AUTOACTIVATION_TRIGGERS_DOUBLECOLON);
- boolean enabled = ((enabledDot) || ( enabledArrow ) || (enabledDoubleColon ));
+ boolean enabledReplaceDotWithArrow
+ = store.getBoolean(AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW);
+
+ boolean enabled
+ = (enabledDot || enabledArrow || enabledDoubleColon
+ || enabledReplaceDotWithArrow);
assistant.enableAutoActivation(enabled);
int delay= store.getInt(AUTOACTIVATION_DELAY);
@@ -167,21 +192,9 @@ public class ContentAssistPreference {
if ( (AUTOACTIVATION_TRIGGERS_DOT.equals(key))
|| (AUTOACTIVATION_TRIGGERS_ARROW.equals(key))
- || (AUTOACTIVATION_TRIGGERS_DOUBLECOLON.equals(key)) ){
- boolean useDotAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_DOT);
- boolean useArrowAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_ARROW);
- boolean useDoubleColonAsTrigger = store.getBoolean(AUTOACTIVATION_TRIGGERS_DOUBLECOLON);
- String triggers = ""; //$NON-NLS-1$
- if (useDotAsTrigger){
- triggers += "."; //$NON-NLS-1$
- }
- if (useArrowAsTrigger){
- triggers += ">"; //$NON-NLS-1$
- }
- if (useDoubleColonAsTrigger){
- triggers += ":"; //$NON-NLS-1$
- }
- ccp.setCompletionProposalAutoActivationCharacters(triggers.toCharArray());
+ || (AUTOACTIVATION_TRIGGERS_DOUBLECOLON.equals(key))
+ || (AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW.equals(key))){
+ configureActivationCharacters(store, ccp);
}
// else if (SHOW_DOCUMENTED_PROPOSALS.equals(key)) {
// boolean enabled= store.getBoolean(SHOW_DOCUMENTED_PROPOSALS);
@@ -210,12 +223,15 @@ public class ContentAssistPreference {
if ((AUTOACTIVATION_TRIGGERS_DOT.equals(p))
|| (AUTOACTIVATION_TRIGGERS_ARROW.equals(p))
- || (AUTOACTIVATION_TRIGGERS_DOUBLECOLON.equals(p))){
+ || (AUTOACTIVATION_TRIGGERS_DOUBLECOLON.equals(p))
+ || (AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW.equals(p))){
boolean enabledDot= store.getBoolean(AUTOACTIVATION_TRIGGERS_DOT);
boolean enabledArrow= store.getBoolean(AUTOACTIVATION_TRIGGERS_ARROW);
boolean enabledDoubleColon= store.getBoolean(AUTOACTIVATION_TRIGGERS_DOUBLECOLON);
- boolean enabled = ((enabledDot) || ( enabledArrow ) || (enabledDoubleColon ));
+ boolean enabledReplaceDotWithArrow= store.getBoolean(AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW);
+ boolean enabled = ((enabledDot) || ( enabledArrow ) || (enabledDoubleColon ) || (enabledReplaceDotWithArrow ));
assistant.enableAutoActivation(enabled);
+
} else if (AUTOACTIVATION_DELAY.equals(p)) {
int delay= store.getInt(AUTOACTIVATION_DELAY);
assistant.setAutoActivationDelay(delay);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistProcessor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistProcessor.java
index adaa3a61a8e..57d83b0e707 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistProcessor.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistProcessor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
* Anton Leherbauer (Wind River Systems)
* Bryan Wilkinson (QNX)
* Markus Schorn (Wind River Systems)
+ * Kirk Beitz (Nokia)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.text.contentassist;
@@ -212,7 +213,9 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
monitor.beginTask(ContentAssistMessages.ContentAssistProcessor_computing_proposals, fCategories.size() + 1);
ContentAssistInvocationContext context= createContext(viewer, offset, true);
-
+ if (context == null)
+ return null;
+
try {
long setup= DEBUG ? System.currentTimeMillis() : 0;
@@ -345,7 +348,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
/**
* Sets this processor's set of characters triggering the activation of the
- * completion proposal computation.
+ * completion proposal computation (including auto-correction auto-activation)
*
* @param activationSet the activation set
*/
@@ -406,6 +409,7 @@ public class ContentAssistProcessor implements IContentAssistProcessor {
* @param viewer the viewer that content assist is invoked on
* @param offset the content assist offset
* @return the context to be passed to the computers
+ * or null
if no completion is possible
*/
protected ContentAssistInvocationContext createContext(ITextViewer viewer, int offset, boolean isCompletion) {
return new ContentAssistInvocationContext(viewer, offset);