mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 11:31:57 +00:00
Issue 23337. Quick Fix for removing dead code.
R=brianwilkerson@google.com BUG= https://code.google.com/p/dart/issues/detail?id=23337 Review URL: https://codereview.chromium.org//1116593002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45447 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
parent
fd8e2db578
commit
ed2f434829
|
@ -88,6 +88,8 @@ class DartFixKind {
|
|||
const FixKind('INSERT_SEMICOLON', 50, "Insert ';'");
|
||||
static const MAKE_CLASS_ABSTRACT =
|
||||
const FixKind('MAKE_CLASS_ABSTRACT', 50, "Make class '{0}' abstract");
|
||||
static const REMOVE_DEAD_CODE =
|
||||
const FixKind('REMOVE_DEAD_CODE', 50, "Remove dead code");
|
||||
static const REMOVE_PARAMETERS_IN_GETTER_DECLARATION = const FixKind(
|
||||
'REMOVE_PARAMETERS_IN_GETTER_DECLARATION', 50,
|
||||
"Remove parameters in getter declaration");
|
||||
|
|
|
@ -79,6 +79,7 @@ class FixProcessor {
|
|||
int errorOffset;
|
||||
int errorLength;
|
||||
int errorEnd;
|
||||
SourceRange errorRange;
|
||||
AstNode node;
|
||||
AstNode coveredNode;
|
||||
|
||||
|
@ -105,6 +106,7 @@ class FixProcessor {
|
|||
errorOffset = error.offset;
|
||||
errorLength = error.length;
|
||||
errorEnd = errorOffset + errorLength;
|
||||
errorRange = new SourceRange(errorOffset, errorLength);
|
||||
node = new NodeLocator.con1(errorOffset).searchWithin(unit);
|
||||
coveredNode = new NodeLocator.con2(errorOffset, errorOffset + errorLength)
|
||||
.searchWithin(unit);
|
||||
|
@ -150,6 +152,9 @@ class FixProcessor {
|
|||
_addFix_createPartUri();
|
||||
_addFix_replaceImportUri();
|
||||
}
|
||||
if (errorCode == HintCode.DEAD_CODE) {
|
||||
_addFix_removeDeadCode();
|
||||
}
|
||||
if (errorCode == HintCode.DIVISION_OPTIMIZATION) {
|
||||
_addFix_useEffectiveIntegerDivision();
|
||||
}
|
||||
|
@ -1375,6 +1380,38 @@ class FixProcessor {
|
|||
_addFix(DartFixKind.MAKE_CLASS_ABSTRACT, [className]);
|
||||
}
|
||||
|
||||
void _addFix_removeDeadCode() {
|
||||
AstNode coveringNode = this.coveredNode;
|
||||
if (coveringNode is Expression) {
|
||||
AstNode parent = coveredNode.parent;
|
||||
if (parent is BinaryExpression) {
|
||||
if (parent.rightOperand == coveredNode) {
|
||||
_addRemoveEdit(rf.rangeEndEnd(parent.leftOperand, coveredNode));
|
||||
_addFix(DartFixKind.REMOVE_DEAD_CODE, []);
|
||||
}
|
||||
}
|
||||
} else if (coveringNode is Block) {
|
||||
Block block = coveringNode;
|
||||
List<Statement> statementsToRemove = <Statement>[];
|
||||
for (Statement statement in block.statements) {
|
||||
if (rf.rangeNode(statement).intersects(errorRange)) {
|
||||
statementsToRemove.add(statement);
|
||||
}
|
||||
}
|
||||
if (statementsToRemove.isNotEmpty) {
|
||||
SourceRange rangeToRemove =
|
||||
utils.getLinesRangeStatements(statementsToRemove);
|
||||
_addRemoveEdit(rangeToRemove);
|
||||
_addFix(DartFixKind.REMOVE_DEAD_CODE, []);
|
||||
}
|
||||
} else if (coveringNode is Statement) {
|
||||
SourceRange rangeToRemove =
|
||||
utils.getLinesRangeStatements(<Statement>[coveringNode]);
|
||||
_addRemoveEdit(rangeToRemove);
|
||||
_addFix(DartFixKind.REMOVE_DEAD_CODE, []);
|
||||
}
|
||||
}
|
||||
|
||||
void _addFix_removeParameters_inGetterDeclaration() {
|
||||
if (node is SimpleIdentifier && node.parent is MethodDeclaration) {
|
||||
MethodDeclaration method = node.parent as MethodDeclaration;
|
||||
|
|
|
@ -2449,6 +2449,56 @@ main(p) {
|
|||
}
|
||||
}
|
||||
|
||||
void test_removeDeadCode_condition() {
|
||||
resolveTestUnit('''
|
||||
main(int p) {
|
||||
if (true || p > 5) {
|
||||
print(1);
|
||||
}
|
||||
}
|
||||
''');
|
||||
assertHasFix(DartFixKind.REMOVE_DEAD_CODE, '''
|
||||
main(int p) {
|
||||
if (true) {
|
||||
print(1);
|
||||
}
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
void test_removeDeadCode_statements_one() {
|
||||
resolveTestUnit('''
|
||||
int main() {
|
||||
print(0);
|
||||
return 42;
|
||||
print(1);
|
||||
}
|
||||
''');
|
||||
assertHasFix(DartFixKind.REMOVE_DEAD_CODE, '''
|
||||
int main() {
|
||||
print(0);
|
||||
return 42;
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
void test_removeDeadCode_statements_two() {
|
||||
resolveTestUnit('''
|
||||
int main() {
|
||||
print(0);
|
||||
return 42;
|
||||
print(1);
|
||||
print(2);
|
||||
}
|
||||
''');
|
||||
assertHasFix(DartFixKind.REMOVE_DEAD_CODE, '''
|
||||
int main() {
|
||||
print(0);
|
||||
return 42;
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
void test_removeParentheses_inGetterDeclaration() {
|
||||
resolveTestUnit('''
|
||||
class A {
|
||||
|
|
Loading…
Reference in a new issue