Search in sources :

Example 1 with IValue

use of org.eclipse.debug.core.model.IValue in project liferay-ide by liferay.

the class FMStackFrame method getVariables.

public IVariable[] getVariables() throws DebugException {
    if (this.variables == null) {
        /*
             * Represents the debugger-side mirror of a debugged freemarker.core.Environment object in the remote VM.
             *
             * This interface extends DebugModel, and the properties of the Environment are exposed as hash keys on it.
             * Specifically, the following keys are supported: "currentNamespace", "dataModel", "globalNamespace",
             * "knownVariables", "mainNamespace", and "template".
             *
             * The debug model for the template supports keys
             * "configuration" and "name".
             *
             * The debug model for the configuration supports key "sharedVariables".
             * Additionally, all of the debug models for environment, template, and configuration also support all the
             * setting keys of freemarker.core.Configurable objects.
             */
        boolean advancedView = PortalCore.getPrefs().getBoolean(PortalCore.PREF_ADVANCED_VARIABLES_VIEW, false);
        final DebuggedEnvironment env = this.thread.getEnvironment();
        FMVariable[] topLevelVars = null;
        try {
            topLevelVars = new FMVariable[] { new FMVariable(this, "currentNamespace", env.get("currentNamespace")), new FMVariable(this, "dataModel", env.get("dataModel")), new FMVariable(this, "globalNamespace", env.get("globalNamespace")), new FMVariable(this, "knownVariables", env.get("knownVariables")), new FMVariable(this, "mainNamespace", env.get("mainNamespace")), new FMVariable(this, "template", env.get("template")) {

                @Override
                public IValue getValue() throws DebugException {
                    return new TemplateVMValue(stackFrame, debugModel);
                }
            } };
        } catch (Exception e) {
            PortalCore.logError("Unable to create freemarker variables", e);
        }
        if (topLevelVars != null) {
            if (advancedView) {
                this.variables = topLevelVars;
            } else {
                // collapse all the variables into one list and remove duplicates
                Map<String, IVariable> vars = new HashMap<String, IVariable>();
                for (FMVariable topLevelVar : topLevelVars) {
                    for (IVariable nestedVar : topLevelVar.getValue().getVariables()) {
                        IVariable existingVar = vars.get(nestedVar.getName());
                        if (existingVar == null) {
                            vars.put(nestedVar.getName(), nestedVar);
                        }
                    }
                }
                this.variables = filterVariables(vars.values().toArray(new IVariable[0]));
                sortVariables(this.variables);
            }
        }
    }
    return this.variables;
}
Also used : HashMap(java.util.HashMap) DebuggedEnvironment(freemarker.debug.DebuggedEnvironment) IVariable(org.eclipse.debug.core.model.IVariable) DebugException(org.eclipse.debug.core.DebugException) CoreException(org.eclipse.core.runtime.CoreException) DebugException(org.eclipse.debug.core.DebugException) IValue(org.eclipse.debug.core.model.IValue)

Aggregations

DebuggedEnvironment (freemarker.debug.DebuggedEnvironment)1 HashMap (java.util.HashMap)1 CoreException (org.eclipse.core.runtime.CoreException)1 DebugException (org.eclipse.debug.core.DebugException)1 IValue (org.eclipse.debug.core.model.IValue)1 IVariable (org.eclipse.debug.core.model.IVariable)1