blob: b7c9e137d0f64e6930a4cd254e339bd9b105fbce [file] [log] [blame]
<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">&nbsp;</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">
&lt;
<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>
&gt;
</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>