More accurate deparenthesize (keeping annotations) in some IDE actions

So #KT-19004 Fixed
This commit is contained in:
Mikhail Glukhikh
2017-07-20 14:51:44 +03:00
parent 7fb78a0372
commit e6872c52a3
15 changed files with 132 additions and 9 deletions
@@ -68,14 +68,24 @@ public class KtPsiUtil {
@NotNull
public static KtExpression safeDeparenthesize(@NotNull KtExpression expression) {
KtExpression deparenthesized = deparenthesize(expression);
return safeDeparenthesize(expression, false);
}
@NotNull
public static KtExpression safeDeparenthesize(@NotNull KtExpression expression, boolean keepAnnotations) {
KtExpression deparenthesized = deparenthesize(expression, keepAnnotations);
return deparenthesized != null ? deparenthesized : expression;
}
@Nullable
public static KtExpression deparenthesize(@Nullable KtExpression expression ) {
public static KtExpression deparenthesize(@Nullable KtExpression expression) {
return deparenthesize(expression, false);
}
@Nullable
public static KtExpression deparenthesize(@Nullable KtExpression expression, boolean keepAnnotations) {
while (true) {
KtExpression baseExpression = deparenthesizeOnce(expression);
KtExpression baseExpression = deparenthesizeOnce(expression, keepAnnotations);
if (baseExpression == expression) return baseExpression;
expression = baseExpression;
@@ -86,7 +96,14 @@ public class KtPsiUtil {
public static KtExpression deparenthesizeOnce(
@Nullable KtExpression expression
) {
if (expression instanceof KtAnnotatedExpression) {
return deparenthesizeOnce(expression, false);
}
@Nullable
public static KtExpression deparenthesizeOnce(
@Nullable KtExpression expression, boolean keepAnnotations
) {
if (expression instanceof KtAnnotatedExpression && !keepAnnotations) {
return ((KtAnnotatedExpression) expression).getBaseExpression();
}
else if (expression instanceof KtLabeledExpression) {