Index: pkg/analysis_server/lib/src/services/correction/fix_internal.dart |
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart |
index 9e3477b4dce29f00813391a06d2758eb4cf1747e..716b2de1a80c2ddce9d0ae64dba2cdfc9a5ed938 100644 |
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart |
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart |
@@ -35,8 +35,10 @@ import 'package:analyzer/src/dart/ast/utilities.dart'; |
import 'package:analyzer/src/dart/element/element.dart'; |
import 'package:analyzer/src/dart/element/member.dart'; |
import 'package:analyzer/src/dart/element/type.dart'; |
+import 'package:analyzer/src/dart/resolver/inheritance_manager.dart'; |
import 'package:analyzer/src/error/codes.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
+import 'package:analyzer/src/generated/error_verifier.dart'; |
import 'package:analyzer/src/generated/java_core.dart'; |
import 'package:analyzer/src/generated/parser.dart'; |
import 'package:analyzer/src/generated/sdk.dart'; |
@@ -287,15 +289,7 @@ class FixProcessor { |
_addFix_makeEnclosingClassAbstract(); |
_addFix_createNoSuchMethod(); |
// implement methods |
- // TODO(scheglov) Fix another way to get unimplemented methods. |
- // AnalysisErrorWithProperties does not work with the new analysis driver. |
- if (error is AnalysisErrorWithProperties) { |
- AnalysisErrorWithProperties errorWithProperties = |
- error as AnalysisErrorWithProperties; |
- List<ExecutableElement> missingOverrides = errorWithProperties |
- .getProperty(ErrorProperty.UNIMPLEMENTED_METHODS); |
- _addFix_createMissingOverrides(missingOverrides); |
- } |
+ _addFix_createMissingOverrides(); |
} |
if (errorCode == StaticWarningCode.CAST_TO_NON_TYPE || |
errorCode == StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME || |
@@ -1279,9 +1273,19 @@ class FixProcessor { |
_addFix(DartFixKind.CREATE_LOCAL_VARIABLE, [name]); |
} |
- void _addFix_createMissingOverrides(List<ExecutableElement> elements) { |
- elements = elements.toList(); |
- int numElements = elements.length; |
+ void _addFix_createMissingOverrides() { |
+ // prepare target |
+ ClassDeclaration targetClass = node.parent as ClassDeclaration; |
+ ClassElement targetClassElement = targetClass.element; |
+ utils.targetClassElement = targetClassElement; |
+ List<ExecutableElement> elements = ErrorVerifier |
+ .computeMissingOverrides( |
+ context.analysisOptions.strongMode, |
+ context.typeProvider, |
+ context.typeSystem, |
+ new InheritanceManager(unitLibraryElement), |
+ targetClassElement) |
+ .toList(); |
// sort by name, getters before setters |
elements.sort((Element a, Element b) { |
int names = compareStrings(a.displayName, b.displayName); |
@@ -1293,9 +1297,6 @@ class FixProcessor { |
} |
return 1; |
}); |
- // prepare target |
- ClassDeclaration targetClass = node.parent as ClassDeclaration; |
- utils.targetClassElement = targetClass.element; |
// prepare SourceBuilder |
int insertOffset = targetClass.end - 1; |
SourceBuilder sb = new SourceBuilder(file, insertOffset); |
@@ -1310,6 +1311,7 @@ class FixProcessor { |
// merge getter/setter pairs into fields |
String prefix = utils.getIndent(1); |
+ int numElements = elements.length; |
for (int i = 0; i < elements.length; i++) { |
ExecutableElement element = elements[i]; |
if (element.kind == ElementKind.GETTER && i + 1 < elements.length) { |