dart-archive / angular.dart

Legacy source repository. See github.com/dart-lang/angular
https://webdev.dartlang.org/angular/
1.25k stars 248 forks source link

Annotation fails poorly when missing an expected argument. #1737

Closed nshahan closed 7 years ago

nshahan commented 9 years ago

If an annotation is missing arguments the failure does not point to any file or line number to help pinpoint the issue. This is hard to debug.

Here is an example of the failure stack trace when an @NgOneWay with no arguments:

Build error:
Transform _Serial on xxxxxx/main.dart threw error: The null object does not have a getter 'arguments'.

NoSuchMethodError: method not found: 'arguments'
Receiver: null
Arguments: []
dart:core-patch/object_patch.dart 42                                Object._noSuchMethod
dart:core-patch/object_patch.dart 45                                Object.noSuchMethod
package:angular/tools/source_metadata_extractor.dart 188:58         DirectiveMetadataCollectingAstVisitor._extractMappingsFromClass.<fn>.<fn>
dart:collection/list.dart 63                                        Object&ListMixin.forEach
package:angular/tools/source_metadata_extractor.dart 180:25         DirectiveMetadataCollectingAstVisitor._extractMappingsFromClass.<fn>
dart:collection/list.dart 63                                        Object&ListMixin.forEach
package:angular/tools/source_metadata_extractor.dart 176:19         DirectiveMetadataCollectingAstVisitor._extractMappingsFromClass
package:angular/tools/source_metadata_extractor.dart 165:24         DirectiveMetadataCollectingAstVisitor._walkSuperclassChain
package:angular/tools/source_metadata_extractor.dart 156:25         DirectiveMetadataCollectingAstVisitor.visitClassDeclaration.<fn>
dart:collection/list.dart 63                                        Object&ListMixin.forEach
package:angular/tools/source_metadata_extractor.dart 120:20         DirectiveMetadataCollectingAstVisitor.visitClassDeclaration
package:analyzer/src/generated/ast.dart 4174:41                     ClassDeclaration.accept
package:analyzer/src/generated/ast.dart 12337:20                    NodeList.accept
package:analyzer/src/generated/ast.dart 4789:21                     CompilationUnit.visitChildren
package:analyzer/src/generated/ast.dart 14743:10                    RecursiveAstVisitor.visitCompilationUnit
package:analyzer/src/generated/ast.dart 4782:41                     CompilationUnit.accept
package:angular/tools/source_metadata_extractor.dart 207:8          DirectiveMetadataCollectingVisitor.call
dart:core/iterable.dart 217                                         Iterable.forEach
package:angular/tools/transformer/expression_generator.dart 154:10  _LibrarySourceCrawler.crawl
package:angular/tools/source_metadata_extractor.dart 27:19          SourceMetadataExtractor.gatherDirectiveInfo
package:angular/tools/transformer/expression_generator.dart 43:33   ExpressionGenerator.applyResolver
package:code_transformers/src/resolvers.dart 111:31                 Transformer&ResolverTransformer.applyToEntryPoints.<fn>.<fn>
dart:async/future.dart 118                                          Future.Future.<fn>
dart:async-patch/timer_patch.dart 16                                Timer._createTimer.<fn>
dart:isolate-patch/timer_impl.dart 385                              _Timer._runTimers
dart:isolate-patch/timer_impl.dart 414                              _Timer._handleMessage
dart:isolate-patch/isolate_patch.dart 148                           _RawReceivePortImpl._handleMessage