org.chromium.sdk/src/org/chromium/sdk/internal/JsObjectImpl.java
author Eugene Ostroukhov <eugeneo@symbian.org>
Thu, 18 Mar 2010 11:56:59 -0700
changeset 276 f2f4a1259de8
parent 52 f577ea64429e
child 355 8726e95bcbba
permissions -rw-r--r--
Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     1
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     2
// Use of this source code is governed by a BSD-style license that can be
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     3
// found in the LICENSE file.
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     4
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     5
package org.chromium.sdk.internal;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     6
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     7
import java.util.ArrayList;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     8
import java.util.Collection;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
     9
import java.util.Collections;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    10
import java.util.HashMap;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    11
import java.util.List;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    12
import java.util.Map;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    13
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    14
import org.chromium.sdk.JsFunction;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    15
import org.chromium.sdk.JsObject;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    16
import org.chromium.sdk.JsVariable;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    17
import org.chromium.sdk.internal.tools.v8.MethodIsBlockingException;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    18
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    19
/**
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    20
 * A generic implementation of the JsObject interface.
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    21
 */
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    22
class JsObjectImpl extends JsValueImpl implements JsObject {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    23
52
f577ea64429e Migrated to unmodified Chromium Development Tools version
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 2
diff changeset
    24
  private final InternalContext context;
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    25
276
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
    26
  /**
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
    27
   * Fully qualified name of variable holding this object.
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
    28
   */
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
    29
  private final String variableFqn;
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    30
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    31
  /**
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    32
   * This constructor implies the lazy resolution of object properties.
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    33
   *
52
f577ea64429e Migrated to unmodified Chromium Development Tools version
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 2
diff changeset
    34
   * @param context where this instance belongs in
276
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
    35
   * @param variableFqn the fully qualified name of the variable holding this object
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    36
   * @param valueState the value data from the JS VM
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    37
   */
276
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
    38
  JsObjectImpl(InternalContext context, String variableFqn, ValueMirror valueState) {
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    39
    super(valueState);
52
f577ea64429e Migrated to unmodified Chromium Development Tools version
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 2
diff changeset
    40
    this.context = context;
276
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
    41
    this.variableFqn = variableFqn;
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    42
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    43
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    44
  public Collection<JsVariableImpl> getProperties() throws MethodIsBlockingException {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    45
    return subproperties.getPropertiesLazily();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    46
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    47
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    48
  public Collection<JsVariableImpl> getInternalProperties() throws MethodIsBlockingException {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    49
    return internalProperties.getPropertiesLazily();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    50
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    51
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    52
  public String getRefId() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    53
    int ref = getMirror().getRef();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    54
    if (ref < 0) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    55
      // Negative handle means that it's transient. We don't expose it.
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    56
      return null;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    57
    } else {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    58
      return String.valueOf(ref);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    59
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    60
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    61
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    62
  @Override
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    63
  public String toString() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    64
    StringBuilder result = new StringBuilder();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    65
    result.append("[JsObject: type=").append(getType());
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    66
    try {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    67
      for (JsVariable prop : getProperties()) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    68
        result.append(',').append(prop);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    69
      }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    70
    } catch (MethodIsBlockingException e) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    71
      return "[JsObject: Exception in retrieving data]";
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    72
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    73
    result.append(']');
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    74
    return result.toString();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    75
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    76
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    77
  @Override
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    78
  public JsObjectImpl asObject() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    79
    return this;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    80
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    81
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    82
  public JsArrayImpl asArray() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    83
    return null;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    84
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    85
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    86
  public JsFunction asFunction() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    87
    return null;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    88
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    89
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    90
  public JsVariable getProperty(String name) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    91
    return subproperties.getProperty(name);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    92
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    93
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    94
  public String getClassName() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    95
    return getMirror().getClassName();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    96
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
    97
52
f577ea64429e Migrated to unmodified Chromium Development Tools version
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 2
diff changeset
    98
  protected InternalContext getInternalContext() {
f577ea64429e Migrated to unmodified Chromium Development Tools version
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 2
diff changeset
    99
    return context;
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   100
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   101
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   102
  Subproperties getSubpropertiesHelper() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   103
    return subproperties;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   104
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   105
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   106
  protected SubpropertiesMirror getSubpropertiesMirror() {
52
f577ea64429e Migrated to unmodified Chromium Development Tools version
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 2
diff changeset
   107
    return context.getValueLoader().loadSubpropertiesInMirror(getMirror()).getSubpropertiesMirror();
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   108
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   109
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   110
  abstract class Subproperties {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   111
    private List<JsVariableImpl> properties = null;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   112
    private Map<String, JsVariableImpl> propertyMap = null;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   113
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   114
    /**
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   115
     * Calls to this method must be synchronized on propertyLock.
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   116
     */
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   117
    private Map<String, JsVariableImpl> ensurePropertyMap() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   118
      if (propertyMap == null) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   119
        List<JsVariableImpl> propertiesList = getPropertiesLazily();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   120
        Map<String, JsVariableImpl> map =
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   121
            new HashMap<String, JsVariableImpl>(propertiesList.size() * 2, 0.75f);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   122
        for (JsVariableImpl prop : propertiesList) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   123
          map.put(prop.getName(), prop);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   124
        }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   125
        propertyMap = Collections.unmodifiableMap(map);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   126
      }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   127
      return propertyMap;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   128
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   129
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   130
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   131
    private List<JsVariableImpl> createPropertiesFromMirror(List<ValueMirror> mirrorProperties,
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   132
        List<? extends PropertyReference> propertyRefs) throws MethodIsBlockingException {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   133
      // TODO(peter.rybin) Maybe assert that context is valid here
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   134
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   135
      List<JsVariableImpl> result = new ArrayList<JsVariableImpl>(mirrorProperties.size());
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   136
      for (int i = 0; i < mirrorProperties.size(); i++) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   137
        ValueMirror mirror = mirrorProperties.get(i);
276
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   138
        Object varName = propertyRefs.get(i).getName();
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   139
        String fqn = getFullyQualifiedName(varName);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   140
        if (fqn == null) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   141
          continue;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   142
        }
276
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   143
        String decoratedName = JsVariableImpl.NameDecorator.decorateVarName(varName);
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   144
        result.add(new JsVariableImpl(context, mirror, varName, decoratedName, fqn));
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   145
      }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   146
      return result;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   147
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   148
276
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   149
    private String getFullyQualifiedName(Object propName) {
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   150
      if (variableFqn == null) {
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   151
        return null;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   152
      }
276
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   153
      if (propName instanceof String) {
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   154
        String propNameStr = (String) propName;
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   155
        if (propNameStr.startsWith(".")) {
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   156
          // ".arguments" is not legal
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   157
          return null;
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   158
        }
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   159
      }
f2f4a1259de8 Bug 2065 - Pull updated Chrome Developer Tools into the workspace
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 52
diff changeset
   160
      return variableFqn + JsVariableImpl.NameDecorator.buildAccessSuffix(propName);
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   161
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   162
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   163
    JsVariableImpl getProperty(String propertyName) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   164
      return ensurePropertyMap().get(propertyName);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   165
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   166
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   167
    List<JsVariableImpl> getPropertiesLazily() throws MethodIsBlockingException {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   168
      synchronized (this) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   169
        if (properties == null) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   170
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   171
        List<? extends PropertyReference> propertyRefs = getPropertyRefs(getSubpropertiesMirror());
52
f577ea64429e Migrated to unmodified Chromium Development Tools version
Eugene Ostroukhov <eugeneo@symbian.org>
parents: 2
diff changeset
   172
        ValueLoader valueLoader = context.getValueLoader();
2
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   173
        List<ValueMirror> subMirrors = valueLoader.getOrLoadValueFromRefs(propertyRefs);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   174
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   175
          List<JsVariableImpl> wrappedProperties = createPropertiesFromMirror(subMirrors,
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   176
              propertyRefs);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   177
          properties = Collections.unmodifiableList(wrappedProperties);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   178
        }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   179
        return properties;
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   180
      }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   181
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   182
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   183
    abstract List<? extends PropertyReference> getPropertyRefs(
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   184
        SubpropertiesMirror subpropertiesMirror);
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   185
  }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   186
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   187
  private final Subproperties subproperties = new Subproperties() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   188
    @Override
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   189
    List<? extends PropertyReference> getPropertyRefs(SubpropertiesMirror subpropertiesMirror) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   190
      return subpropertiesMirror.getProperties();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   191
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   192
  };
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   193
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   194
  private final Subproperties internalProperties = new Subproperties() {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   195
    @Override
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   196
    List<? extends PropertyReference> getPropertyRefs(SubpropertiesMirror subpropertiesMirror) {
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   197
      return subpropertiesMirror.getInternalProperties();
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   198
    }
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   199
  };
e4420d2515f1 Initial version of WRT Debugger.
TasneemS@US-TASNEEMS
parents:
diff changeset
   200
}