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

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

Issue 2987863002: Resynthesize factoring constructor redirects from Kernel. (Closed)
Patch Set: Created 3 years, 5 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';
11 import 'package:analyzer/src/dart/element/type.dart'; 11 import 'package:analyzer/src/dart/element/type.dart';
12 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; 12 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
13 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; 13 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
14 import 'package:front_end/src/base/source.dart'; 14 import 'package:front_end/src/base/source.dart';
15 import 'package:front_end/src/fasta/kernel/redirecting_factory_body.dart';
15 import 'package:kernel/kernel.dart' as kernel; 16 import 'package:kernel/kernel.dart' as kernel;
16 import 'package:kernel/type_environment.dart' as kernel; 17 import 'package:kernel/type_environment.dart' as kernel;
17 18
18 /** 19 /**
19 * Object that can resynthesize analyzer [LibraryElement] from Kernel. 20 * Object that can resynthesize analyzer [LibraryElement] from Kernel.
20 */ 21 */
21 class KernelResynthesizer { 22 class KernelResynthesizer {
22 final AnalysisContext _analysisContext; 23 final AnalysisContext _analysisContext;
23 final kernel.TypeEnvironment _types; 24 final kernel.TypeEnvironment _types;
24 final Map<String, kernel.Library> _kernelMap; 25 final Map<String, kernel.Library> _kernelMap;
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 ConstructorElementImpl constructor, kernel.Initializer k) { 388 ConstructorElementImpl constructor, kernel.Initializer k) {
388 if (k is kernel.LocalInitializer || 389 if (k is kernel.LocalInitializer ||
389 k is kernel.FieldInitializer && k.isSynthetic || 390 k is kernel.FieldInitializer && k.isSynthetic ||
390 k is kernel.SuperInitializer && k.isSynthetic) { 391 k is kernel.SuperInitializer && k.isSynthetic) {
391 return null; 392 return null;
392 } 393 }
393 return new _ExprBuilder(this).buildInitializer(k); 394 return new _ExprBuilder(this).buildInitializer(k);
394 } 395 }
395 396
396 @override 397 @override
397 ElementImpl getElement(kernel.Reference reference) {
398 return _getElement(reference.canonicalName);
399 }
400
401 @override
402 Expression getExpression(kernel.Expression expression) { 398 Expression getExpression(kernel.Expression expression) {
403 return new _ExprBuilder(this).build(expression); 399 return new _ExprBuilder(this).build(expression);
404 } 400 }
405 401
406 @override 402 @override
407 InterfaceType getInterfaceType( 403 InterfaceType getInterfaceType(
408 ElementImpl context, kernel.Supertype kernelType) { 404 ElementImpl context, kernel.Supertype kernelType) {
409 return _getInterfaceType( 405 return _getInterfaceType(
410 context, kernelType.className.canonicalName, kernelType.typeArguments); 406 context, kernelType.className.canonicalName, kernelType.typeArguments);
411 } 407 }
412 408
413 @override 409 @override
414 LibraryElement getLibrary(String uriStr) { 410 LibraryElement getLibrary(String uriStr) {
415 return _resynthesizer.getLibrary(uriStr); 411 return _resynthesizer.getLibrary(uriStr);
416 } 412 }
417 413
414 @override
415 ConstructorElementImpl getRedirectedConstructor(
416 kernel.Constructor kernelConstructor, kernel.Procedure kernelFactory) {
417 if (kernelConstructor != null) {
418 for (var initializer in kernelConstructor.initializers) {
419 if (initializer is kernel.RedirectingInitializer) {
420 return _getElement(initializer.targetReference.canonicalName)
421 as ConstructorElementImpl;
422 }
423 }
424 }
425 if (kernelFactory != null) {
426 kernel.Statement body = kernelFactory.function.body;
427 if (body is RedirectingFactoryBody) {
428 kernel.Member target = body.target;
429 if (target != null) {
430 return _getElement(target.reference.canonicalName)
431 as ConstructorElementImpl;
432 }
433 }
434 }
435 return null;
436 }
437
418 DartType getType(ElementImpl context, kernel.DartType kernelType) { 438 DartType getType(ElementImpl context, kernel.DartType kernelType) {
419 if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance; 439 if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance;
420 if (kernelType is kernel.VoidType) return VoidTypeImpl.instance; 440 if (kernelType is kernel.VoidType) return VoidTypeImpl.instance;
421 441
422 if (kernelType is kernel.InterfaceType) { 442 if (kernelType is kernel.InterfaceType) {
423 return _getInterfaceType(context, kernelType.className.canonicalName, 443 return _getInterfaceType(context, kernelType.className.canonicalName,
424 kernelType.typeArguments); 444 kernelType.typeArguments);
425 } 445 }
426 446
427 if (kernelType is kernel.TypeParameterType) { 447 if (kernelType is kernel.TypeParameterType) {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 for (var typeParameter in ctx.typeParameters) { 582 for (var typeParameter in ctx.typeParameters) {
563 if (typeParameter.name == name) { 583 if (typeParameter.name == name) {
564 return typeParameter; 584 return typeParameter;
565 } 585 }
566 } 586 }
567 } 587 }
568 } 588 }
569 throw new StateError('Not found $kernelTypeParameter in $context'); 589 throw new StateError('Not found $kernelTypeParameter in $context');
570 } 590 }
571 } 591 }
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