From 2ca71e29ea07e436013fdd078f85b08a4b8fbcfd Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Thu, 2 Feb 2017 16:01:52 -0800 Subject: [PATCH] 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 . --- .../lib/src/generated/declaration_resolver.dart | 4 +++- .../test/src/dart/analysis/driver_test.dart | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart index 3fb363036a3..f87f5f6b0ed 100644 --- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart +++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart @@ -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 { 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; } diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart index a9359a11dc6..3e4e6ea7114 100644 --- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart @@ -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() ) {} +} +class B {} +'''); + + AnalysisResult result = await driver.getResult(testFile); + expect(result.path, testFile); + } + test_getResult_inferTypes_finalField() async { addTestFile( r'''