From 0b73bea05a4c477bc6bde78f7f23ac2a8c693a20 Mon Sep 17 00:00:00 2001 From: Marc-Andre Laperle Date: Fri, 21 Sep 2018 23:04:30 -0400 Subject: [PATCH] Bug 518271 - NPE when using Toggle function on a function containing a lambda expression Change-Id: I441a627b0759655e865724bf5110fdb7dd8d5a50 Signed-off-by: Marc-Andre Laperle --- .../togglefunction/ToggleRefactoringTest.java | 21 +++++++++++++++++++ .../togglefunction/InsertionPointFinder.java | 4 ++++ 2 files changed, 25 insertions(+) diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/togglefunction/ToggleRefactoringTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/togglefunction/ToggleRefactoringTest.java index 4f6774f9617..d41289a42ef 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/togglefunction/ToggleRefactoringTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/refactoring/togglefunction/ToggleRefactoringTest.java @@ -3627,4 +3627,25 @@ public class ToggleRefactoringTest extends RefactoringTestBase { public void testToggleWithVirtSpecifiersImplementationToClass_518273() throws Exception { assertRefactoringSuccess(); } + + //Test.h + //class Foo { + // void /*$*/foo/*$$*/() { + // []() { + // + // }; + // } + //}; + //==================== + //class Foo { + // void foo(); + //}; + // + //inline void Foo::foo() { + // []() { + // }; + //} + public void testToggleWithLambdaExpression_518271() throws Exception { + assertRefactoringSuccess(); + } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/InsertionPointFinder.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/InsertionPointFinder.java index f3396ef650e..5d45275ae10 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/InsertionPointFinder.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/InsertionPointFinder.java @@ -48,6 +48,10 @@ public class InsertionPointFinder { if (allafterdeclarations == null || alldefinitionsoutside == null) return; for(ICPPASTFunctionDeclarator decl: allafterdeclarations) { + if (decl.getName() == null) { + // Could be a lambda expression + continue; + } String decl_name = decl.getName().toString(); for(ICPPASTFunctionDefinition def: alldefinitionsoutside) { String def_name = null;