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

Unified Diff: pkg/analyzer/lib/src/dart/element/element.dart

Issue 2167773007: Use local variable/function index in its enclosing executable as a part of the identifier. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/context/cache.dart ('k') | pkg/analyzer/lib/src/generated/incremental_resolver.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/dart/element/element.dart
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 3a8c07fc0423334f5be5742a7d0b99e6f8de9a6f..7743244e6e120d991243cbd715a254499092aa7c 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -2784,7 +2784,6 @@ abstract class ElementImpl implements Element {
*/
void set enclosingElement(Element element) {
_enclosingElement = element as ElementImpl;
- _updateCaches();
}
/**
@@ -2928,7 +2927,6 @@ abstract class ElementImpl implements Element {
*/
void set name(String name) {
this._name = name;
- _updateCaches();
}
@override
@@ -2945,7 +2943,6 @@ abstract class ElementImpl implements Element {
*/
void set nameOffset(int offset) {
_nameOffset = offset;
- _updateCaches();
}
@override
@@ -3157,33 +3154,14 @@ abstract class ElementImpl implements Element {
}
}
- /**
- * Updates cached values after an input changed.
- *
- * Throws [FrozenHashCodeException] if not allowed.
- */
- void _updateCaches() {
- if (!hasModifier(Modifier.CACHE_KEY)) {
- // Fast path.
- _cachedLocation = null;
- _cachedHashCode = null;
- return;
- }
-
- // Save originals.
- ElementLocation oldLocation = _cachedLocation;
- int oldHashCode = _cachedHashCode;
-
- _cachedLocation = null;
- _cachedHashCode = null;
-
- if (oldHashCode != hashCode) {
- // Prevent cache corruption by restoring originals.
- _cachedLocation = oldLocation;
- _cachedHashCode = oldHashCode;
- throw new FrozenHashCodeException(
- "can't update hashCode for a cache key: $this ($runtimeType)");
+ static int _findElementIndexUsingIdentical(List items, Object item) {
+ int length = items.length;
+ for (int i = 0; i < length; i++) {
+ if (identical(items[i], item)) {
+ return i;
+ }
}
+ throw new StateError('Unable to find $item in $items');
}
}
@@ -4350,18 +4328,6 @@ class FieldFormalParameterElementImpl extends ParameterElementImpl
}
/**
- * Indicates that an ElementImpl's hashCode cannot currently be changed.
- */
-class FrozenHashCodeException implements Exception {
- final String _message;
-
- FrozenHashCodeException(this._message);
-
- @override
- String toString() => "FrozenHashCodeException($_message)";
-}
-
-/**
* A concrete implementation of a [FunctionElement].
*/
class FunctionElementImpl extends ExecutableElementImpl
@@ -4423,11 +4389,11 @@ class FunctionElementImpl extends ExecutableElementImpl
@override
String get identifier {
String identifier = super.identifier;
- if (!isStatic) {
- int enclosingOffset =
- enclosingElement != null ? enclosingElement.nameOffset : 0;
- int delta = nameOffset - enclosingOffset;
- identifier += "@$delta";
+ Element enclosing = this.enclosingElement;
+ if (enclosing is ExecutableElement) {
+ int id = ElementImpl._findElementIndexUsingIdentical(
+ enclosing.functions, this);
+ identifier += "@$id";
}
return identifier;
}
@@ -6169,10 +6135,14 @@ class LocalVariableElementImpl extends NonParameterVariableElementImpl
@override
String get identifier {
- int enclosingOffset =
- enclosingElement != null ? enclosingElement.nameOffset : 0;
- int delta = nameOffset - enclosingOffset;
- return '${super.identifier}@$delta';
+ String identifier = super.identifier;
+ Element enclosing = this.enclosingElement;
+ if (enclosing is ExecutableElement) {
+ int id = ElementImpl._findElementIndexUsingIdentical(
+ enclosing.localVariables, this);
+ identifier += "@$id";
+ }
+ return identifier;
}
@override
@@ -6436,12 +6406,7 @@ class Modifier extends Enum<Modifier> {
*/
static const Modifier SYNTHETIC = const Modifier('SYNTHETIC', 16);
- /**
- * Indicates that this element is being used as an analyzer cache key.
- */
- static const Modifier CACHE_KEY = const Modifier('CACHE_KEY', 17);
-
- static const List<Modifier> persistedValues = const [
+ static const List<Modifier> values = const [
ABSTRACT,
ASYNCHRONOUS,
CONST,
@@ -6461,11 +6426,6 @@ class Modifier extends Enum<Modifier> {
SYNTHETIC
];
- static const List<Modifier> transientValues = const [CACHE_KEY];
-
- static final values = new List.unmodifiable(
- []..addAll(persistedValues)..addAll(transientValues));
-
const Modifier(String name, int ordinal) : super(name, ordinal);
}
« no previous file with comments | « pkg/analyzer/lib/src/context/cache.dart ('k') | pkg/analyzer/lib/src/generated/incremental_resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698