Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Side by Side Diff: pkg/analyzer/lib/src/kernel/resynthesize.dart

Issue 2992083002: Resynthesize typedefs from Kernel. (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'package:analyzer/dart/ast/ast.dart'; 5 import 'package:analyzer/dart/ast/ast.dart';
6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
7 import 'package:analyzer/dart/ast/token.dart'; 7 import 'package:analyzer/dart/ast/token.dart';
8 import 'package:analyzer/dart/element/element.dart'; 8 import 'package:analyzer/dart/element/element.dart';
9 import 'package:analyzer/dart/element/type.dart'; 9 import 'package:analyzer/dart/element/type.dart';
10 import 'package:analyzer/src/dart/element/element.dart'; 10 import 'package:analyzer/src/dart/element/element.dart';
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 } 476 }
477 return new _ExprBuilder(this).buildInitializer(k); 477 return new _ExprBuilder(this).buildInitializer(k);
478 } 478 }
479 479
480 @override 480 @override
481 Expression getExpression(kernel.Expression expression) { 481 Expression getExpression(kernel.Expression expression) {
482 return new _ExprBuilder(this).build(expression); 482 return new _ExprBuilder(this).build(expression);
483 } 483 }
484 484
485 @override 485 @override
486 List<List<kernel.VariableDeclaration>> getFunctionTypeParameters(
487 kernel.FunctionType type) {
488 int positionalCount = type.positionalParameters.length;
489 var positionalParameters =
490 new List<kernel.VariableDeclaration>(positionalCount);
491 for (int i = 0; i < positionalCount; i++) {
492 String name = i < type.positionalParameterNames.length
493 ? type.positionalParameterNames[i]
494 : 'arg_$i';
495 positionalParameters[i] = new kernel.VariableDeclaration(name,
496 type: type.positionalParameters[i]);
497 }
498
499 var namedParameters = type.namedParameters
500 .map((k) => new kernel.VariableDeclaration(k.name, type: k.type))
501 .toList(growable: false);
502
503 return [positionalParameters, namedParameters];
504 }
505
506 @override
486 InterfaceType getInterfaceType( 507 InterfaceType getInterfaceType(
487 ElementImpl context, kernel.Supertype kernelType) { 508 ElementImpl context, kernel.Supertype kernelType) {
488 return _getInterfaceType( 509 return _getInterfaceType(
489 context, kernelType.className.canonicalName, kernelType.typeArguments); 510 context, kernelType.className.canonicalName, kernelType.typeArguments);
490 } 511 }
491 512
492 @override 513 @override
493 LibraryElement getLibrary(String uriStr) { 514 LibraryElement getLibrary(String uriStr) {
494 return _resynthesizer.getLibrary(uriStr); 515 return _resynthesizer.getLibrary(uriStr);
495 } 516 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 } 554 }
534 555
535 if (kernelType is kernel.FunctionType) { 556 if (kernelType is kernel.FunctionType) {
536 var functionElement = new FunctionElementImpl.synthetic([], null); 557 var functionElement = new FunctionElementImpl.synthetic([], null);
537 functionElement.enclosingElement = context; 558 functionElement.enclosingElement = context;
538 559
539 functionElement.typeParameters = kernelType.typeParameters.map((k) { 560 functionElement.typeParameters = kernelType.typeParameters.map((k) {
540 return new TypeParameterElementImpl.forKernel(functionElement, k); 561 return new TypeParameterElementImpl.forKernel(functionElement, k);
541 }).toList(growable: false); 562 }).toList(growable: false);
542 563
564 var parameters = getFunctionTypeParameters(kernelType);
543 functionElement.parameters = ParameterElementImpl.forKernelParameters( 565 functionElement.parameters = ParameterElementImpl.forKernelParameters(
544 functionElement, 566 functionElement,
545 kernelType.requiredParameterCount, 567 kernelType.requiredParameterCount,
546 kernelType.positionalParameters 568 parameters[0],
547 .map((t) => new kernel.VariableDeclaration(null, type: t)) 569 parameters[1]);
548 .toList(),
549 kernelType.namedParameters
550 .map((t) => new kernel.VariableDeclaration(t.name, type: t.type))
551 .toList());
552 570
553 functionElement.returnType = 571 functionElement.returnType =
554 getType(functionElement, kernelType.returnType); 572 getType(functionElement, kernelType.returnType);
555 return functionElement.type; 573 return functionElement.type;
556 } 574 }
557 575
558 // TODO(scheglov) Support other kernel types. 576 // TODO(scheglov) Support other kernel types.
559 throw new UnimplementedError('For ${kernelType.runtimeType}'); 577 throw new UnimplementedError('For ${kernelType.runtimeType}');
560 } 578 }
561 579
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 for (var typeParameter in ctx.typeParameters) { 705 for (var typeParameter in ctx.typeParameters) {
688 if (typeParameter.name == name) { 706 if (typeParameter.name == name) {
689 return typeParameter; 707 return typeParameter;
690 } 708 }
691 } 709 }
692 } 710 }
693 } 711 }
694 throw new StateError('Not found $kernelTypeParameter in $context'); 712 throw new StateError('Not found $kernelTypeParameter in $context');
695 } 713 }
696 } 714 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | pkg/analyzer/test/src/summary/resynthesize_common.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698