From 81cbe876668119819deb101956e03f7490886be2 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Wed, 11 Jan 2017 19:33:48 -0500 Subject: Bug 391439 - Do not do replacement for help proposal with context information style Change-Id: I4d8988e9601e1f1b9722830b61cbf2d4c564a4cd --- .../org/eclipse/cdt/ui/tests/BaseUITestCase.java | 11 +- .../cdt/ui/tests/chelp/CHelpTestInfoProvider.java | 8 +- .../contentassist2/AbstractContentAssistTest.java | 4 +- .../text/contentassist2/CompletionTestBase.java | 230 +++++++++++++++++++++ .../tests/text/contentassist2/CompletionTests.java | 214 +------------------ .../contentassist2/ContentAssist2TestSuite.java | 1 + .../text/contentassist2/HelpProposalTests.java | 56 +++++ .../HelpCompletionProposalComputer.java | 10 +- 8 files changed, 310 insertions(+), 224 deletions(-) create mode 100644 core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTestBase.java create mode 100644 core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/HelpProposalTests.java diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java index fbc09be52ba..9d8e8909a61 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/BaseUITestCase.java @@ -78,15 +78,22 @@ public class BaseUITestCase extends BaseTestCase { super.tearDown(); } + /** + * Reads a section in comments form the source of the given class. + */ + protected String readTaggedComment(Class clazz, final String tag) throws IOException { + return TestSourceReader.readTaggedComment(CTestPlugin.getDefault().getBundle(), "ui", clazz, tag); + } + /** * Reads a section in comments form the source of the given class. Fully * equivalent to readTaggedComment(getClass(), tag) * @since 4.0 */ protected String readTaggedComment(final String tag) throws IOException { - return TestSourceReader.readTaggedComment(CTestPlugin.getDefault().getBundle(), "ui", getClass(), tag); + return readTaggedComment(getClass(), tag); } - + /** * Reads multiple sections in comments from the source of the given class. * @since 4.0 diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/chelp/CHelpTestInfoProvider.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/chelp/CHelpTestInfoProvider.java index 8ec2fe05a0e..a61e2dfd9fc 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/chelp/CHelpTestInfoProvider.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/chelp/CHelpTestInfoProvider.java @@ -35,7 +35,7 @@ public class CHelpTestInfoProvider implements ICHelpProvider { * Flag indicating whether this help provider should provide help info. * Should be set to true during tests only. */ - static boolean fgEnabled= false; + public static boolean fgEnabled= false; public CHelpTestInfoProvider(){ fProviderID = PROVIDER_ID_PREFIX + fNumProviders++; @@ -90,9 +90,9 @@ public class CHelpTestInfoProvider implements ICHelpProvider { if (!fgEnabled) { return new IFunctionSummary[0]; } - Assert.assertTrue("getMatchingFunctions is called before completion contributor gets initialized",fIsInitialized); - return null; // TODO returning null until someone puts in a preference to control it. - //return CHelpProviderTester.getDefault().generateMatchingFunctions(helpBooks,prefix,fProviderID); + Assert.assertTrue("getMatchingFunctions is called before completion contributor gets initialized", fIsInitialized); + //return null; // TODO returning null until someone puts in a preference to control it. + return CHelpProviderTester.getDefault().generateMatchingFunctions(helpBooks, prefix, fProviderID); } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/AbstractContentAssistTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/AbstractContentAssistTest.java index 96e5b54bc90..451bfedb509 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/AbstractContentAssistTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/AbstractContentAssistTest.java @@ -61,7 +61,7 @@ import org.eclipse.cdt.internal.ui.text.contentassist.RelevanceConstants; public abstract class AbstractContentAssistTest extends BaseUITestCase { public static enum CompareType { ID, DISPLAY, REPLACEMENT, CONTEXT, INFORMATION } - private class ContentAssistResult { + protected class ContentAssistResult { long startTime; long endTime; Object[] results; @@ -124,7 +124,7 @@ public abstract class AbstractContentAssistTest extends BaseUITestCase { return CUIPlugin.getDefault().getPreferenceStore(); } - private ContentAssistResult invokeContentAssist(int offset, int length, boolean isCompletion, + protected ContentAssistResult invokeContentAssist(int offset, int length, boolean isCompletion, boolean isTemplate, boolean filterResults) throws Exception { if (CTestPlugin.getDefault().isDebugging()) { System.out.println("\n\n\n\n\nTesting " + this.getClass().getName()); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTestBase.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTestBase.java new file mode 100644 index 00000000000..a8613f22ffd --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTestBase.java @@ -0,0 +1,230 @@ +/******************************************************************************* + * Copyright (c) 2017 Nathan Ridge 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 + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ +package org.eclipse.cdt.ui.tests.text.contentassist2; + +import static org.eclipse.cdt.ui.tests.text.contentassist2.AbstractContentAssistTest.CompareType.CONTEXT; +import static org.eclipse.cdt.ui.tests.text.contentassist2.AbstractContentAssistTest.CompareType.REPLACEMENT; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.jface.preference.IPreferenceStore; + +import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference; + +public class CompletionTestBase extends AbstractContentAssistTest { + private static final String HEADER_FILE_NAME = "CompletionTest.h"; + private static final String SOURCE_FILE_NAME = "CompletionTest.cpp"; + private static final String CURSOR_LOCATION_TAG = "/*cursor*/"; + + protected int fCursorOffset; + private boolean fCheckExtraResults= true; + protected IProject fProject; + + public CompletionTestBase(String name) { + super(name, true); + } + + /* + * @see org.eclipse.cdt.ui.tests.text.contentassist2.AbstractCompletionTest#setUpProjectContent(org.eclipse.core.resources.IProject) + */ + @Override + protected IFile setUpProjectContent(IProject project) throws Exception { + fProject= project; + String headerContent= readTaggedComment(CompletionTestBase.class, HEADER_FILE_NAME); + StringBuilder sourceContent= getContentsForTest(1)[0]; + sourceContent.insert(0, "#include \"" + HEADER_FILE_NAME + "\"\n"); + fCursorOffset= sourceContent.indexOf(CURSOR_LOCATION_TAG); + assertTrue("No cursor location specified", fCursorOffset >= 0); + sourceContent.delete(fCursorOffset, fCursorOffset + CURSOR_LOCATION_TAG.length()); + assertNotNull(createFile(project, HEADER_FILE_NAME, headerContent)); + return createFile(project, SOURCE_FILE_NAME, sourceContent.toString()); + } + + /* + * @see org.eclipse.cdt.ui.tests.text.contentassist2.AbstractContentAssistTest#doCheckExtraResults() + */ + @Override + protected boolean doCheckExtraResults() { + return fCheckExtraResults; + } + + private void setCheckExtraResults(boolean check) { + fCheckExtraResults= check; + } + + protected void assertMinimumCompletionResults(int offset, String[] expected, CompareType compareType) throws Exception { + setCheckExtraResults(false); + try { + assertCompletionResults(offset, expected, compareType); + } finally { + setCheckExtraResults(true); + } + } + + protected void assertCompletionResults(int offset, String[] expected, CompareType compareType) throws Exception { + assertContentAssistResults(offset, expected, true, compareType); + } + + protected void assertCompletionResults(String[] expected) throws Exception { + assertCompletionResults(fCursorOffset, expected, REPLACEMENT); + } + + protected void assertParameterHint(String[] expected) throws Exception { + assertContentAssistResults(fCursorOffset, expected, false, CONTEXT); + } + + protected void assertDotReplacedWithArrow() throws Exception { + assertEquals("->", getDocument().get(fCursorOffset - 1, 2)); + } + + protected static void setDisplayDefaultArguments(boolean value) { + IPreferenceStore preferenceStore = getPreferenceStore(); + preferenceStore.setValue(ContentAssistPreference.DEFAULT_ARGUMENT_DISPLAY_ARGUMENTS, value); + } + + protected void setReplaceDotWithArrow(boolean value) { + IPreferenceStore preferenceStore = getPreferenceStore(); + preferenceStore.setValue(ContentAssistPreference.AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW, value); + fProcessorNeedsConfiguring = true; // to pick up the modified auto-activation preference + } + + protected static void setDisplayDefaultedParameters(boolean value) { + IPreferenceStore preferenceStore = getPreferenceStore(); + preferenceStore.setValue(ContentAssistPreference.DEFAULT_ARGUMENT_DISPLAY_PARAMETERS_WITH_DEFAULT_ARGUMENT, value); + } + + // {CompletionTest.h} + // class C1; + // class C2; + // class C3; + // + // extern C1* gC1; + // C2* gC2 = 0; + // + // extern C1* gfC1(); + // C2* gfC2(); + // + // enum E1 {e11, e12}; + // + // class C1 { + // public: + // enum E2 {e21, e22}; + // + // C1* fMySelf; + // void iam1(); + // + // C1* m123(); + // C1* m12(); + // C1* m13(); + // + // protected: + // void m1protected(); + // private: + // void m1private(); + // }; + // typedef C1 T1; + // using A1 = C1; + // + // class C2 : public T1 { + // public: + // C2* fMySelf; + // void iam2(); + // + // C2* m123(); + // C2* m12(); + // C2* m23(); + // C1* operator()(int x); + // + // protected: + // void m2protected(); + // private: + // void m2private(); + // friend void _friend_function(C3* x); + // friend class _friend_class; + // }; + // typedef C2 T2; + // + // class C3 : public C2 { + // public: + // C3* fMySelf; + // void iam3(); + // + // C3* m123(); + // C3* m13(); + // + // template T tConvert(); + // protected: + // void m3protected(); + // private: + // void m3private(); + // }; + // typedef C3 T3; + // + // namespace ns { + // const int NSCONST= 1; + // class CNS { + // void mcns(); + // }; + // }; + // template class TClass { + // T fTField; + // public: + // TClass(T tArg) : fTField(tArg) { + // } + // T add(T tOther) { + // return fTField + tOther; + // } + // class NestedClass{}; + // }; + // // bug 109480 + // class Printer + // { + // public: + // static void InitPrinter(unsigned char port); + // private: + // //Storage for port printer is on + // static unsigned char port; + // protected: + // }; + // struct Struct1; + // struct Struct2; + // union Union1; + // union Union2; + // struct s206450 { + // struct {int a1; int a2;}; + // union {int u1; char u2;}; + // struct {int a3;} a4; + // int b; + // }; + // typedef enum {__nix} _e204758; + // void _f204758(_e204758 x); + // + // // Bug 331056 + // namespace _A_331056 { + // class Reference {}; + // } + // namespace _B_331056 { + // using ::_A_331056::Reference; + // } + // + // template + // struct Specialization { + // }; + // template + // struct Specialization { + // }; + // template<> + // struct Specialization { + // }; + // + // template + // using AliasForSpecialization = Specialization; + // + // template + // using AliasForTemplateAlias = AliasForSpecialization; +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java index 2a8044df1f1..04b8ee4b0f2 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java @@ -32,31 +32,20 @@ import java.util.Set; import junit.framework.Test; import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.IDocument; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.testplugin.TestScannerProvider; import org.eclipse.cdt.core.testplugin.util.BaseTestCase; -import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference; - /** * A collection of code completion tests. * * @since 4.0 */ -public class CompletionTests extends AbstractContentAssistTest { - private static final String HEADER_FILE_NAME = "CompletionTest.h"; - private static final String SOURCE_FILE_NAME = "CompletionTest.cpp"; - private static final String CURSOR_LOCATION_TAG = "/*cursor*/"; +public class CompletionTests extends CompletionTestBase { private static final String DISTURB_FILE_NAME= "DisturbWith.cpp"; - protected int fCursorOffset; - private boolean fCheckExtraResults= true; - private IProject fProject; - // {DisturbWith.cpp} // int gTemp; // void gFunc(); @@ -73,213 +62,14 @@ public class CompletionTests extends AbstractContentAssistTest { // class gnsClass {}; // }; - // {CompletionTest.h} - // class C1; - // class C2; - // class C3; - // - // extern C1* gC1; - // C2* gC2 = 0; - // - // extern C1* gfC1(); - // C2* gfC2(); - // - // enum E1 {e11, e12}; - // - // class C1 { - // public: - // enum E2 {e21, e22}; - // - // C1* fMySelf; - // void iam1(); - // - // C1* m123(); - // C1* m12(); - // C1* m13(); - // - // protected: - // void m1protected(); - // private: - // void m1private(); - // }; - // typedef C1 T1; - // using A1 = C1; - // - // class C2 : public T1 { - // public: - // C2* fMySelf; - // void iam2(); - // - // C2* m123(); - // C2* m12(); - // C2* m23(); - // C1* operator()(int x); - // - // protected: - // void m2protected(); - // private: - // void m2private(); - // friend void _friend_function(C3* x); - // friend class _friend_class; - // }; - // typedef C2 T2; - // - // class C3 : public C2 { - // public: - // C3* fMySelf; - // void iam3(); - // - // C3* m123(); - // C3* m13(); - // - // template T tConvert(); - // protected: - // void m3protected(); - // private: - // void m3private(); - // }; - // typedef C3 T3; - // - // namespace ns { - // const int NSCONST= 1; - // class CNS { - // void mcns(); - // }; - // }; - // template class TClass { - // T fTField; - // public: - // TClass(T tArg) : fTField(tArg) { - // } - // T add(T tOther) { - // return fTField + tOther; - // } - // class NestedClass{}; - // }; - // // bug 109480 - // class Printer - // { - // public: - // static void InitPrinter(unsigned char port); - // private: - // //Storage for port printer is on - // static unsigned char port; - // protected: - // }; - // struct Struct1; - // struct Struct2; - // union Union1; - // union Union2; - // struct s206450 { - // struct {int a1; int a2;}; - // union {int u1; char u2;}; - // struct {int a3;} a4; - // int b; - // }; - // typedef enum {__nix} _e204758; - // void _f204758(_e204758 x); - // - // // Bug 331056 - // namespace _A_331056 { - // class Reference {}; - // } - // namespace _B_331056 { - // using ::_A_331056::Reference; - // } - // - // template - // struct Specialization { - // }; - // template - // struct Specialization { - // }; - // template<> - // struct Specialization { - // }; - // - // template - // using AliasForSpecialization = Specialization; - // - // template - // using AliasForTemplateAlias = AliasForSpecialization; - public CompletionTests(String name) { - super(name, true); + super(name); } public static Test suite() { return BaseTestCase.suite(CompletionTests.class, "_"); } - /* - * @see org.eclipse.cdt.ui.tests.text.contentassist2.AbstractCompletionTest#setUpProjectContent(org.eclipse.core.resources.IProject) - */ - @Override - protected IFile setUpProjectContent(IProject project) throws Exception { - fProject= project; - String headerContent= readTaggedComment(HEADER_FILE_NAME); - StringBuilder sourceContent= getContentsForTest(1)[0]; - sourceContent.insert(0, "#include \"" + HEADER_FILE_NAME + "\"\n"); - fCursorOffset= sourceContent.indexOf(CURSOR_LOCATION_TAG); - assertTrue("No cursor location specified", fCursorOffset >= 0); - sourceContent.delete(fCursorOffset, fCursorOffset + CURSOR_LOCATION_TAG.length()); - assertNotNull(createFile(project, HEADER_FILE_NAME, headerContent)); - return createFile(project, SOURCE_FILE_NAME, sourceContent.toString()); - } - - /* - * @see org.eclipse.cdt.ui.tests.text.contentassist2.AbstractContentAssistTest#doCheckExtraResults() - */ - @Override - protected boolean doCheckExtraResults() { - return fCheckExtraResults; - } - - private void setCheckExtraResults(boolean check) { - fCheckExtraResults= check; - } - - private void assertMinimumCompletionResults(int offset, String[] expected, CompareType compareType) throws Exception { - setCheckExtraResults(false); - try { - assertCompletionResults(offset, expected, compareType); - } finally { - setCheckExtraResults(true); - } - } - - protected void assertCompletionResults(int offset, String[] expected, CompareType compareType) throws Exception { - assertContentAssistResults(offset, expected, true, compareType); - } - - protected void assertCompletionResults(String[] expected) throws Exception { - assertCompletionResults(fCursorOffset, expected, REPLACEMENT); - } - - protected void assertParameterHint(String[] expected) throws Exception { - assertContentAssistResults(fCursorOffset, expected, false, CONTEXT); - } - - protected void assertDotReplacedWithArrow() throws Exception { - assertEquals("->", getDocument().get(fCursorOffset - 1, 2)); - } - - private static void setDisplayDefaultArguments(boolean value) { - IPreferenceStore preferenceStore = getPreferenceStore(); - preferenceStore.setValue(ContentAssistPreference.DEFAULT_ARGUMENT_DISPLAY_ARGUMENTS, value); - } - - private void setReplaceDotWithArrow(boolean value) { - IPreferenceStore preferenceStore = getPreferenceStore(); - preferenceStore.setValue(ContentAssistPreference.AUTOACTIVATION_TRIGGERS_REPLACE_DOT_WITH_ARROW, value); - fProcessorNeedsConfiguring = true; // to pick up the modified auto-activation preference - } - - private static void setDisplayDefaultedParameters(boolean value) { - IPreferenceStore preferenceStore = getPreferenceStore(); - preferenceStore.setValue(ContentAssistPreference.DEFAULT_ARGUMENT_DISPLAY_PARAMETERS_WITH_DEFAULT_ARGUMENT, value); - } - //void gfunc() {C1 v; v.m/*cursor*/ public void testLocalVariable() throws Exception { final String[] expected= { diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/ContentAssist2TestSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/ContentAssist2TestSuite.java index 354cb986d25..6953925722e 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/ContentAssist2TestSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/ContentAssist2TestSuite.java @@ -70,6 +70,7 @@ public class ContentAssist2TestSuite extends TestSuite { addTest(CompletionTest_VariableType_Prefix.suite()); addTest(CompletionTests.suite()); + addTest(HelpProposalTests.suite()); addTest(CompletionTests_PlainC.suite()); addTest(ParameterHintTests.suite()); addTest(CPPParameterGuessingTests.suite()); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/HelpProposalTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/HelpProposalTests.java new file mode 100644 index 00000000000..045794f4fde --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/HelpProposalTests.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2017 Nathan Ridge. + * 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 + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ +package org.eclipse.cdt.ui.tests.text.contentassist2; + +import org.eclipse.cdt.core.testplugin.util.BaseTestCase; +import org.eclipse.cdt.ui.tests.chelp.CHelpTestInfoProvider; + +import org.eclipse.cdt.internal.ui.text.contentassist.CCompletionProposal; + +import junit.framework.Test; + +/** + * Tests for {@link org.eclipse.cdt.internal.ui.text.contentassist.HelpCompletionProposalComputer}. + */ +public class HelpProposalTests extends CompletionTestBase { + private boolean fOldTestInfoProviderEnablement; + + public HelpProposalTests(String name) { + super(name); + } + + public static Test suite() { + return BaseTestCase.suite(HelpProposalTests.class, "_"); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + fOldTestInfoProviderEnablement = CHelpTestInfoProvider.fgEnabled; + CHelpTestInfoProvider.fgEnabled = true; + } + + @Override + protected void tearDown() throws Exception { + CHelpTestInfoProvider.fgEnabled = fOldTestInfoProviderEnablement; + super.tearDown(); + } + + // int main() { + // setvbuf(file, NULL, _IOLBF, /*cursor*/); + // } + public void testHelpProposalClobberingTokens_391439() throws Exception { + Object[] results = invokeContentAssist(fCursorOffset, 0, true, false, true).results; + assertEquals(1, results.length); + assertInstance(results[0], CCompletionProposal.class); + CCompletionProposal proposal = ((CCompletionProposal) results[0]); + assertEquals(0, proposal.getReplacementLength()); + assertEquals("", proposal.getReplacementString()); + assertNotNull(proposal.getContextInformation()); + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/HelpCompletionProposalComputer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/HelpCompletionProposalComputer.java index 76ec6526555..1d6ee992058 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/HelpCompletionProposalComputer.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/HelpCompletionProposalComputer.java @@ -96,8 +96,9 @@ public class HelpCompletionProposalComputer extends ParsingBasedProposalComputer if (summaries == null) return Collections.emptyList(); - int repOffset = cContext.getInvocationOffset() - prefix.length(); - int repLength = prefix.length(); + boolean doReplacement = !cContext.isContextInformationStyle(); + int repLength = doReplacement ? prefix.length() : 0; + int repOffset = cContext.getInvocationOffset() - repLength; Image image = CUIPlugin.getImageDescriptorRegistry().get( CElementImageProvider.getFunctionImageDescriptor()); @@ -110,10 +111,12 @@ public class HelpCompletionProposalComputer extends ParsingBasedProposalComputer .getPrototype(); String fargs = fproto.getArguments(); + String repString = doReplacement ? fname : ""; //$NON-NLS-1$ + int relevance = computeBaseRelevance(prefix, summary.getName()) + RelevanceConstants.HELP_TYPE_RELEVANCE; CCompletionProposal proposal; proposal = new CCompletionProposal( - fname, + repString, repOffset, repLength, image, @@ -147,5 +150,4 @@ public class HelpCompletionProposalComputer extends ParsingBasedProposalComputer return proposals; } - } -- cgit v1.2.3