Skip to content

Commit 232d12a

Browse files
fix: icon rendering [IDE-811] (#238)
fix: icon rendering
1 parent d05e763 commit 232d12a

5 files changed

Lines changed: 52 additions & 28 deletions

File tree

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/BaseTreeNode.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,14 @@
55
import java.util.List;
66
import java.util.stream.Collectors;
77

8+
import org.eclipse.core.resources.IResource;
89
import org.eclipse.jface.resource.ImageDescriptor;
10+
import org.eclipse.jface.viewers.ILabelProvider;
911
import org.eclipse.jface.viewers.TreeNode;
12+
import org.eclipse.swt.graphics.Image;
13+
import org.eclipse.swt.graphics.ImageData;
14+
import org.eclipse.swt.graphics.ImageDataProvider;
15+
import org.eclipse.ui.model.WorkbenchLabelProvider;
1016

1117
public class BaseTreeNode extends TreeNode {
1218
private ImageDescriptor imageDescriptor;
@@ -52,6 +58,19 @@ public void removeChildren() {
5258
public void setImageDescriptor(ImageDescriptor imageDescriptor) {
5359
this.imageDescriptor = imageDescriptor;
5460
}
61+
62+
protected ImageDescriptor getImageDescriptor(IResource object) {
63+
ILabelProvider labelProvider = WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider();
64+
try {
65+
Image image = labelProvider.getImage(object);
66+
if (image == null || image.isDisposed())
67+
return null;
68+
69+
return getImageDescriptorFromImage(image);
70+
} finally {
71+
labelProvider.dispose();
72+
}
73+
}
5574

5675
public ImageDescriptor getImageDescriptor() {
5776
return this.imageDescriptor;
@@ -85,4 +104,16 @@ public void reset() {
85104
public String getDetails() {
86105
return "";
87106
}
107+
108+
protected ImageDescriptor getImageDescriptorFromImage(Image image) {
109+
final var data = image.getImageData();
110+
111+
ImageDataProvider provider = new ImageDataProvider() {
112+
@Override
113+
public ImageData getImageData(int zoom) {
114+
return data;
115+
}
116+
};
117+
return ImageDescriptor.createFromImageDataProvider(provider);
118+
}
88119
}

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/ContentRootNode.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import java.nio.file.Path;
99

10+
import org.eclipse.core.resources.IProject;
11+
import org.eclipse.core.resources.IResource;
1012
import org.eclipse.jface.resource.ImageDescriptor;
1113
import org.eclipse.jface.viewers.ILabelProvider;
1214
import org.eclipse.swt.graphics.Image;
@@ -28,17 +30,8 @@ public ContentRootNode(String name, Path value) {
2830

2931
@Override
3032
public ImageDescriptor getImageDescriptor() {
31-
ILabelProvider labelProvider = WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider();
32-
try {
33-
var object = ResourceUtils.getProjectByPath(path);
34-
Image image = labelProvider.getImage(object);
35-
if (image == null || image.isDisposed())
36-
return null;
37-
38-
return ImageDescriptor.createFromImage(image);
39-
} finally {
40-
labelProvider.dispose();
41-
}
33+
var iResource = ResourceUtils.getProjectByPath(path);
34+
return getImageDescriptor(iResource);
4235
}
4336

4437
public ProductTreeNode getProductNode(String product) {

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/FileTreeNode.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
import java.nio.file.Path;
44
import java.nio.file.Paths;
5+
import java.util.Iterator;
56

7+
import org.eclipse.core.resources.IFile;
68
import org.eclipse.core.resources.ResourcesPlugin;
79
import org.eclipse.jface.resource.ImageDescriptor;
810
import org.eclipse.jface.viewers.ILabelProvider;
911
import org.eclipse.jface.viewers.TreeNode;
1012
import org.eclipse.swt.graphics.Image;
13+
import org.eclipse.swt.graphics.ImageData;
14+
import org.eclipse.swt.graphics.ImageDataProvider;
1115
import org.eclipse.ui.model.WorkbenchLabelProvider;
1216

1317
public class FileTreeNode extends BaseTreeNode {
@@ -21,21 +25,14 @@ public FileTreeNode(String value) {
2125

2226
@Override
2327
public ImageDescriptor getImageDescriptor() {
24-
ILabelProvider labelProvider = WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider();
25-
try {
26-
var files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(getPath().toUri());
27-
var object = files[0];
28-
if (object == null) {
29-
return null;
28+
var files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(getPath().toUri());
29+
for (IFile file : files) {
30+
var descriptor = getImageDescriptor(file);
31+
if (descriptor != null) {
32+
return descriptor;
3033
}
31-
Image image = labelProvider.getImage(object);
32-
if (image == null)
33-
return null;
34-
35-
return ImageDescriptor.createFromImage(image);
36-
} finally {
37-
labelProvider.dispose();
3834
}
35+
return null;
3936
}
4037

4138
@Override

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/RootNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void reset() {
2525

2626
for (IProject project : openProjects) {
2727
Path path = ResourceUtils.getFullPath(project);
28-
var contentRoot = new ContentRootNode(project.getName(), path);
28+
BaseTreeNode contentRoot = new ContentRootNode(project.getName(), path);
2929
this.addChild(contentRoot);
3030
}
3131
}

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/providers/TreeLabelProvider.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,13 @@ public Image getImage(Object element) {
3838
return null;
3939
}
4040

41-
if (images.get(imageDescriptor) == null) {
42-
images.putIfAbsent(imageDescriptor, imageDescriptor.createImage());
41+
synchronized (images) {
42+
Image image = images.get(imageDescriptor);
43+
if (image == null || image.isDisposed()) {
44+
images.put(imageDescriptor, imageDescriptor.createImage());
45+
}
46+
return images.get(imageDescriptor);
4347
}
44-
return images.get(imageDescriptor);
4548
}
4649

4750
@Override

0 commit comments

Comments
 (0)