package com.siberika.idea.pascal.debugger; import com.intellij.xdebugger.frame.XCompositeNode; import com.intellij.xdebugger.frame.XValue; import com.intellij.xdebugger.frame.XValueNode; import com.intellij.xdebugger.frame.XValuePlace; import com.siberika.idea.pascal.PascalBundle; import com.siberika.idea.pascal.PascalIcons; import com.siberika.idea.pascal.debugger.gdb.GdbXDebugProcess; import com.siberika.idea.pascal.jps.sdk.PascalSdkData; import com.siberika.idea.pascal.lang.psi.impl.PasField; import org.jetbrains.annotations.NotNull; import javax.swing.*; /** * Author: George Bakhtadze * Date: 04/04/2017 */ public class PascalDebuggerValue extends XValue { private final GdbXDebugProcess debugProcess; private final String name; private final String type; private final String value; private final Integer childrenCount; private final PasField.FieldType fieldType; public PascalDebuggerValue(GdbXDebugProcess debugProcess, String name, String type, String value, Integer childrenCount, PasField.FieldType fieldType) { this.debugProcess = debugProcess; this.name = name; this.type = type; this.value = value; this.childrenCount = childrenCount; this.fieldType = fieldType; } public PascalDebuggerValue(GdbXDebugProcess debugProcess, String name, String type, String value, Integer childrenCount) { this(debugProcess, name, type, value, childrenCount, PasField.FieldType.VARIABLE); } @Override public void computePresentation(@NotNull XValueNode node, @NotNull XValuePlace place) { Icon icon = PascalIcons.VARIABLE; switch (fieldType) { case ROUTINE: { icon = PascalIcons.ROUTINE; break; } case CONSTANT: { icon = PascalIcons.CONSTANT; break; } case PROPERTY: { icon = PascalIcons.PROPERTY; break; } case PSEUDO_VARIABLE: { icon = PascalIcons.COMPILED; break; } } node.setPresentation(icon, type != null ? type : "??", value != null ? value : "??", childrenCount != null && childrenCount > 0); } @Override public void computeChildren(@NotNull XCompositeNode node) { if (debugProcess.getData().getBoolean(PascalSdkData.Keys.DEBUGGER_RETRIEVE_CHILDS)) { debugProcess.computeValueChildren(name, node); } else { node.setErrorMessage(PascalBundle.message("debug.error.subfields.disabled")); } } }