image renderer for SunGraphics2D

This commit is contained in:
Egor.Ushakov
2015-02-11 19:37:03 +03:00
parent c3fe493eec
commit 7474bfd63f
6 changed files with 78 additions and 9 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,11 +18,12 @@ package com.intellij.debugger.engine;
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl;
import com.intellij.xdebugger.frame.XFullValueEvaluator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Created by Egor on 04.10.2014.
* @author egor
*/
public interface FullValueEvaluatorProvider {
@NotNull XFullValueEvaluator getFullValueEvaluator(EvaluationContextImpl evaluationContext, ValueDescriptorImpl valueDescriptor);
@Nullable
XFullValueEvaluator getFullValueEvaluator(EvaluationContextImpl evaluationContext, ValueDescriptorImpl valueDescriptor);
}
@@ -146,7 +146,11 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV
presentation = new JavaValuePresentation(value, myValueDescriptor.getIdLabel(), exception != null ? exception.getMessage() : null, myValueDescriptor);
if (myValueDescriptor.getLastRenderer() instanceof FullValueEvaluatorProvider) {
node.setFullValueEvaluator(((FullValueEvaluatorProvider)myValueDescriptor.getLastRenderer()).getFullValueEvaluator(myEvaluationContext, myValueDescriptor));
XFullValueEvaluator evaluator = ((FullValueEvaluatorProvider)myValueDescriptor.getLastRenderer())
.getFullValueEvaluator(myEvaluationContext, myValueDescriptor);
if (evaluator != null) {
node.setFullValueEvaluator(evaluator);
}
}
else if (value.length() > XValueNode.MAX_VALUE_LENGTH) {
node.setFullValueEvaluator(new XFullValueEvaluator() {
@@ -0,0 +1,64 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.debugger.settings;
import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.engine.DebuggerUtils;
import com.intellij.debugger.engine.FullValueEvaluatorProvider;
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl;
import com.intellij.xdebugger.frame.XFullValueEvaluator;
import com.sun.jdi.*;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
/**
* @author egor
*/
public class GraphicsObjectRenderer extends ToStringBasedRenderer implements FullValueEvaluatorProvider {
public GraphicsObjectRenderer(final NodeRendererSettings rendererSettings) {
super(rendererSettings, "Graphics", null, null);
setClassName("sun.java2d.SunGraphics2D");
setEnabled(true);
}
@Nullable
@Override
public XFullValueEvaluator getFullValueEvaluator(final EvaluationContextImpl evaluationContext, final ValueDescriptorImpl valueDescriptor) {
try {
ObjectReference value = (ObjectReference)valueDescriptor.getValue();
Field surfaceField = ((ClassType)value.type()).fieldByName("surfaceData");
if (surfaceField == null) return null;
ObjectReference surfaceDataValue = (ObjectReference)value.getValue(surfaceField);
final Field bufImgField = ((ClassType)surfaceDataValue.type()).fieldByName("bufImg");
if (bufImgField == null) return null;
final Value bufImgValue = surfaceDataValue.getValue(bufImgField);
Type type = bufImgValue.type();
if (!(type instanceof ReferenceType) || !DebuggerUtils.instanceOf(type, "java.awt.Image")) {
return null;
}
return new CustomPopupFullValueEvaluator(DebuggerBundle.message("message.node.show.image"), evaluationContext) {
@Override
protected JComponent createComponent() {
return ImageObjectRenderer.createIconViewer(ImageObjectRenderer.getIcon(myEvaluationContext, bufImgValue,
"imageToBytes"));
}
};
} catch (Exception ignored) {}
return null;
}
}
@@ -25,7 +25,7 @@ import com.intellij.debugger.ui.tree.ValueDescriptor;
import com.intellij.debugger.ui.tree.render.DescriptorLabelListener;
import com.intellij.icons.AllIcons;
import com.intellij.xdebugger.frame.XFullValueEvaluator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -46,7 +46,7 @@ class IconObjectRenderer extends ToStringBasedRenderer implements FullValueEvalu
return ImageObjectRenderer.getIcon(evaluationContext, descriptor.getValue(), getterName);
}
@NotNull
@Nullable
@Override
public XFullValueEvaluator getFullValueEvaluator(final EvaluationContextImpl evaluationContext, final ValueDescriptorImpl valueDescriptor) {
return new CustomPopupFullValueEvaluator(DebuggerBundle.message("message.node.show.icon"), evaluationContext) {
@@ -26,7 +26,6 @@ import com.intellij.rt.debugger.ImageSerializer;
import com.intellij.xdebugger.frame.XFullValueEvaluator;
import com.sun.jdi.*;
import org.intellij.images.editor.impl.ImageEditorManagerImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -45,7 +44,7 @@ class ImageObjectRenderer extends ToStringBasedRenderer implements FullValueEval
setEnabled(true);
}
@NotNull
@Nullable
@Override
public XFullValueEvaluator getFullValueEvaluator(final EvaluationContextImpl evaluationContext, final ValueDescriptorImpl valueDescriptor) {
return new CustomPopupFullValueEvaluator(DebuggerBundle.message("message.node.show.image"), evaluationContext) {
+1
View File
@@ -1498,6 +1498,7 @@
<debugger.nodeRenderer implementation="com.intellij.debugger.settings.ColorObjectRenderer"/>
<debugger.nodeRenderer implementation="com.intellij.debugger.settings.ImageObjectRenderer"/>
<debugger.nodeRenderer implementation="com.intellij.debugger.settings.IconObjectRenderer"/>
<debugger.nodeRenderer implementation="com.intellij.debugger.settings.GraphicsObjectRenderer"/>
<applicationService serviceInterface="com.intellij.remoteServer.runtime.deployment.debug.JavaDebuggerLauncher"
serviceImplementation="com.intellij.remoteServer.impl.runtime.deployment.debug.JavaDebuggerLauncherImpl"/>