From 8a020a1d46934ac2ffacfd43ed5ca455c21bceef Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 21 Nov 2017 16:04:23 +0100 Subject: [PATCH] preserve comments when transform expr lambda to code block (IDEA-179643) --- .../com/intellij/refactoring/util/RefactoringUtil.java | 9 +++------ .../PutInLambdaBodyMultipleOccurrences.after.java | 3 ++- .../PutInLambdaBodyMultipleOccurrences.java | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) 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()); }