diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java index 2c4418b128d5..525417561f39 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -889,16 +889,13 @@ public class RefactoringUtil { final PsiElement invalidBody = lambdaExpression.getBody(); if (invalidBody == null) return declaration; - final PsiLambdaExpression expressionFromText = (PsiLambdaExpression)elementFactory - .createExpressionFromText(lambdaExpression.getParameterList().getText() + " -> {}", lambdaExpression.getParent()); + String lambdaParamListWithArrowAndComments = lambdaExpression.getText() + .substring(0, (declaration.isPhysical() ? declaration : invalidBody).getStartOffsetInParent()); + final PsiLambdaExpression expressionFromText = (PsiLambdaExpression)elementFactory.createExpressionFromText(lambdaParamListWithArrowAndComments + "{}", lambdaExpression.getParent()); PsiCodeBlock newBody = (PsiCodeBlock)expressionFromText.getBody(); LOG.assertTrue(newBody != null); newBody.add(declaration); - lambdaExpression = - (PsiLambdaExpression)lambdaExpression.replace(elementFactory.createExpressionFromText( - lambdaExpression.getParameterList().getText() + " -> " + invalidBody.getText(), lambdaExpression)); - final PsiElement lambdaExpressionBody = lambdaExpression.getBody(); LOG.assertTrue(lambdaExpressionBody != null); final PsiStatement lastBodyStatement; diff --git a/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.after.java b/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.after.java index 08a1dfc04531..b0a06b3666e6 100644 --- a/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.after.java +++ b/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.after.java @@ -8,7 +8,8 @@ class X { public void foo(Class cls) { Stream.of(cls.getMethods()) - .filter(method -> { + .filter(method ->//my comment to keep + { Class c = method.getReturnType(); return Collection.class.isAssignableFrom(c) || Map.class.isAssignableFrom(c); }) diff --git a/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.java b/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.java index 4643cf18f806..8ee7ea51d092 100644 --- a/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.java +++ b/java/java-tests/testData/refactoring/introduceVariable/PutInLambdaBodyMultipleOccurrences.java @@ -8,7 +8,7 @@ class X { public void foo(Class cls) { Stream.of(cls.getMethods()) - .filter(method -> + .filter(method ->//my comment to keep Collection.class.isAssignableFrom(method.getReturnType()) || Map.class.isAssignableFrom(method.getReturnType())) .collect(Collectors.toList()); }