1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

Bug 481070 - Parameter completion doesn't work inside lambda

Change-Id: I32b0cf54dd349e04fddca17f4141e7fee06f2562
Signed-off-by: Sergey Grant <sergey.grant@me.com>
This commit is contained in:
Sergey Grant 2015-11-30 20:02:26 -08:00
parent 31150e4af1
commit 85b481a99a
2 changed files with 11 additions and 1 deletions

View file

@ -31,6 +31,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization; import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClosureType;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper; import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownScope;
@ -115,6 +116,8 @@ public class AccessContext {
binding = ((ICPPAliasTemplateInstance) binding).getTemplateDefinition(); binding = ((ICPPAliasTemplateInstance) binding).getTemplateDefinition();
} }
IBinding owner = binding.getOwner(); IBinding owner = binding.getOwner();
if (owner instanceof CPPClosureType)
return true;
if (owner instanceof ICPPClassType) { if (owner instanceof ICPPClassType) {
bindingVisibility = ((ICPPClassType) owner).getVisibility(binding); bindingVisibility = ((ICPPClassType) owner).getVisibility(binding);
} else { } else {

View file

@ -1401,6 +1401,13 @@ public class CompletionTests extends AbstractContentAssistTest {
assertCompletionResults(fCursorOffset, expected, ID); assertCompletionResults(fCursorOffset, expected, ID);
} }
// int par1;
// auto x = [](int par2) { return par/*cursor*/
public void testLambdaParameter_481070() throws Exception {
final String[] expected= { "par1", "par2" };
assertCompletionResults(fCursorOffset, expected, ID);
}
// #define fooBar // #define fooBar
// #define foo_bar // #define foo_bar
// fB/*cursor*/ // fB/*cursor*/
@ -1629,7 +1636,7 @@ public class CompletionTests extends AbstractContentAssistTest {
final String[] expectedDisplay = { "default_argument() : void" }; final String[] expectedDisplay = { "default_argument() : void" };
assertContentAssistResults(fCursorOffset, expectedDisplay, true, DISPLAY); assertContentAssistResults(fCursorOffset, expectedDisplay, true, DISPLAY);
} }
// template<typename T = int> // template<typename T = int>
// struct default_argument {}; // struct default_argument {};
// default_arg/*cursor*/ // default_arg/*cursor*/