| Index: pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
|
| diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
|
| index 4f79dc7ae13b81e063a9add6cb73d6e5645ffe0f..fdee7212086a1f5d03bf5c75a44d7442b1a68f34 100644
|
| --- a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
|
| +++ b/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
|
| @@ -137,7 +137,6 @@ class InlineLocalRefactoringImpl extends RefactoringImpl implements
|
| // prepare initializer
|
| Expression initializer = _variableNode.initializer;
|
| String initializerCode = utils.getNodeText(initializer);
|
| - int initializerPrecedence = getExpressionPrecedence(initializer);
|
| // replace references
|
| for (SearchMatch reference in _references) {
|
| SourceRange range = reference.sourceRange;
|
| @@ -171,7 +170,7 @@ class InlineLocalRefactoringImpl extends RefactoringImpl implements
|
| } else {
|
| codeForReference = initializerCode;
|
| }
|
| - } else if (initializerPrecedence < getExpressionParentPrecedence(node)) {
|
| + } else if (_shouldUseParenthesis(initializer, node)) {
|
| codeForReference = '($initializerCode)';
|
| } else {
|
| codeForReference = initializerCode;
|
| @@ -195,4 +194,25 @@ class InlineLocalRefactoringImpl extends RefactoringImpl implements
|
| return targetType == TokenType.STRING_INTERPOLATION_IDENTIFIER &&
|
| expression is! SimpleIdentifier;
|
| }
|
| +
|
| + static bool _shouldUseParenthesis(Expression init, AstNode node) {
|
| + // check precedence
|
| + int initPrecedence = getExpressionPrecedence(init);
|
| + if (initPrecedence < getExpressionParentPrecedence(node)) {
|
| + return true;
|
| + }
|
| + // special case for '-'
|
| + AstNode parent = node.parent;
|
| + if (init is PrefixExpression && parent is PrefixExpression) {
|
| + if (parent.operator.type == TokenType.MINUS) {
|
| + TokenType initializerOperator = init.operator.type;
|
| + if (initializerOperator == TokenType.MINUS ||
|
| + initializerOperator == TokenType.MINUS_MINUS) {
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| + // no () is needed
|
| + return false;
|
| + }
|
| }
|
|
|