| <link rel="import" href="../../../../packages/polymer/polymer.html"> |
| <link rel="import" href="error_view.html"> |
| <link rel="import" href="eval_box.html"> |
| <link rel="import" href="eval_link.html"> |
| |
| <polymer-element name="instance-view"> |
| <template> |
| <link rel="stylesheet" href="css/shared.css"> |
| <nav-bar> |
| <top-nav-menu></top-nav-menu> |
| <vm-nav-menu vm="{{ instance.isolate.vm }}"></vm-nav-menu> |
| <isolate-nav-menu isolate="{{ instance.isolate }}"></isolate-nav-menu> |
| <!-- TODO(turnidge): Add library nav menu here. --> |
| <class-nav-menu cls="{{ instance.clazz }}"></class-nav-menu> |
| <nav-menu link="." anchor="instance" last="{{ true }}"></nav-menu> |
| <nav-refresh callback="{{ refresh }}"></nav-refresh> |
| <nav-notify notifications="{{ app.notifications }}"></nav-notify> |
| </nav-bar> |
| |
| <template if="{{ instance.isError }}"> |
| <error-view error_obj="{{ instance['error'] }}"></error-view> |
| </template> |
| |
| <template if="{{ !instance.isError }}"> |
| <div class="content"> |
| <template if="{{ instance.isAbstractType }}"> |
| <h1>type {{ instance.name }}</h1> |
| </template> |
| <template if="{{ !instance.isAbstractType }}"> |
| <h1>instance of {{ instance.clazz.name }}</h1> |
| </template> |
| |
| <object-common object="{{ instance }}"></object-common> |
| |
| <div class="memberList"> |
| <div class="memberItem"> </div> |
| |
| <template if="{{ instance.valueAsString != null }}"> |
| <div class="memberItem"> |
| <div class="memberName">value</div> |
| <div class="memberValue"> |
| <pre>{{ instance.valueAsString }}</pre> |
| </div> |
| </div> |
| </template> |
| |
| <template if="{{ instance.isString }}"> |
| <div class="memberItem"> |
| <div class="memberName">valueAsLiteral</div> |
| <div class="memberValue"> {{ asStringLiteral(instance.valueAsString, instance.valueAsStringIsTruncated) }}</div> |
| </div> |
| </template> |
| |
| <template if="{{ instance.typeClass != null }}"> |
| <div class="memberItem"> |
| <div class="memberName">type class</div> |
| <div class="memberValue"> |
| <class-ref ref="{{ instance.typeClass }}"> |
| </class-ref> |
| </div> |
| </div> |
| </template> |
| <template if="{{ instance.typeArguments.length > 0 }}"> |
| <div class="memberItem"> |
| <div class="memberName">type arguments</div> |
| <div class="memberValue"> |
| < |
| <template repeat="{{ index in instance.typeArguments['types'].asMap().keys }}"> |
| <instance-ref ref="{{ instance.typeArguments['types'][index] }}"> |
| </instance-ref> |
| <template if="{{ index < instance.typeArguments['types'].length - 1 }}"> |
| , |
| </template> |
| </template> |
| > |
| </div> |
| </div> |
| </template> |
| <template if="{{ instance.parameterizedClass != null }}"> |
| <div class="memberItem"> |
| <div class="memberName">parameterized class</div> |
| <div class="memberValue"> |
| <class-ref ref="{{ instance.parameterizedClass }}"> |
| </class-ref> |
| </div> |
| </div> |
| </template> |
| <template if="{{ instance.parameterIndex != null }}"> |
| <div class="memberItem"> |
| <div class="memberName">parameter index</div> |
| <div class="memberValue"> |
| {{ instance.parameterIndex }} |
| </div> |
| </div> |
| </template> |
| <template if="{{ instance.targetType != null }}"> |
| <div class="memberItem"> |
| <div class="memberName">target type</div> |
| <div class="memberValue"> |
| <instance-ref ref="{{ instance.targetType }}"> |
| </instance-ref> |
| </div> |
| </div> |
| </template> |
| <template if="{{ instance.bound != null }}"> |
| <div class="memberItem"> |
| <div class="memberName">bound</div> |
| <div class="memberValue"> |
| <instance-ref ref="{{ instance.bound }}"> |
| </instance-ref> |
| </div> |
| </div> |
| </template> |
| |
| <template if="{{ instance.isClosure }}"> |
| <div class="memberItem"> |
| <div class="memberName">closure function</div> |
| <div class="memberValue"> |
| <function-ref ref="{{ instance.closureFunction }}"> |
| </function-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">closure context</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.context }}"> |
| </any-service-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">closure breakpoint</div> |
| <div class="memberValue"> |
| <template if="{{ instance.activationBreakpoint == null }}"> |
| <action-link callback="{{ setBreakOnActivation }}" |
| label="break on activation"> |
| </action-link> |
| </template> |
| <template if="{{ instance.activationBreakpoint != null }}"> |
| {{ instance.activationBreakpoint.toString() }} |
| <action-link callback="{{ clearBreakOnActivation }}" |
| label="remove"> |
| </action-link> |
| </template> |
| </div> |
| </div> |
| </template> |
| |
| <div class="memberItem"> |
| <div class="memberName">toString()</div> |
| <div class="memberValue"> |
| <eval-link callback="{{ evaluate }}" expr="toString()"></eval-link> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">runtimeType</div> |
| <div class="memberValue"> |
| <eval-link callback="{{ evaluate }}" expr="runtimeType"></eval-link> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| <hr> |
| |
| <div class="content"> |
| <eval-box callback="{{ evaluate }}"></eval-box> |
| </div> |
| |
| <hr> |
| |
| <div class="content"> |
| <template if="{{ instance.nativeFields.isNotEmpty }}"> |
| native fields ({{ instance.nativeFields.length }}) |
| <curly-block expand="{{ instance.nativeFields.length <= 100 }}"> |
| <div class="memberList"> |
| <template repeat="{{ field in instance.nativeFields }}"> |
| <div class="memberItem"> |
| <div class="memberName">[{{ field['index']}}]</div> |
| <div class="memberValue">[{{ field['value']}}]</div> |
| </div> |
| </template> |
| </div> |
| </curly-block><br><br> |
| </template> |
| |
| <template if="{{ instance.fields.isNotEmpty }}"> |
| fields ({{ instance.fields.length }}) |
| <curly-block expand="{{ instance.fields.length <= 100 }}"> |
| <div class="memberList"> |
| <template repeat="{{ field in instance.fields }}"> |
| <div class="memberItem"> |
| <div class="memberName"> |
| <field-ref ref="{{ field.decl }}"></field-ref> |
| </div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ field.value }}"></any-service-ref> |
| </div> |
| </div> |
| </template> |
| </div> |
| </curly-block><br><br> |
| </template> |
| |
| <template if="{{ instance.elements.isNotEmpty }}"> |
| elements ({{ instance.length }}) |
| <curly-block expand="{{ instance.elements.length <= 100 }}"> |
| <div class="memberList"> |
| <template repeat="{{ index in instance.elements.asMap().keys }}"> |
| <div class="memberItem"> |
| <div class="memberName">[{{ index }}]</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.elements[index] }}"> |
| </any-service-ref> |
| </div> |
| </div> |
| </template> |
| <template if="{{ instance.length != instance.elements.length }}"> |
| <div class="memberItem"> |
| <div class="memberName">...</div> |
| <div class="memberValue"> |
| <em>{{ instance.length - instance.elements.length }} omitted elements</em> |
| </div> |
| </div> |
| </template> |
| </div> |
| </curly-block><br><br> |
| </template> |
| |
| <template if="{{ instance.associations.isNotEmpty }}"> |
| associations ({{ instance.length }}) |
| <curly-block expand="{{ instance.associations.length <= 100 }}"> |
| <div class="memberList"> |
| <template repeat="{{ association in instance.associations }}"> |
| <div class="memberItem"> |
| <div class="memberValue"> |
| [<any-service-ref ref="{{ association.key }}"></any-service-ref>] |
| </div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ association.value }}"></any-service-ref> |
| </div> |
| </div> |
| </template> |
| <template if="{{ instance.length != instance.associations.length }}"> |
| <div class="memberItem"> |
| <div class="memberName">...</div> |
| <div class="memberValue"> |
| <em>{{ instance.length - instance.associations.length }} omitted associations</em> |
| </div> |
| </div> |
| </template> |
| </div> |
| </curly-block><br><br> |
| </template> |
| |
| <template if="{{ instance.typedElements.isNotEmpty }}"> |
| elements ({{ instance.length }}) |
| <curly-block expand="{{ instance.typedElements.length <= 100 }}"> |
| <div class="memberList"> |
| <template repeat="{{ index in instance.typedElements.asMap().keys }}"> |
| <div class="memberItem"> |
| <div class="memberName">[{{ index }}]</div> |
| <div class="memberValue">{{ instance.typedElements[index].toString() }}</div> |
| </div> |
| </template> |
| <template if="{{ instance.length != instance.typedElements.length }}"> |
| <div class="memberItem"> |
| <div class="memberName">...</div> |
| <div class="memberValue"> |
| <em>{{ instance.length - instance.elements.length }} omitted elements</em> |
| </div> |
| </div> |
| </template> |
| </div> |
| </curly-block><br><br> |
| </template> |
| |
| <template if="{{ instance.isRegExp }}"> |
| <div class="memberList"> |
| <div class="memberItem"> |
| <div class="memberName">pattern</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.pattern }}"></any-service-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">isCaseSensitive</div> |
| <div class="memberValue">{{ instance.isCaseSensitive }}</div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">isMultiLine</div> |
| <div class="memberValue">{{ instance.isMultiLine }}</div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">oneByteFunction</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.oneByteFunction }}"></any-service-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">twoByteFunction</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.twoByteFunction }}"></any-service-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">externalOneByteFunction</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.externalOneByteFunction }}"></any-service-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">externalTwoByteFunction</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.externalTwoByteFunction }}"></any-service-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">oneByteBytecode</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.oneByteBytecode }}"></any-service-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">twoByteBytecode</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.twoByteBytecode }}"></any-service-ref> |
| </div> |
| </div> |
| </div> |
| </template> |
| |
| <template if="{{ instance.isMirrorReference }}"> |
| <div class="memberItem"> |
| <div class="memberName">referent</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.referent }}"> |
| </any-service-ref> |
| </div> |
| </div> |
| </template> |
| |
| <template if="{{ instance.isWeakProperty }}"> |
| <div class="memberItem"> |
| <div class="memberName">key</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.key }}"></any-service-ref> |
| </div> |
| </div> |
| <div class="memberItem"> |
| <div class="memberName">value</div> |
| <div class="memberValue"> |
| <any-service-ref ref="{{ instance.value }}"></any-service-ref> |
| </div> |
| </div> |
| </template> |
| |
| </div> |
| |
| <div class="content-centered-big"> |
| <template if="{{ instance.isClosure }}"> |
| <source-inset location="{{ instance.closureFunction.location }}"></source-inset> |
| </template> |
| <template if="{{ instance.typeClass != null }}"> |
| <source-inset location="{{ instance.typeClass.location }}"></source-inset> |
| </template> |
| </div> |
| |
| </template> |
| <view-footer></view-footer> |
| </template> |
| </polymer-element> |
| |
| <script type="application/dart" src="instance_view.dart"></script> |