| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library analysis_server.src.services.correction.fix_internal; | 5 library analysis_server.src.services.correction.fix_internal; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 import 'dart:core'; | 9 import 'dart:core'; |
| 10 | 10 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 import 'package:analyzer/src/dart/element/ast_provider.dart'; | 39 import 'package:analyzer/src/dart/element/ast_provider.dart'; |
| 40 import 'package:analyzer/src/dart/element/element.dart'; | 40 import 'package:analyzer/src/dart/element/element.dart'; |
| 41 import 'package:analyzer/src/dart/element/member.dart'; | 41 import 'package:analyzer/src/dart/element/member.dart'; |
| 42 import 'package:analyzer/src/dart/element/type.dart'; | 42 import 'package:analyzer/src/dart/element/type.dart'; |
| 43 import 'package:analyzer/src/dart/resolver/inheritance_manager.dart'; | 43 import 'package:analyzer/src/dart/resolver/inheritance_manager.dart'; |
| 44 import 'package:analyzer/src/error/codes.dart'; | 44 import 'package:analyzer/src/error/codes.dart'; |
| 45 import 'package:analyzer/src/generated/engine.dart'; | 45 import 'package:analyzer/src/generated/engine.dart'; |
| 46 import 'package:analyzer/src/generated/error_verifier.dart'; | 46 import 'package:analyzer/src/generated/error_verifier.dart'; |
| 47 import 'package:analyzer/src/generated/java_core.dart'; | 47 import 'package:analyzer/src/generated/java_core.dart'; |
| 48 import 'package:analyzer/src/generated/parser.dart'; | 48 import 'package:analyzer/src/generated/parser.dart'; |
| 49 import 'package:analyzer/src/generated/sdk.dart'; | |
| 50 import 'package:analyzer/src/generated/source.dart'; | 49 import 'package:analyzer/src/generated/source.dart'; |
| 51 import 'package:analyzer/src/generated/utilities_dart.dart'; | 50 import 'package:analyzer/src/generated/utilities_dart.dart'; |
| 52 import 'package:analyzer/src/task/dart.dart'; | |
| 53 import 'package:path/path.dart'; | 51 import 'package:path/path.dart'; |
| 54 | 52 |
| 55 /** | 53 /** |
| 56 * A predicate is a one-argument function that returns a boolean value. | 54 * A predicate is a one-argument function that returns a boolean value. |
| 57 */ | 55 */ |
| 58 typedef bool ElementPredicate(Element argument); | 56 typedef bool ElementPredicate(Element argument); |
| 59 | 57 |
| 60 /** | 58 /** |
| 61 * The implementation of [DartFixContext]. | 59 * The implementation of [DartFixContext]. |
| 62 * | 60 * |
| (...skipping 1547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1610 } | 1608 } |
| 1611 // don't add this library again | 1609 // don't add this library again |
| 1612 alreadyImportedWithPrefix.add(libraryElement.source); | 1610 alreadyImportedWithPrefix.add(libraryElement.source); |
| 1613 // update library | 1611 // update library |
| 1614 String newShowCode = 'show ${showNames.join(', ')}'; | 1612 String newShowCode = 'show ${showNames.join(', ')}'; |
| 1615 _addReplaceEdit( | 1613 _addReplaceEdit( |
| 1616 rf.rangeOffsetEnd(showCombinator), newShowCode, unitLibraryElement); | 1614 rf.rangeOffsetEnd(showCombinator), newShowCode, unitLibraryElement); |
| 1617 _addFix(DartFixKind.IMPORT_LIBRARY_SHOW, [libraryName]); | 1615 _addFix(DartFixKind.IMPORT_LIBRARY_SHOW, [libraryName]); |
| 1618 } | 1616 } |
| 1619 } | 1617 } |
| 1620 // check SDK libraries | 1618 // Find new top-level declarations. |
| 1621 { | |
| 1622 DartSdk sdk = context.sourceFactory.dartSdk; | |
| 1623 List<SdkLibrary> sdkLibraries = sdk.sdkLibraries; | |
| 1624 for (SdkLibrary sdkLibrary in sdkLibraries) { | |
| 1625 SourceFactory sdkSourceFactory = context.sourceFactory; | |
| 1626 String libraryUri = sdkLibrary.shortName; | |
| 1627 Source librarySource = | |
| 1628 sdkSourceFactory.resolveUri(unitSource, libraryUri); | |
| 1629 // maybe already imported | |
| 1630 if (alreadyImportedWithPrefix.contains(librarySource)) { | |
| 1631 continue; | |
| 1632 } | |
| 1633 // prepare LibraryElement | |
| 1634 LibraryElement libraryElement = | |
| 1635 context.getResult(librarySource, LIBRARY_ELEMENT1); | |
| 1636 if (libraryElement == null) { | |
| 1637 continue; | |
| 1638 } | |
| 1639 // prepare exported Element | |
| 1640 Element element = getExportedElement(libraryElement, name); | |
| 1641 if (element == null) { | |
| 1642 continue; | |
| 1643 } | |
| 1644 if (element is PropertyAccessorElement) { | |
| 1645 element = (element as PropertyAccessorElement).variable; | |
| 1646 } | |
| 1647 if (!elementKinds.contains(element.kind)) { | |
| 1648 continue; | |
| 1649 } | |
| 1650 // add import | |
| 1651 _addFix_importLibrary( | |
| 1652 DartFixKind.IMPORT_LIBRARY_SDK, libraryElement.source); | |
| 1653 } | |
| 1654 } | |
| 1655 // check project libraries | |
| 1656 { | 1619 { |
| 1657 List<TopLevelDeclarationInSource> declarations = | 1620 List<TopLevelDeclarationInSource> declarations = |
| 1658 await getTopLevelDeclarations(name); | 1621 await getTopLevelDeclarations(name); |
| 1659 for (TopLevelDeclarationInSource declaration in declarations) { | 1622 for (TopLevelDeclarationInSource declaration in declarations) { |
| 1660 // Check the kind. | 1623 // Check the kind. |
| 1661 if (declaration.declaration.kind != kind2) { | 1624 if (declaration.declaration.kind != kind2) { |
| 1662 continue; | 1625 continue; |
| 1663 } | 1626 } |
| 1664 // Check the source. | 1627 // Check the source. |
| 1665 Source librarySource = declaration.source; | 1628 Source librarySource = declaration.source; |
| 1666 if (librarySource.isInSystemLibrary) { | |
| 1667 continue; | |
| 1668 } | |
| 1669 if (alreadyImportedWithPrefix.contains(librarySource)) { | 1629 if (alreadyImportedWithPrefix.contains(librarySource)) { |
| 1670 continue; | 1630 continue; |
| 1671 } | 1631 } |
| 1672 // Compute the fix kind. | 1632 // Compute the fix kind. |
| 1673 FixKind fixKind; | 1633 FixKind fixKind; |
| 1674 if (_isLibSrcPath(librarySource.fullName)) { | 1634 if (librarySource.isInSystemLibrary) { |
| 1635 fixKind = DartFixKind.IMPORT_LIBRARY_SDK; |
| 1636 } else if (_isLibSrcPath(librarySource.fullName)) { |
| 1675 // Bad: non-API. | 1637 // Bad: non-API. |
| 1676 fixKind = DartFixKind.IMPORT_LIBRARY_PROJECT3; | 1638 fixKind = DartFixKind.IMPORT_LIBRARY_PROJECT3; |
| 1677 } else if (declaration.isExported) { | 1639 } else if (declaration.isExported) { |
| 1678 // Ugly: exports. | 1640 // Ugly: exports. |
| 1679 fixKind = DartFixKind.IMPORT_LIBRARY_PROJECT2; | 1641 fixKind = DartFixKind.IMPORT_LIBRARY_PROJECT2; |
| 1680 } else { | 1642 } else { |
| 1681 // Good: direct declaration. | 1643 // Good: direct declaration. |
| 1682 fixKind = DartFixKind.IMPORT_LIBRARY_PROJECT1; | 1644 fixKind = DartFixKind.IMPORT_LIBRARY_PROJECT1; |
| 1683 } | 1645 } |
| 1684 // Add the fix. | 1646 // Add the fix. |
| (...skipping 1374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3059 } | 3021 } |
| 3060 } | 3022 } |
| 3061 } | 3023 } |
| 3062 | 3024 |
| 3063 void _updateList(Iterable<Element> elements) { | 3025 void _updateList(Iterable<Element> elements) { |
| 3064 for (Element element in elements) { | 3026 for (Element element in elements) { |
| 3065 _update(element); | 3027 _update(element); |
| 3066 } | 3028 } |
| 3067 } | 3029 } |
| 3068 } | 3030 } |
| OLD | NEW |