ValueIconRenderer () { return (descriptor, evaluationContext, listener) -> { Value value = descriptor.getValue(); if (value instanceof ObjectReference) { try { ObjectReference objRef = (ObjectReference)value; ReferenceType refType = objRef.referenceType(); if (refType instanceof ClassType) { Value rgbValue = null; Method getRGBMethod = DebuggerUtils.findMethod(refType, "getRGB", "()I"); if (getRGBMethod != null) { ReferenceType rgbMethodDeclaringType = getRGBMethod.declaringType(); if (rgbMethodDeclaringType.name().equals("java.awt.Color")) { // getRGB is not overridden Field valueField = rgbMethodDeclaringType.fieldByName("value"); if (valueField != null) { rgbValue = objRef.getValue(valueField); } } if (rgbValue instanceof IntegerValue) { return createIcon((IntegerValue)rgbValue); } else { EvaluationContextImpl evalContext = ((EvaluationContextImpl)evaluationContext); DebugProcessImpl debugProcess = evalContext.getDebugProcess(); debugProcess.getManagerThread().schedule(new SuspendContextCommandImpl(evalContext.getSuspendContext()) { @Override public void contextAction(@NotNull SuspendContextImpl suspendContext) { try { Value rgbValue = debugProcess.invokeMethod(evaluationContext, objRef, getRGBMethod, Collections.emptyList()); if (rgbValue instanceof IntegerValue) { descriptor.setValueIcon(createIcon((IntegerValue)rgbValue)); listener.labelChanged(); } } catch (EvaluateException e) { LOG.info(e); } } }); } } } } catch (Exception e) { throw new EvaluateException(e.getMessage(), e); } } return null; }; }