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

Side by Side Diff: pkg/analyzer/lib/src/dart/element/element.dart

Issue 2003863002: Issue 26466. Limited fix to pass on the dart:html test case. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Rollback the SDK change. Created 4 years, 7 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
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/resolver.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library analyzer.src.dart.element.element; 5 library analyzer.src.dart.element.element;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:math' show min; 8 import 'dart:math' show min;
9 9
10 import 'package:analyzer/dart/ast/ast.dart'; 10 import 'package:analyzer/dart/ast/ast.dart';
(...skipping 3958 matching lines...) Expand 10 before | Expand all | Expand 10 after
3969 */ 3969 */
3970 Namespace _exportNamespace; 3970 Namespace _exportNamespace;
3971 3971
3972 /** 3972 /**
3973 * The public [Namespace] of this library, `null` if it has not been 3973 * The public [Namespace] of this library, `null` if it has not been
3974 * computed yet. 3974 * computed yet.
3975 */ 3975 */
3976 Namespace _publicNamespace; 3976 Namespace _publicNamespace;
3977 3977
3978 /** 3978 /**
3979 * A bit-encoded form of the capabilities associated with this library.
3980 */
3981 int _resolutionCapabilities = 0;
3982
3983 /**
3979 * Initialize a newly created library element in the given [context] to have 3984 * Initialize a newly created library element in the given [context] to have
3980 * the given [name] and [offset]. 3985 * the given [name] and [offset].
3981 */ 3986 */
3982 LibraryElementImpl(this.context, String name, int offset, this.nameLength) 3987 LibraryElementImpl(this.context, String name, int offset, this.nameLength)
3983 : resynthesizerContext = null, 3988 : resynthesizerContext = null,
3984 _unlinkedDefiningUnit = null, 3989 _unlinkedDefiningUnit = null,
3985 super(name, offset); 3990 super(name, offset);
3986 3991
3987 /** 3992 /**
3988 * Initialize a newly created library element in the given [context] to have 3993 * Initialize a newly created library element in the given [context] to have
3989 * the given [name]. 3994 * the given [name].
3990 */ 3995 */
3991 LibraryElementImpl.forNode(this.context, LibraryIdentifier name) 3996 LibraryElementImpl.forNode(this.context, LibraryIdentifier name)
3992 : nameLength = name != null ? name.length : 0, 3997 : nameLength = name != null ? name.length : 0,
3993 resynthesizerContext = null, 3998 resynthesizerContext = null,
3994 _unlinkedDefiningUnit = null, 3999 _unlinkedDefiningUnit = null,
3995 super.forNode(name); 4000 super.forNode(name);
3996 4001
3997 /** 4002 /**
3998 * Initialize using the given serialized information. 4003 * Initialize using the given serialized information.
3999 */ 4004 */
4000 LibraryElementImpl.forSerialized(this.context, String name, int offset, 4005 LibraryElementImpl.forSerialized(this.context, String name, int offset,
4001 this.nameLength, this.resynthesizerContext, this._unlinkedDefiningUnit) 4006 this.nameLength, this.resynthesizerContext, this._unlinkedDefiningUnit)
4002 : super.forSerialized(null) { 4007 : super.forSerialized(null) {
4003 _name = name; 4008 _name = name;
4004 _nameOffset = offset; 4009 _nameOffset = offset;
4010 setResolutionCapability(
4011 LibraryResolutionCapability.resolvedTypeNames, true);
4012 setResolutionCapability(
4013 LibraryResolutionCapability.constantExpressions, true);
4005 } 4014 }
4006 4015
4007 @override 4016 @override
4008 int get codeLength { 4017 int get codeLength {
4009 CompilationUnitElement unit = _definingCompilationUnit; 4018 CompilationUnitElement unit = _definingCompilationUnit;
4010 if (unit is CompilationUnitElementImpl) { 4019 if (unit is CompilationUnitElementImpl) {
4011 return unit.codeLength; 4020 return unit.codeLength;
4012 } 4021 }
4013 return null; 4022 return null;
4014 } 4023 }
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
4500 } 4509 }
4501 invalidate(this); 4510 invalidate(this);
4502 } 4511 }
4503 4512
4504 @override 4513 @override
4505 bool isUpToDate(int timeStamp) { 4514 bool isUpToDate(int timeStamp) {
4506 Set<LibraryElement> visitedLibraries = new Set(); 4515 Set<LibraryElement> visitedLibraries = new Set();
4507 return _safeIsUpToDate(this, timeStamp, visitedLibraries); 4516 return _safeIsUpToDate(this, timeStamp, visitedLibraries);
4508 } 4517 }
4509 4518
4519 /**
4520 * Set whether the library has the given [capability] to
4521 * correspond to the given [value].
4522 */
4523 void setResolutionCapability(
4524 LibraryResolutionCapability capability, bool value) {
4525 _resolutionCapabilities =
4526 BooleanArray.set(_resolutionCapabilities, capability.index, value);
4527 }
4528
4510 @override 4529 @override
4511 void visitChildren(ElementVisitor visitor) { 4530 void visitChildren(ElementVisitor visitor) {
4512 super.visitChildren(visitor); 4531 super.visitChildren(visitor);
4513 _definingCompilationUnit?.accept(visitor); 4532 _definingCompilationUnit?.accept(visitor);
4514 safelyVisitChildren(_exports, visitor); 4533 safelyVisitChildren(_exports, visitor);
4515 safelyVisitChildren(_imports, visitor); 4534 safelyVisitChildren(_imports, visitor);
4516 safelyVisitChildren(_parts, visitor); 4535 safelyVisitChildren(_parts, visitor);
4517 } 4536 }
4518 4537
4519 /** 4538 /**
(...skipping 20 matching lines...) Expand all
4540 LibraryElement exportedLibrary = exportElement.exportedLibrary; 4559 LibraryElement exportedLibrary = exportElement.exportedLibrary;
4541 if (exportedLibrary != null) { 4560 if (exportedLibrary != null) {
4542 (exportedLibrary as LibraryElementImpl) 4561 (exportedLibrary as LibraryElementImpl)
4543 ._addVisibleLibraries(visibleLibraries, true); 4562 ._addVisibleLibraries(visibleLibraries, true);
4544 } 4563 }
4545 } 4564 }
4546 } 4565 }
4547 } 4566 }
4548 4567
4549 /** 4568 /**
4569 * Return `true` if the [library] has the given [capability].
4570 */
4571 static bool hasResolutionCapability(
4572 LibraryElement library, LibraryResolutionCapability capability) {
4573 return library is LibraryElementImpl &&
4574 BooleanArray.get(library._resolutionCapabilities, capability.index);
4575 }
4576
4577 /**
4550 * Return `true` if the given [library] is up to date with respect to the 4578 * Return `true` if the given [library] is up to date with respect to the
4551 * given [timeStamp]. The set of [visitedLibraries] is used to prevent 4579 * given [timeStamp]. The set of [visitedLibraries] is used to prevent
4552 * infinite recursion in the case of mutually dependent libraries. 4580 * infinite recursion in the case of mutually dependent libraries.
4553 */ 4581 */
4554 static bool _safeIsUpToDate(LibraryElement library, int timeStamp, 4582 static bool _safeIsUpToDate(LibraryElement library, int timeStamp,
4555 Set<LibraryElement> visitedLibraries) { 4583 Set<LibraryElement> visitedLibraries) {
4556 if (!visitedLibraries.contains(library)) { 4584 if (!visitedLibraries.contains(library)) {
4557 visitedLibraries.add(library); 4585 visitedLibraries.add(library);
4558 AnalysisContext context = library.context; 4586 AnalysisContext context = library.context;
4559 // Check the defining compilation unit. 4587 // Check the defining compilation unit.
(...skipping 19 matching lines...) Expand all
4579 if (!_safeIsUpToDate(exportedLibrary, timeStamp, visitedLibraries)) { 4607 if (!_safeIsUpToDate(exportedLibrary, timeStamp, visitedLibraries)) {
4580 return false; 4608 return false;
4581 } 4609 }
4582 } 4610 }
4583 } 4611 }
4584 return true; 4612 return true;
4585 } 4613 }
4586 } 4614 }
4587 4615
4588 /** 4616 /**
4617 * Enum of possible resolution capabilities that a [LibraryElementImpl] has.
4618 */
4619 enum LibraryResolutionCapability {
4620 /**
4621 * All elements have their types resolved.
4622 */
4623 resolvedTypeNames,
4624
4625 /**
4626 * All (potentially) constants expressions are set into corresponding
4627 * elements.
4628 */
4629 constantExpressions,
4630 }
4631
4632 /**
4589 * The context in which the library is resynthesized. 4633 * The context in which the library is resynthesized.
4590 */ 4634 */
4591 abstract class LibraryResynthesizerContext { 4635 abstract class LibraryResynthesizerContext {
4592 /** 4636 /**
4593 * Return the export namespace of the library. 4637 * Return the export namespace of the library.
4594 */ 4638 */
4595 Namespace buildExportNamespace(); 4639 Namespace buildExportNamespace();
4596 4640
4597 LibraryElement buildImportedLibrary(int dependency); 4641 LibraryElement buildImportedLibrary(int dependency);
4598 4642
(...skipping 1948 matching lines...) Expand 10 before | Expand all | Expand 10 after
6547 6591
6548 @override 6592 @override
6549 void visitElement(Element element) { 6593 void visitElement(Element element) {
6550 int offset = element.nameOffset; 6594 int offset = element.nameOffset;
6551 if (offset != -1) { 6595 if (offset != -1) {
6552 map[offset] = element; 6596 map[offset] = element;
6553 } 6597 }
6554 super.visitElement(element); 6598 super.visitElement(element);
6555 } 6599 }
6556 } 6600 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698