// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.sdk.internal.v8native.value;
import org.chromium.sdk.ExceptionData;
import org.chromium.sdk.JsValue;
import org.chromium.sdk.internal.v8native.InternalContext;
/**
* An immutable implementation of the ExceptionData interface.
*/
public class ExceptionDataImpl implements ExceptionData {
private final InternalContext context;
private final String sourceText;
private final ValueMirror mirror;
private final String name;
private final boolean isUncaught;
private final String exceptionText;
private JsValueBase cachedException;
public ExceptionDataImpl(InternalContext context, ValueMirror mirror, String name,
boolean isUncaught, String sourceText, String exceptionText) {
this.context = context;
this.mirror = mirror;
this.name = name;
this.isUncaught = isUncaught;
this.sourceText = sourceText;
this.exceptionText = exceptionText;
}
@Override
public JsValue getExceptionValue() {
if (cachedException == null) {
// TODO: make it thread-safe.
cachedException = JsVariableImpl.createValue(context.getValueLoader(), mirror, "<exception>");
}
return cachedException;
}
@Override
public String getSourceText() {
return sourceText;
}
@Override
public boolean isUncaught() {
return isUncaught;
}
@Override
public String getExceptionMessage() {
return exceptionText;
}
}