]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-before/ui/org/eclipse/jdt/internal/ui/BuildpathIndicatorLabelDecorator.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui / org / eclipse / jdt / internal / ui / BuildpathIndicatorLabelDecorator.java
1 /*******************************************************************************
2  * Copyright (c) 2009, 2011 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package org.eclipse.jdt.internal.ui;
12
13 import java.util.List;
14
15 import org.eclipse.core.resources.IProject;
16 import org.eclipse.core.resources.IResource;
17
18 import org.eclipse.jface.resource.ImageDescriptor;
19 import org.eclipse.jface.viewers.IDecoration;
20
21 import org.eclipse.jdt.core.IJavaElement;
22 import org.eclipse.jdt.core.IJavaElementDelta;
23 import org.eclipse.jdt.core.IJavaProject;
24 import org.eclipse.jdt.core.IPackageFragmentRoot;
25 import org.eclipse.jdt.core.JavaCore;
26 import org.eclipse.jdt.core.JavaModelException;
27
28 public class BuildpathIndicatorLabelDecorator extends AbstractJavaElementLabelDecorator {
29
30         /**
31          * {@inheritDoc}
32          */
33         @Override
34         public void decorate(Object element, IDecoration decoration) {
35                 ImageDescriptor overlay= getOverlay(element);
36                 if (overlay != null) {
37                         decoration.addOverlay(overlay, IDecoration.BOTTOM_LEFT);
38                 }
39         }
40
41         private ImageDescriptor getOverlay(Object element) {
42                 if (element instanceof IResource) {
43                         IResource resource= (IResource) element;
44                         IProject project= resource.getProject();
45                         if (project != null) {
46                                 IJavaProject javaProject= JavaCore.create(project);
47                                 if (javaProject != null) {
48                                         if (javaProject.isOnClasspath(resource)) {
49                                                 IJavaElement javaElement= JavaCore.create(resource, javaProject);
50                                                 try {
51                                                         if (javaElement instanceof IPackageFragmentRoot
52                                                                         && ((IPackageFragmentRoot)javaElement).getKind() != IPackageFragmentRoot.K_SOURCE) {
53                                                                 return JavaPluginImages.DESC_OVR_LIBRARY;
54                                                         }
55                                                 } catch (JavaModelException e) {
56                                                         return null;
57                                                 }
58                                         }
59                                 }
60                         }
61                 }
62                 return null;
63         }
64
65         @Override
66         protected void processDelta(IJavaElementDelta delta, List<IJavaElement> result) {
67                 IJavaElement elem= delta.getElement();
68
69                 boolean isChanged= delta.getKind() == IJavaElementDelta.CHANGED;
70                 boolean isRemoved= delta.getKind() == IJavaElementDelta.REMOVED;
71                 int flags= delta.getFlags();
72
73                 switch (elem.getElementType()) {
74                         case IJavaElement.JAVA_MODEL:
75                                 processChildrenDelta(delta, result);
76                                 return;
77                         case IJavaElement.JAVA_PROJECT:
78                                 if (isRemoved || (isChanged &&
79                                                 (flags & IJavaElementDelta.F_CLOSED) != 0)) {
80                                         return;
81                                 }
82                                 processChildrenDelta(delta, result);
83                                 return;
84                         case IJavaElement.PACKAGE_FRAGMENT_ROOT:
85                                 if (isRemoved) {
86                                         return;
87                                 }
88                                 try {
89                                         if ((((flags & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) != 0) ||
90                                                         ((flags & IJavaElementDelta.F_ADDED_TO_CLASSPATH) != 0))
91                                                         && ((IPackageFragmentRoot)elem).getKind() != IPackageFragmentRoot.K_SOURCE) {
92                                                 result.add(elem);
93                                         }
94                                 } catch (JavaModelException e) {
95                                         // don't update
96                                 }
97                                 return;
98                         default:
99                                 return;
100                 }
101         }
102
103 }