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

Unified Diff: pkg/compiler/lib/src/serialization/element_serialization.dart

Issue 2255163002: Support serialization of ambiguous elements. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/compiler/lib/src/serialization/keys.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/serialization/element_serialization.dart
diff --git a/pkg/compiler/lib/src/serialization/element_serialization.dart b/pkg/compiler/lib/src/serialization/element_serialization.dart
index 3b147788dc7e2b962d2989192fc3f897dbe3fe92..d24a5eaa5a1bdcbf4d94fea71b58601605443cf6 100644
--- a/pkg/compiler/lib/src/serialization/element_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/element_serialization.dart
@@ -12,6 +12,7 @@ import '../diagnostics/messages.dart';
import '../elements/elements.dart';
import '../elements/modelx.dart'
show
+ AmbiguousImportX,
DeferredLoaderGetterElementX,
ErroneousElementX,
WarnOnUseElementX,
@@ -59,6 +60,7 @@ enum SerializedElementKind {
DEFERRED_LOAD_LIBRARY,
LOCAL_VARIABLE,
WARN_ON_USE,
+ AMBIGUOUS,
EXTERNAL_LIBRARY,
EXTERNAL_LIBRARY_MEMBER,
EXTERNAL_CLASS_MEMBER,
@@ -89,6 +91,7 @@ const List<ElementSerializer> ELEMENT_SERIALIZERS = const [
const ExportSerializer(),
const LocalVariableSerializer(),
const WarnOnUseSerializer(),
+ const AmbiguousSerializer(),
];
/// Interface for a function that can serialize a set of element kinds.
@@ -815,6 +818,28 @@ class WarnOnUseSerializer implements ElementSerializer {
}
}
+class AmbiguousSerializer implements ElementSerializer {
+ const AmbiguousSerializer();
+
+ SerializedElementKind getSerializedKind(Element element) {
+ if (element.isAmbiguous) {
+ return SerializedElementKind.AMBIGUOUS;
+ }
+ return null;
+ }
+
+ void serialize(AmbiguousImportX element, ObjectEncoder encoder,
+ SerializedElementKind kind) {
+ // TODO(johnniwinther): Also support [DuplicateElementX] if serialization
+ // of code with compile-time errors is supported.
+ encoder.setElement(Key.ENCLOSING, element.enclosingElement);
+ encoder.setElement(Key.EXISTING, element.existingElement);
+ encoder.setElement(Key.NEW, element.newElement);
+ encoder.setEnum(Key.MESSAGE_KIND, element.messageKind);
+ serializeMessageArguments(encoder, Key.ARGUMENTS, element.messageArguments);
+ }
+}
+
/// Utility class for deserializing [Element]s.
///
/// This is used by the [Deserializer].
@@ -912,7 +937,18 @@ class ElementDeserializer {
deserializeWrappedMessage(decoder, Key.WARNING);
WrappedMessage info = deserializeWrappedMessage(decoder, Key.INFO);
return new WarnOnUseElementX(warning, info, enclosing, element);
- case SerializedElementKind.EXTERNAL_LIBRARY:
+ case SerializedElementKind.AMBIGUOUS:
+ Element enclosingElement = decoder.getElement(Key.ENCLOSING);
+ Element existingElement = decoder.getElement(Key.EXISTING);
+ Element newElement = decoder.getElement(Key.NEW);
+ MessageKind messageKind =
+ decoder.getEnum(Key.MESSAGE_KIND, MessageKind.values);
+ Map messageArguments =
+ deserializeMessageArguments(decoder, Key.ARGUMENTS);
+ return new AmbiguousImportX(
+ messageKind, messageArguments,
+ enclosingElement, existingElement, newElement);
+ case SerializedElementKind.EXTERNAL_LIBRARY:
case SerializedElementKind.EXTERNAL_LIBRARY_MEMBER:
case SerializedElementKind.EXTERNAL_CLASS_MEMBER:
case SerializedElementKind.EXTERNAL_CONSTRUCTOR:
« no previous file with comments | « no previous file | pkg/compiler/lib/src/serialization/keys.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698