Skip to content

Analyzer: More crashes on new "Function" syntax #31107

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
matanlurey opened this issue Oct 15, 2017 · 3 comments
Closed

Analyzer: More crashes on new "Function" syntax #31107

matanlurey opened this issue Oct 15, 2017 · 3 comments
Labels
legacy-area-analyzer Use area-devexp instead. type-bug Incorrect behavior (everything from a crash to more subtle misbehavior)

Comments

@matanlurey
Copy link
Contributor

Analyzer Feedback from IntelliJ

Version information

  • IDEA IU-171.4694.70
  • 2.0.0-dev.3.0
  • IU-171.4694.70, JRE 1.8.0_112-release-736-b21x64 JetBrains s.r.o, OS Mac OS X(x86_64) v10.12.6 unknown, screens 3440x1440, 1080x1920
Dart analysis server, SDK version 2.0.0-dev.3.0, server version 1.18.4, error: Analysis failed: /.../lib/src/schema.dart context: exception_20171015_103716_986
NoSuchMethodError: The getter 'element' was called on null.
Receiver: null
Tried calling: element
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:44)
#1      TypeResolverVisitor.visitGenericFunctionType (package:analyzer/src/generated/resolver.dart:9678)
#2      GenericFunctionTypeImpl.accept (package:analyzer/src/dart/ast/ast.dart:5732)
#3      FieldFormalParameterImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:4513)
#4      UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3121)
#5      TypeResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:9839)
#6      UnifyingAstVisitor.visitFieldFormalParameter (package:analyzer/dart/ast/visitor.dart:3014)
#7      TypeResolverVisitor.visitFieldFormalParameter (package:analyzer/src/generated/resolver.dart:9608)
#8      FieldFormalParameterImpl.accept (package:analyzer/src/dart/ast/ast.dart:4508)
#9      DefaultFormalParameterImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:3469)
#10     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3121)
#11     TypeResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:9839)
#12     UnifyingAstVisitor.visitDefaultFormalParameter (package:analyzer/dart/ast/visitor.dart:2974)

I have isolated the crash to this pattern:

class Schema<T> {
  final String name;

  final Map<String, Object> Function(T) decode;
  final T Function(Map<String, Object>) encode;

  const Schema({
    @required this.name,
    Map<String, Object> Function(T) this.decode,
    T Function(Map<String, Object>) this.encode,
  });
}

... or specifically, the initializing formals (this.*).

I can temporarily fix it by manually initializing the fields:

class Schema<T> {
  final String name;

  final Map<String, Object> Function(T) decode;
  final T Function(Map<String, Object>) encode;

  const Schema({
    @required this.name,
    Map<String, Object> Function(T) decode,
    T Function(Map<String, Object>) encode,
  // TODO: Use initializing formals after crashes stop:
  //
  // ignore: prefer_initializing_formals
  }) : decode = decode, encode = encode;
}
@lrhn lrhn added legacy-area-analyzer Use area-devexp instead. type-bug Incorrect behavior (everything from a crash to more subtle misbehavior) labels Oct 16, 2017
@lrhn
Copy link
Member

lrhn commented Oct 16, 2017

As a side note, it's generally recommended to not write types on initializing formals. They automatically inherit the type of the field they initialize, even in Dart 1.

@matanlurey
Copy link
Contributor Author

Sure, this was a mistake on my part, but the analyzer still shouldn't crash :)

@kevmoo
Copy link
Member

kevmoo commented Nov 1, 2017

Also crashes with Dart 2.0.0-dev.5.0

NoSuchMethodError: The getter 'element' was called on null.
Receiver: null
Tried calling: element
#0      Object.noSuchMethod (dart:core-patch/dart:core/object_patch.dart:46)
#1      TypeResolverVisitor.visitGenericFunctionType (package:analyzer/src/generated/resolver.dart:9700)
#2      GenericFunctionTypeImpl.accept (package:analyzer/src/dart/ast/ast.dart:5729)
#3      FieldFormalParameterImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:4516)
#4      UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3121)
#5      TypeResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:9861)
#6      UnifyingAstVisitor.visitFieldFormalParameter (package:analyzer/dart/ast/visitor.dart:3014)
#7      TypeResolverVisitor.visitFieldFormalParameter (package:analyzer/src/generated/resolver.dart:9630)
#8      FieldFormalParameterImpl.accept (package:analyzer/src/dart/ast/ast.dart:4511)
#9      DefaultFormalParameterImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:3469)
#10     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3121)
#11     TypeResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:9861)
#12     UnifyingAstVisitor.visitDefaultFormalParameter (package:analyzer/dart/ast/visitor.dart:2974)
#13     DefaultFormalParameterImpl.accept (package:analyzer/src/dart/ast/ast.dart:3465)
#14     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:7987)
#15     FormalParameterListImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:4818)
#16     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3121)
#17     TypeResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:9861)
#18     UnifyingAstVisitor.visitFormalParameterList (package:analyzer/dart/ast/visitor.dart:3020)
#19     ScopedVisitor.visitFormalParameterList (package:analyzer/src/generated/resolver.dart:7267)
#20     FormalParameterListImpl.accept (package:analyzer/src/dart/ast/ast.dart:4814)
#21     ScopedVisitor.visitConstructorDeclaration (package:analyzer/src/generated/resolver.dart:7153)
#22     TypeResolverVisitor.visitConstructorDeclaration (package:analyzer/src/generated/resolver.dart:9591)
#23     ConstructorDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:2967)
#24     TypeResolverVisitor.visitClassMembersInScope (package:analyzer/src/generated/resolver.dart:9568)
#25     ScopedVisitor.visitClassDeclaration (package:analyzer/src/generated/resolver.dart:7088)
#26     TypeResolverVisitor.visitClassDeclaration (package:analyzer/src/generated/resolver.dart:9509)
#27     ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:1906)
#28     NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:7987)
#29     CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2502)
#30     UnifyingAstVisitor.visitNode (package:analyzer/dart/ast/visitor.dart:3121)
#31     TypeResolverVisitor.visitNode (package:analyzer/src/generated/resolver.dart:9861)
#32     UnifyingAstVisitor.visitCompilationUnit (package:analyzer/dart/ast/visitor.dart:2949)
#33     CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:2495)
#34     LibraryAnalyzer._resolveFile (package:analyzer/src/dart/analysis/library_analyzer.dart:555)
#35     LibraryAnalyzer._analyze.<anonymous closure> (package:analyzer/src/dart/analysis/library_analyzer.dart:100)
#36     _HashVMBase&MapMixin&&_LinkedHashMapMixin.forEach (dart:collection-patch/dart:collection/compact_hash.dart:360)
#37     LibraryAnalyzer._analyze (package:analyzer/src/dart/analysis/library_analyzer.dart:99)
#38     LibraryAnalyzer.analyze.<anonymous closure> (package:analyzer/src/dart/analysis/library_analyzer.dart:75)
#39     _PerformanceTagImpl.makeCurrentWhile (package:analyzer/src/generated/utilities_general.dart:200)
#40     LibraryAnalyzer.analyze (package:analyzer/src/dart/analysis/library_analyzer.dart:74)
#41     AnalysisDriver._computeAnalysisResult.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1210)
<asynchronous suspension>
#42     PerformanceLog.runAsync (package:front_end/src/base/performace_logger.dart:52)
<asynchronous suspension>
#43     AnalysisDriver._computeAnalysisResult (package:analyzer/src/dart/analysis/driver.dart:1172)
<asynchronous suspension>
#44     AnalysisDriver.getErrors (package:analyzer/src/dart/analysis/driver.dart:617)
<asynchronous suspension>
#45     AnalyzerImpl.prepareErrors (package:analyzer_cli/src/analyzer_impl.dart:133)
<asynchronous suspension>
#46     AnalyzerImpl._analyze (package:analyzer_cli/src/analyzer_impl.dart:178)
<asynchronous suspension>
#47     AnalyzerImpl.analyze (package:analyzer_cli/src/analyzer_impl.dart:109)
<asynchronous suspension>
#48     Driver._runAnalyzer (package:analyzer_cli/src/driver.dart:778)
#49     Driver._analyzeAllImpl (package:analyzer_cli/src/driver.dart:328)
<asynchronous suspension>
#50     Driver._analyzeAll (package:analyzer_cli/src/driver.dart:226)
<asynchronous suspension>
#51     Driver.start (package:analyzer_cli/src/driver.dart:195)
<asynchronous suspension>
#52     main (file:///b/build/slave/dart-sdk-mac-dev/build/sdk/pkg/analyzer_cli/bin/analyzer.dart:13)
<asynchronous suspension>
#53     _startIsolate.<anonymous closure> (dart:isolate-patch/dart:isolate/isolate_patch.dart:275)
#54     _RawReceivePortImpl._handleMessage (dart:isolate-patch/dart:isolate/isolate_patch.dart:163)

#0      AnalysisDriver._computeAnalysisResult.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1250)
<asynchronous suspension>
#1      PerformanceLog.runAsync (package:front_end/src/base/performace_logger.dart:52)
<asynchronous suspension>
#2      AnalysisDriver._computeAnalysisResult (package:analyzer/src/dart/analysis/driver.dart:1172)
<asynchronous suspension>
#3      AnalysisDriver.getErrors (package:analyzer/src/dart/analysis/driver.dart:617)
<asynchronous suspension>
#4      AnalyzerImpl.prepareErrors (package:analyzer_cli/src/analyzer_impl.dart:133)
<asynchronous suspension>
#5      AnalyzerImpl._analyze (package:analyzer_cli/src/analyzer_impl.dart:178)
<asynchronous suspension>
#6      AnalyzerImpl.analyze (package:analyzer_cli/src/analyzer_impl.dart:109)
<asynchronous suspension>
#7      Driver._runAnalyzer (package:analyzer_cli/src/driver.dart:778)
#8      Driver._analyzeAllImpl (package:analyzer_cli/src/driver.dart:328)
<asynchronous suspension>
#9      Driver._analyzeAll (package:analyzer_cli/src/driver.dart:226)
<asynchronous suspension>
#10     Driver.start (package:analyzer_cli/src/driver.dart:195)
<asynchronous suspension>
#11     main (file:///b/build/slave/dart-sdk-mac-dev/build/sdk/pkg/analyzer_cli/bin/analyzer.dart:13)
<asynchronous suspension>
#12     _startIsolate.<anonymous closure> (dart:isolate-patch/dart:isolate/isolate_patch.dart:275)
#13     _RawReceivePortImpl._handleMessage (dart:isolate-patch/dart:isolate/isolate_patch.dart:163)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
legacy-area-analyzer Use area-devexp instead. type-bug Incorrect behavior (everything from a crash to more subtle misbehavior)
Projects
None yet
Development

No branches or pull requests

3 participants