Fix for 'The getter 'isDynamic' was called on null' because of dartbug.com/28515

R=brianwilkerson@google.com, paulberry@google.com
BUG= https://github.com/dart-lang/sdk/issues/28515

Review-Url: https://codereview.chromium.org/2676713002 .
This commit is contained in:
Konstantin Shcheglov
2017-02-02 16:01:52 -08:00
parent 95b84d898e
commit 2ca71e29ea
2 changed files with 17 additions and 1 deletions
@@ -11,6 +11,7 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/exception/exception.dart';
import 'package:analyzer/src/dart/element/builder.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/generated/resolver.dart';
/**
@@ -398,7 +399,8 @@ class DeclarationResolver extends RecursiveAstVisitor<Object> {
if (node.parent.parent is FunctionTypedFormalParameter) {
// Work around dartbug.com/28515.
// TODO(paulberry): remove this once dartbug.com/28515 is fixed.
Element element = new TypeParameterElementImpl.forNode(node.name);
var element = new TypeParameterElementImpl.forNode(node.name);
element.type = new TypeParameterTypeImpl(element);
node.name?.staticElement = element;
return null;
}
@@ -862,6 +862,20 @@ main() {
expect(unitA.context.getContents(sourceB).data, 'var v = 2;');
}
test_getResult_functionTypeFormalParameter_withTypeParameter() async {
// This was code crashing because of incomplete implementation.
// Consider (re)moving after fixing dartbug.com/28515
addTestFile(r'''
class A {
int foo( bar<T extends B>() ) {}
}
class B {}
''');
AnalysisResult result = await driver.getResult(testFile);
expect(result.path, testFile);
}
test_getResult_inferTypes_finalField() async {
addTestFile(
r'''