Community
Participate
Working Groups
Consider the example below: @FunctionalInterface public interface I1 { int foo(int a); } class X { void foo() { // expected local variable after extraction // (should be similar to): I1 temp= (int a) -> {return 10;}; //-------------------------------------------------- I1 i1= /*[*/(int a) -> {return 10;};/*]*/ I1 i2= /*[*/(a) -> {return 10;}/*]*/ ; I1 i3= /*[*/ /**/(a) -> {return 10;};/**/ /*]*/ bar(/*[*/ a -> 10 /*]*/); //-------------------------------------------------- } void bar(I1 i) { } } It is not possible to extract the lambda expr to a local variable using Alt+Shift+L. Shown cases give different error messages and the following exception: Caused by: org.eclipse.core.runtime.AssertionFailedException: assertion failed: at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110) at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96) at org.eclipse.jdt.internal.corext.dom.fragments.ASTFragmentFactory$FragmentFactory.setFragment(ASTFragmentFactory.java:194) at org.eclipse.jdt.internal.corext.dom.fragments.ASTFragmentFactory$FragmentForFullSubtreeFactory.visit(ASTFragmentFactory.java:138) at org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor.visit(HierarchicalASTVisitor.java:760) at org.eclipse.jdt.internal.corext.dom.HierarchicalASTVisitor.visit(HierarchicalASTVisitor.java:780) at org.eclipse.jdt.core.dom.Block.accept0(Block.java:134) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2710) at org.eclipse.jdt.core.dom.ASTNode.acceptChild(ASTNode.java:2758) at org.eclipse.jdt.core.dom.LambdaExpression.accept0(LambdaExpression.java:215) at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2710) at org.eclipse.jdt.internal.corext.dom.fragments.ASTFragmentFactory$FragmentFactory.createFragment(ASTFragmentFactory.java:186) at org.eclipse.jdt.internal.corext.dom.fragments.ASTFragmentFactory$FragmentForFullSubtreeFactory.createFragmentFor(ASTFragmentFactory.java:115) at org.eclipse.jdt.internal.corext.dom.fragments.ASTFragmentFactory.createFragmentForFullSubtree(ASTFragmentFactory.java:56) at org.eclipse.jdt.internal.corext.dom.fragments.ASTFragmentFactory.createFragmentForSourceRange(ASTFragmentFactory.java:82) at org.eclipse.jdt.internal.corext.refactoring.code.ExtractTempRefactoring.getSelectedExpression(ExtractTempRefactoring.java:850) at org.eclipse.jdt.internal.corext.refactoring.code.ExtractTempRefactoring.checkSelection(ExtractTempRefactoring.java:611) at org.eclipse.jdt.internal.corext.refactoring.code.ExtractTempRefactoring.checkInitialConditions(ExtractTempRefactoring.java:584) ...
Verified that lambda expressions can be extracted to local variables now and we do not get any exception. Hence, closing this.