| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 dart2js.serialization.elements; | 5 library dart2js.serialization.elements; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../constants/constructors.dart'; | 8 import '../constants/constructors.dart'; |
| 9 import '../constants/expressions.dart'; | 9 import '../constants/expressions.dart'; |
| 10 import '../dart_types.dart'; | 10 import '../dart_types.dart'; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 if (position.uri != element.compilationUnit.script.resourceUri) { | 113 if (position.uri != element.compilationUnit.script.resourceUri) { |
| 114 encoder.setUri(Key.URI, element.library.canonicalUri, position.uri); | 114 encoder.setUri(Key.URI, element.library.canonicalUri, position.uri); |
| 115 } | 115 } |
| 116 int length = position.end - position.begin; | 116 int length = position.end - position.begin; |
| 117 if (element.name.length != length) { | 117 if (element.name.length != length) { |
| 118 encoder.setInt(Key.LENGTH, length); | 118 encoder.setInt(Key.LENGTH, length); |
| 119 } | 119 } |
| 120 } | 120 } |
| 121 } | 121 } |
| 122 | 122 |
| 123 /// Serialize the metadata of [element] into [encoder]. |
| 124 static void serializeMetadata(Element element, ObjectEncoder encoder) { |
| 125 if (element.metadata.isNotEmpty) { |
| 126 ListEncoder list = encoder.createList(Key.METADATA); |
| 127 for (MetadataAnnotation metadata in element.metadata) { |
| 128 ObjectEncoder object = list.createObject(); |
| 129 object.setElement(Key.ELEMENT, metadata.annotatedElement); |
| 130 SourceSpan sourcePosition = metadata.sourcePosition; |
| 131 // TODO(johnniwinther): What is the base URI here? |
| 132 object.setUri(Key.URI, sourcePosition.uri, sourcePosition.uri); |
| 133 object.setInt(Key.OFFSET, sourcePosition.begin); |
| 134 object.setInt(Key.LENGTH, sourcePosition.end - sourcePosition.begin); |
| 135 object.setConstant(Key.CONSTANT, metadata.constant); |
| 136 } |
| 137 } |
| 138 } |
| 139 |
| 123 /// Serialize the parent relation for [element] into [encoder], i.e library, | 140 /// Serialize the parent relation for [element] into [encoder], i.e library, |
| 124 /// enclosing class, and compilation unit references. | 141 /// enclosing class, and compilation unit references. |
| 125 static void serializeParentRelation(Element element, ObjectEncoder encoder) { | 142 static void serializeParentRelation(Element element, ObjectEncoder encoder) { |
| 126 if (element.enclosingClass != null) { | 143 if (element.enclosingClass != null) { |
| 127 encoder.setElement(Key.CLASS, element.enclosingClass); | 144 encoder.setElement(Key.CLASS, element.enclosingClass); |
| 128 if (element.enclosingClass.declaration.compilationUnit != | 145 if (element.enclosingClass.declaration.compilationUnit != |
| 129 element.compilationUnit) { | 146 element.compilationUnit) { |
| 130 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); | 147 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); |
| 131 } | 148 } |
| 132 } else { | 149 } else { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 } | 235 } |
| 219 | 236 |
| 220 static List<Element> getExportedElements(LibraryElement element) { | 237 static List<Element> getExportedElements(LibraryElement element) { |
| 221 Set<Element> exportedElements = new Set<Element>(); | 238 Set<Element> exportedElements = new Set<Element>(); |
| 222 element.forEachExport(SerializerUtil.flattenElements(exportedElements)); | 239 element.forEachExport(SerializerUtil.flattenElements(exportedElements)); |
| 223 return exportedElements.toList(); | 240 return exportedElements.toList(); |
| 224 } | 241 } |
| 225 | 242 |
| 226 void serialize(LibraryElement element, ObjectEncoder encoder, | 243 void serialize(LibraryElement element, ObjectEncoder encoder, |
| 227 SerializedElementKind kind) { | 244 SerializedElementKind kind) { |
| 245 SerializerUtil.serializeMetadata(element, encoder); |
| 228 encoder.setUri( | 246 encoder.setUri( |
| 229 Key.CANONICAL_URI, element.canonicalUri, element.canonicalUri); | 247 Key.CANONICAL_URI, element.canonicalUri, element.canonicalUri); |
| 230 encoder.setString(Key.LIBRARY_NAME, element.libraryName); | 248 encoder.setString(Key.LIBRARY_NAME, element.libraryName); |
| 231 SerializerUtil.serializeMembers(getMembers(element), encoder); | 249 SerializerUtil.serializeMembers(getMembers(element), encoder); |
| 232 encoder.setElement(Key.COMPILATION_UNIT, element.entryCompilationUnit); | 250 encoder.setElement(Key.COMPILATION_UNIT, element.entryCompilationUnit); |
| 233 encoder.setElements(Key.COMPILATION_UNITS, getCompilationUnits(element)); | 251 encoder.setElements(Key.COMPILATION_UNITS, getCompilationUnits(element)); |
| 234 encoder.setElements(Key.IMPORTS, getImports(element)); | 252 encoder.setElements(Key.IMPORTS, getImports(element)); |
| 235 encoder.setElements(Key.EXPORTS, element.exports); | 253 encoder.setElements(Key.EXPORTS, element.exports); |
| 236 | 254 |
| 237 encoder.setElements(Key.IMPORT_SCOPE, getImportedElements(element)); | 255 encoder.setElements(Key.IMPORT_SCOPE, getImportedElements(element)); |
| 238 | 256 |
| 239 encoder.setElements(Key.EXPORT_SCOPE, getExportedElements(element)); | 257 encoder.setElements(Key.EXPORT_SCOPE, getExportedElements(element)); |
| 240 } | 258 } |
| 241 } | 259 } |
| 242 | 260 |
| 243 class CompilationUnitSerializer implements ElementSerializer { | 261 class CompilationUnitSerializer implements ElementSerializer { |
| 244 const CompilationUnitSerializer(); | 262 const CompilationUnitSerializer(); |
| 245 | 263 |
| 246 SerializedElementKind getSerializedKind(Element element) { | 264 SerializedElementKind getSerializedKind(Element element) { |
| 247 if (element.isCompilationUnit) { | 265 if (element.isCompilationUnit) { |
| 248 return SerializedElementKind.COMPILATION_UNIT; | 266 return SerializedElementKind.COMPILATION_UNIT; |
| 249 } | 267 } |
| 250 return null; | 268 return null; |
| 251 } | 269 } |
| 252 | 270 |
| 253 void serialize(CompilationUnitElement element, ObjectEncoder encoder, | 271 void serialize(CompilationUnitElement element, ObjectEncoder encoder, |
| 254 SerializedElementKind kind) { | 272 SerializedElementKind kind) { |
| 273 SerializerUtil.serializeMetadata(element, encoder); |
| 255 encoder.setElement(Key.LIBRARY, element.library); | 274 encoder.setElement(Key.LIBRARY, element.library); |
| 256 encoder.setUri( | 275 encoder.setUri( |
| 257 Key.URI, element.library.canonicalUri, element.script.resourceUri); | 276 Key.URI, element.library.canonicalUri, element.script.resourceUri); |
| 258 List<Element> elements = <Element>[]; | 277 List<Element> elements = <Element>[]; |
| 259 element.forEachLocalMember((e) { | 278 element.forEachLocalMember((e) { |
| 260 if (!element.isPatch) { | 279 if (!element.isPatch) { |
| 261 elements.add(e); | 280 elements.add(e); |
| 262 } | 281 } |
| 263 }); | 282 }); |
| 264 encoder.setElements(Key.ELEMENTS, elements); | 283 encoder.setElements(Key.ELEMENTS, elements); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 292 if (!member.isPatch) { | 311 if (!member.isPatch) { |
| 293 members.add(member); | 312 members.add(member); |
| 294 } | 313 } |
| 295 }); | 314 }); |
| 296 } | 315 } |
| 297 return members; | 316 return members; |
| 298 } | 317 } |
| 299 | 318 |
| 300 void serialize( | 319 void serialize( |
| 301 ClassElement element, ObjectEncoder encoder, SerializedElementKind kind) { | 320 ClassElement element, ObjectEncoder encoder, SerializedElementKind kind) { |
| 321 SerializerUtil.serializeMetadata(element, encoder); |
| 302 encoder.setElement(Key.LIBRARY, element.library); | 322 encoder.setElement(Key.LIBRARY, element.library); |
| 303 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); | 323 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); |
| 304 encoder.setString(Key.NAME, element.name); | 324 encoder.setString(Key.NAME, element.name); |
| 305 SerializerUtil.serializePosition(element, encoder); | 325 SerializerUtil.serializePosition(element, encoder); |
| 306 encoder.setTypes(Key.TYPE_VARIABLES, element.typeVariables); | 326 encoder.setTypes(Key.TYPE_VARIABLES, element.typeVariables); |
| 307 encoder.setBool(Key.IS_ABSTRACT, element.isAbstract); | 327 encoder.setBool(Key.IS_ABSTRACT, element.isAbstract); |
| 308 SerializerUtil.serializeMembers(getMembers(element), encoder); | 328 SerializerUtil.serializeMembers(getMembers(element), encoder); |
| 309 encoder.setBool(Key.IS_PROXY, element.isProxy); | 329 encoder.setBool(Key.IS_PROXY, element.isProxy); |
| 330 encoder.setBool(Key.IS_INJECTED, element.isInjected); |
| 310 if (kind == SerializedElementKind.ENUM) { | 331 if (kind == SerializedElementKind.ENUM) { |
| 311 EnumClassElement enumClass = element; | 332 EnumClassElement enumClass = element; |
| 312 encoder.setElements(Key.FIELDS, enumClass.enumValues); | 333 encoder.setElements(Key.FIELDS, enumClass.enumValues); |
| 313 } | 334 } |
| 314 if (element.isObject) return; | 335 if (element.isObject) return; |
| 315 | 336 |
| 316 List<InterfaceType> mixins = <InterfaceType>[]; | 337 List<InterfaceType> mixins = <InterfaceType>[]; |
| 317 ClassElement superclass = element.superclass; | 338 ClassElement superclass = element.superclass; |
| 318 while (superclass.isUnnamedMixinApplication) { | 339 while (superclass.isUnnamedMixinApplication) { |
| 319 MixinApplicationElement mixinElement = superclass; | 340 MixinApplicationElement mixinElement = superclass; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 } | 382 } |
| 362 return null; | 383 return null; |
| 363 } | 384 } |
| 364 | 385 |
| 365 void serialize(ConstructorElement element, ObjectEncoder encoder, | 386 void serialize(ConstructorElement element, ObjectEncoder encoder, |
| 366 SerializedElementKind kind) { | 387 SerializedElementKind kind) { |
| 367 SerializerUtil.serializeParentRelation(element, encoder); | 388 SerializerUtil.serializeParentRelation(element, encoder); |
| 368 if (kind == SerializedElementKind.FORWARDING_CONSTRUCTOR) { | 389 if (kind == SerializedElementKind.FORWARDING_CONSTRUCTOR) { |
| 369 encoder.setElement(Key.ELEMENT, element.definingConstructor); | 390 encoder.setElement(Key.ELEMENT, element.definingConstructor); |
| 370 } else { | 391 } else { |
| 392 SerializerUtil.serializeMetadata(element, encoder); |
| 371 encoder.setType(Key.TYPE, element.type); | 393 encoder.setType(Key.TYPE, element.type); |
| 372 encoder.setString(Key.NAME, element.name); | 394 encoder.setString(Key.NAME, element.name); |
| 373 SerializerUtil.serializePosition(element, encoder); | 395 SerializerUtil.serializePosition(element, encoder); |
| 374 SerializerUtil.serializeParameters(element, encoder); | 396 SerializerUtil.serializeParameters(element, encoder); |
| 375 encoder.setBool(Key.IS_CONST, element.isConst); | 397 encoder.setBool(Key.IS_CONST, element.isConst); |
| 376 encoder.setBool(Key.IS_EXTERNAL, element.isExternal); | 398 encoder.setBool(Key.IS_EXTERNAL, element.isExternal); |
| 399 encoder.setBool(Key.IS_INJECTED, element.isInjected); |
| 377 if (element.isConst && !element.isFromEnvironmentConstructor) { | 400 if (element.isConst && !element.isFromEnvironmentConstructor) { |
| 378 ConstantConstructor constantConstructor = element.constantConstructor; | 401 ConstantConstructor constantConstructor = element.constantConstructor; |
| 379 ObjectEncoder constantEncoder = encoder.createObject(Key.CONSTRUCTOR); | 402 ObjectEncoder constantEncoder = encoder.createObject(Key.CONSTRUCTOR); |
| 380 const ConstantConstructorSerializer() | 403 const ConstantConstructorSerializer() |
| 381 .visit(constantConstructor, constantEncoder); | 404 .visit(constantConstructor, constantEncoder); |
| 382 } | 405 } |
| 383 if (kind == SerializedElementKind.GENERATIVE_CONSTRUCTOR) { | 406 if (kind == SerializedElementKind.GENERATIVE_CONSTRUCTOR) { |
| 384 encoder.setBool(Key.IS_REDIRECTING, element.isRedirectingGenerative); | 407 encoder.setBool(Key.IS_REDIRECTING, element.isRedirectingGenerative); |
| 385 } | 408 } |
| 386 encoder.setElement(Key.EFFECTIVE_TARGET, element.effectiveTarget); | 409 encoder.setElement(Key.EFFECTIVE_TARGET, element.effectiveTarget); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 412 return SerializedElementKind.STATIC_FIELD; | 435 return SerializedElementKind.STATIC_FIELD; |
| 413 } | 436 } |
| 414 if (element.isInstanceMember) return SerializedElementKind.INSTANCE_FIELD; | 437 if (element.isInstanceMember) return SerializedElementKind.INSTANCE_FIELD; |
| 415 } | 438 } |
| 416 return null; | 439 return null; |
| 417 } | 440 } |
| 418 | 441 |
| 419 void serialize( | 442 void serialize( |
| 420 FieldElement element, ObjectEncoder encoder, SerializedElementKind kind) { | 443 FieldElement element, ObjectEncoder encoder, SerializedElementKind kind) { |
| 421 encoder.setString(Key.NAME, element.name); | 444 encoder.setString(Key.NAME, element.name); |
| 445 SerializerUtil.serializeMetadata(element, encoder); |
| 422 SerializerUtil.serializePosition(element, encoder); | 446 SerializerUtil.serializePosition(element, encoder); |
| 423 encoder.setType(Key.TYPE, element.type); | 447 encoder.setType(Key.TYPE, element.type); |
| 424 encoder.setBool(Key.IS_FINAL, element.isFinal); | 448 encoder.setBool(Key.IS_FINAL, element.isFinal); |
| 425 encoder.setBool(Key.IS_CONST, element.isConst); | 449 encoder.setBool(Key.IS_CONST, element.isConst); |
| 450 encoder.setBool(Key.IS_INJECTED, element.isInjected); |
| 426 ConstantExpression constant = element.constant; | 451 ConstantExpression constant = element.constant; |
| 427 if (constant != null) { | 452 if (constant != null) { |
| 428 encoder.setConstant(Key.CONSTANT, constant); | 453 encoder.setConstant(Key.CONSTANT, constant); |
| 429 } | 454 } |
| 430 SerializerUtil.serializeParentRelation(element, encoder); | 455 SerializerUtil.serializeParentRelation(element, encoder); |
| 431 if (element is EnumConstantElement) { | 456 if (element is EnumConstantElement) { |
| 432 EnumConstantElement enumConstant = element; | 457 EnumConstantElement enumConstant = element; |
| 433 encoder.setInt(Key.INDEX, enumConstant.index); | 458 encoder.setInt(Key.INDEX, enumConstant.index); |
| 434 } | 459 } |
| 435 } | 460 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 462 if (element.isInstanceMember) { | 487 if (element.isInstanceMember) { |
| 463 return SerializedElementKind.INSTANCE_SETTER; | 488 return SerializedElementKind.INSTANCE_SETTER; |
| 464 } | 489 } |
| 465 } | 490 } |
| 466 return null; | 491 return null; |
| 467 } | 492 } |
| 468 | 493 |
| 469 void serialize(FunctionElement element, ObjectEncoder encoder, | 494 void serialize(FunctionElement element, ObjectEncoder encoder, |
| 470 SerializedElementKind kind) { | 495 SerializedElementKind kind) { |
| 471 encoder.setString(Key.NAME, element.name); | 496 encoder.setString(Key.NAME, element.name); |
| 497 SerializerUtil.serializeMetadata(element, encoder); |
| 472 SerializerUtil.serializePosition(element, encoder); | 498 SerializerUtil.serializePosition(element, encoder); |
| 473 SerializerUtil.serializeParameters(element, encoder); | 499 SerializerUtil.serializeParameters(element, encoder); |
| 474 encoder.setType(Key.TYPE, element.type); | 500 encoder.setType(Key.TYPE, element.type); |
| 475 if (element.isFunction) { | 501 if (element.isFunction) { |
| 476 encoder.setBool(Key.IS_OPERATOR, element.isOperator); | 502 encoder.setBool(Key.IS_OPERATOR, element.isOperator); |
| 477 encoder.setEnum(Key.ASYNC_MARKER, element.asyncMarker); | 503 encoder.setEnum(Key.ASYNC_MARKER, element.asyncMarker); |
| 478 } | 504 } |
| 479 SerializerUtil.serializeParentRelation(element, encoder); | 505 SerializerUtil.serializeParentRelation(element, encoder); |
| 480 encoder.setBool(Key.IS_EXTERNAL, element.isExternal); | 506 encoder.setBool(Key.IS_EXTERNAL, element.isExternal); |
| 481 encoder.setBool(Key.IS_ABSTRACT, element.isAbstract); | 507 encoder.setBool(Key.IS_ABSTRACT, element.isAbstract); |
| 508 encoder.setBool(Key.IS_INJECTED, element.isInjected); |
| 482 if (element.isLocal) { | 509 if (element.isLocal) { |
| 483 LocalFunctionElement localFunction = element; | 510 LocalFunctionElement localFunction = element; |
| 484 encoder.setElement( | 511 encoder.setElement( |
| 485 Key.EXECUTABLE_CONTEXT, localFunction.executableContext); | 512 Key.EXECUTABLE_CONTEXT, localFunction.executableContext); |
| 486 } | 513 } |
| 487 } | 514 } |
| 488 } | 515 } |
| 489 | 516 |
| 490 class TypedefSerializer implements ElementSerializer { | 517 class TypedefSerializer implements ElementSerializer { |
| 491 const TypedefSerializer(); | 518 const TypedefSerializer(); |
| 492 | 519 |
| 493 SerializedElementKind getSerializedKind(Element element) { | 520 SerializedElementKind getSerializedKind(Element element) { |
| 494 if (element.isTypedef) { | 521 if (element.isTypedef) { |
| 495 return SerializedElementKind.TYPEDEF; | 522 return SerializedElementKind.TYPEDEF; |
| 496 } | 523 } |
| 497 return null; | 524 return null; |
| 498 } | 525 } |
| 499 | 526 |
| 500 void serialize(TypedefElement element, ObjectEncoder encoder, | 527 void serialize(TypedefElement element, ObjectEncoder encoder, |
| 501 SerializedElementKind kind) { | 528 SerializedElementKind kind) { |
| 502 encoder.setString(Key.NAME, element.name); | 529 encoder.setString(Key.NAME, element.name); |
| 530 SerializerUtil.serializeMetadata(element, encoder); |
| 503 SerializerUtil.serializePosition(element, encoder); | 531 SerializerUtil.serializePosition(element, encoder); |
| 504 encoder.setType(Key.ALIAS, element.alias); | 532 encoder.setType(Key.ALIAS, element.alias); |
| 505 encoder.setElement(Key.LIBRARY, element.library); | 533 encoder.setElement(Key.LIBRARY, element.library); |
| 506 encoder.setTypes(Key.TYPE_VARIABLES, element.typeVariables); | 534 encoder.setTypes(Key.TYPE_VARIABLES, element.typeVariables); |
| 507 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); | 535 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); |
| 508 } | 536 } |
| 509 } | 537 } |
| 510 | 538 |
| 511 class TypeVariableSerializer implements ElementSerializer { | 539 class TypeVariableSerializer implements ElementSerializer { |
| 512 const TypeVariableSerializer(); | 540 const TypeVariableSerializer(); |
| 513 | 541 |
| 514 SerializedElementKind getSerializedKind(Element element) { | 542 SerializedElementKind getSerializedKind(Element element) { |
| 515 if (element.isTypeVariable) { | 543 if (element.isTypeVariable) { |
| 516 return SerializedElementKind.TYPEVARIABLE; | 544 return SerializedElementKind.TYPEVARIABLE; |
| 517 } | 545 } |
| 518 return null; | 546 return null; |
| 519 } | 547 } |
| 520 | 548 |
| 521 void serialize(TypeVariableElement element, ObjectEncoder encoder, | 549 void serialize(TypeVariableElement element, ObjectEncoder encoder, |
| 522 SerializedElementKind kind) { | 550 SerializedElementKind kind) { |
| 523 encoder.setElement(Key.TYPE_DECLARATION, element.typeDeclaration); | 551 encoder.setElement(Key.TYPE_DECLARATION, element.typeDeclaration); |
| 524 encoder.setString(Key.NAME, element.name); | 552 encoder.setString(Key.NAME, element.name); |
| 553 SerializerUtil.serializeMetadata(element, encoder); |
| 525 SerializerUtil.serializePosition(element, encoder); | 554 SerializerUtil.serializePosition(element, encoder); |
| 526 encoder.setType(Key.TYPE, element.type); | 555 encoder.setType(Key.TYPE, element.type); |
| 527 encoder.setInt(Key.INDEX, element.index); | 556 encoder.setInt(Key.INDEX, element.index); |
| 528 encoder.setType(Key.BOUND, element.bound); | 557 encoder.setType(Key.BOUND, element.bound); |
| 529 } | 558 } |
| 530 } | 559 } |
| 531 | 560 |
| 532 class ParameterSerializer implements ElementSerializer { | 561 class ParameterSerializer implements ElementSerializer { |
| 533 const ParameterSerializer(); | 562 const ParameterSerializer(); |
| 534 | 563 |
| 535 SerializedElementKind getSerializedKind(Element element) { | 564 SerializedElementKind getSerializedKind(Element element) { |
| 536 if (element.isParameter) { | 565 if (element.isParameter) { |
| 537 return SerializedElementKind.PARAMETER; | 566 return SerializedElementKind.PARAMETER; |
| 538 } else if (element.isInitializingFormal) { | 567 } else if (element.isInitializingFormal) { |
| 539 return SerializedElementKind.INITIALIZING_FORMAL; | 568 return SerializedElementKind.INITIALIZING_FORMAL; |
| 540 } | 569 } |
| 541 return null; | 570 return null; |
| 542 } | 571 } |
| 543 | 572 |
| 544 void serialize(ParameterElement element, ObjectEncoder encoder, | 573 void serialize(ParameterElement element, ObjectEncoder encoder, |
| 545 SerializedElementKind kind) { | 574 SerializedElementKind kind) { |
| 546 encoder.setElement(Key.FUNCTION, element.functionDeclaration); | 575 encoder.setElement(Key.FUNCTION, element.functionDeclaration); |
| 547 encoder.setString(Key.NAME, element.name); | 576 encoder.setString(Key.NAME, element.name); |
| 577 SerializerUtil.serializeMetadata(element, encoder); |
| 548 SerializerUtil.serializePosition(element, encoder); | 578 SerializerUtil.serializePosition(element, encoder); |
| 549 encoder.setType(Key.TYPE, element.type); | 579 encoder.setType(Key.TYPE, element.type); |
| 550 encoder.setBool(Key.IS_OPTIONAL, element.isOptional); | 580 encoder.setBool(Key.IS_OPTIONAL, element.isOptional); |
| 551 encoder.setBool(Key.IS_NAMED, element.isNamed); | 581 encoder.setBool(Key.IS_NAMED, element.isNamed); |
| 552 encoder.setBool(Key.IS_FINAL, element.isFinal); | 582 encoder.setBool(Key.IS_FINAL, element.isFinal); |
| 553 if (element.isOptional) { | 583 if (element.isOptional) { |
| 554 encoder.setConstant(Key.CONSTANT, element.constant); | 584 encoder.setConstant(Key.CONSTANT, element.constant); |
| 555 } | 585 } |
| 556 if (element.isInitializingFormal) { | 586 if (element.isInitializingFormal) { |
| 557 InitializingFormalElement initializingFormal = element; | 587 InitializingFormalElement initializingFormal = element; |
| 558 encoder.setElement(Key.FIELD, initializingFormal.fieldElement); | 588 encoder.setElement(Key.FIELD, initializingFormal.fieldElement); |
| 559 } | 589 } |
| 560 } | 590 } |
| 561 } | 591 } |
| 562 | 592 |
| 563 class LocalVariableSerializer implements ElementSerializer { | 593 class LocalVariableSerializer implements ElementSerializer { |
| 564 const LocalVariableSerializer(); | 594 const LocalVariableSerializer(); |
| 565 | 595 |
| 566 SerializedElementKind getSerializedKind(Element element) { | 596 SerializedElementKind getSerializedKind(Element element) { |
| 567 if (element.isVariable) { | 597 if (element.isVariable) { |
| 568 return SerializedElementKind.LOCAL_VARIABLE; | 598 return SerializedElementKind.LOCAL_VARIABLE; |
| 569 } | 599 } |
| 570 return null; | 600 return null; |
| 571 } | 601 } |
| 572 | 602 |
| 573 void serialize(LocalVariableElement element, ObjectEncoder encoder, | 603 void serialize(LocalVariableElement element, ObjectEncoder encoder, |
| 574 SerializedElementKind kind) { | 604 SerializedElementKind kind) { |
| 575 encoder.setString(Key.NAME, element.name); | 605 encoder.setString(Key.NAME, element.name); |
| 606 SerializerUtil.serializeMetadata(element, encoder); |
| 576 SerializerUtil.serializePosition(element, encoder); | 607 SerializerUtil.serializePosition(element, encoder); |
| 577 encoder.setType(Key.TYPE, element.type); | 608 encoder.setType(Key.TYPE, element.type); |
| 578 encoder.setBool(Key.IS_FINAL, element.isFinal); | 609 encoder.setBool(Key.IS_FINAL, element.isFinal); |
| 579 encoder.setBool(Key.IS_CONST, element.isConst); | 610 encoder.setBool(Key.IS_CONST, element.isConst); |
| 580 if (element.isConst) { | 611 if (element.isConst) { |
| 581 ConstantExpression constant = element.constant; | 612 ConstantExpression constant = element.constant; |
| 582 encoder.setConstant(Key.CONSTANT, constant); | 613 encoder.setConstant(Key.CONSTANT, constant); |
| 583 } | 614 } |
| 584 encoder.setElement(Key.EXECUTABLE_CONTEXT, element.executableContext); | 615 encoder.setElement(Key.EXECUTABLE_CONTEXT, element.executableContext); |
| 585 } | 616 } |
| 586 } | 617 } |
| 587 | 618 |
| 588 class ImportSerializer implements ElementSerializer { | 619 class ImportSerializer implements ElementSerializer { |
| 589 const ImportSerializer(); | 620 const ImportSerializer(); |
| 590 | 621 |
| 591 SerializedElementKind getSerializedKind(Element element) { | 622 SerializedElementKind getSerializedKind(Element element) { |
| 592 if (element.isImport) { | 623 if (element.isImport) { |
| 593 return SerializedElementKind.IMPORT; | 624 return SerializedElementKind.IMPORT; |
| 594 } | 625 } |
| 595 return null; | 626 return null; |
| 596 } | 627 } |
| 597 | 628 |
| 598 void serialize(ImportElement element, ObjectEncoder encoder, | 629 void serialize(ImportElement element, ObjectEncoder encoder, |
| 599 SerializedElementKind kind) { | 630 SerializedElementKind kind) { |
| 631 SerializerUtil.serializeMetadata(element, encoder); |
| 600 encoder.setElement(Key.LIBRARY, element.library); | 632 encoder.setElement(Key.LIBRARY, element.library); |
| 601 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); | 633 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); |
| 602 encoder.setElement(Key.LIBRARY_DEPENDENCY, element.importedLibrary); | 634 encoder.setElement(Key.LIBRARY_DEPENDENCY, element.importedLibrary); |
| 603 if (element.prefix != null) { | 635 if (element.prefix != null) { |
| 604 encoder.setElement(Key.PREFIX, element.prefix); | 636 encoder.setElement(Key.PREFIX, element.prefix); |
| 605 } | 637 } |
| 606 encoder.setBool(Key.IS_DEFERRED, element.isDeferred); | 638 encoder.setBool(Key.IS_DEFERRED, element.isDeferred); |
| 607 // TODO(johnniwinther): What is the base for the URI? | 639 // TODO(johnniwinther): What is the base for the URI? |
| 608 encoder.setUri(Key.URI, element.uri, element.uri); | 640 encoder.setUri(Key.URI, element.uri, element.uri); |
| 609 } | 641 } |
| 610 } | 642 } |
| 611 | 643 |
| 612 class ExportSerializer implements ElementSerializer { | 644 class ExportSerializer implements ElementSerializer { |
| 613 const ExportSerializer(); | 645 const ExportSerializer(); |
| 614 | 646 |
| 615 SerializedElementKind getSerializedKind(Element element) { | 647 SerializedElementKind getSerializedKind(Element element) { |
| 616 if (element.isExport) { | 648 if (element.isExport) { |
| 617 return SerializedElementKind.EXPORT; | 649 return SerializedElementKind.EXPORT; |
| 618 } | 650 } |
| 619 return null; | 651 return null; |
| 620 } | 652 } |
| 621 | 653 |
| 622 void serialize(ExportElement element, ObjectEncoder encoder, | 654 void serialize(ExportElement element, ObjectEncoder encoder, |
| 623 SerializedElementKind kind) { | 655 SerializedElementKind kind) { |
| 656 SerializerUtil.serializeMetadata(element, encoder); |
| 624 encoder.setElement(Key.LIBRARY, element.library); | 657 encoder.setElement(Key.LIBRARY, element.library); |
| 625 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); | 658 encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit); |
| 626 encoder.setElement(Key.LIBRARY_DEPENDENCY, element.exportedLibrary); | 659 encoder.setElement(Key.LIBRARY_DEPENDENCY, element.exportedLibrary); |
| 627 // TODO(johnniwinther): What is the base for the URI? | 660 // TODO(johnniwinther): What is the base for the URI? |
| 628 encoder.setUri(Key.URI, element.uri, element.uri); | 661 encoder.setUri(Key.URI, element.uri, element.uri); |
| 629 } | 662 } |
| 630 } | 663 } |
| 631 | 664 |
| 632 class PrefixSerializer implements ElementSerializer { | 665 class PrefixSerializer implements ElementSerializer { |
| 633 const PrefixSerializer(); | 666 const PrefixSerializer(); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 return new LocalVariableElementZ(decoder); | 764 return new LocalVariableElementZ(decoder); |
| 732 case SerializedElementKind.EXTERNAL_LIBRARY: | 765 case SerializedElementKind.EXTERNAL_LIBRARY: |
| 733 case SerializedElementKind.EXTERNAL_LIBRARY_MEMBER: | 766 case SerializedElementKind.EXTERNAL_LIBRARY_MEMBER: |
| 734 case SerializedElementKind.EXTERNAL_CLASS_MEMBER: | 767 case SerializedElementKind.EXTERNAL_CLASS_MEMBER: |
| 735 case SerializedElementKind.EXTERNAL_CONSTRUCTOR: | 768 case SerializedElementKind.EXTERNAL_CONSTRUCTOR: |
| 736 break; | 769 break; |
| 737 } | 770 } |
| 738 throw new UnsupportedError("Unexpected element kind '${elementKind}."); | 771 throw new UnsupportedError("Unexpected element kind '${elementKind}."); |
| 739 } | 772 } |
| 740 } | 773 } |
| OLD | NEW |