package com.redhat.ceylon.eclipse.code.explorer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.internal.ui.packageview.PackageExplorerProblemsDecorator; import org.eclipse.jdt.ui.JavaElementImageDescriptor; public class PackageExplorerProblemsLabelDecorator extends PackageExplorerProblemsDecorator { // private boolean flatPackageMode; // // public ProbsLabelDecorator(boolean flatPackageMode) { // this.flatPackageMode = flatPackageMode; // } @Override protected int computeAdornmentFlags(Object obj) { //if (!flatPackageMode && !fragment.isDefaultPackage()) { if (obj instanceof IJavaElement) { IJavaElement element= (IJavaElement) obj; int type= element.getElementType(); if (type==IJavaElement.PACKAGE_FRAGMENT) { IPackageFragment fragment = (IPackageFragment) obj; try { for (Object o: fragment.getNonJavaResources()) { if (o instanceof IFile) { IFile file = (IFile) o; String ext = file.getFileExtension(); if (ext!=null && ext.equals("ceylon")) { if (file.getName().equals("module.ceylon")) { int flags= getErrorTicksFromMarkers(element.getResource()); //TODO: see ProblemsLabelDecorator // if (flags != ERRORTICK_ERROR) // && isIgnoringOptionalProblems(root.getRawClasspathEntry())) { // flags= ERRORTICK_IGNORE_OPTIONAL_PROBLEMS; // } return flags; } } } } } catch (Exception e) { e.printStackTrace(); } } } return super.computeAdornmentFlags(obj); } private int getErrorTicksFromMarkers(IResource res) throws CoreException { if (res == null || !res.isAccessible()) { return 0; } int severity= 0; // if (sourceElement == null) { // if (res instanceof IProject) { // severity= res.findMaxProblemSeverity(IJavaModelMarker.BUILDPATH_PROBLEM_MARKER, true, IResource.DEPTH_ZERO); // if (severity == IMarker.SEVERITY_ERROR) { // return ERRORTICK_BUILDPATH_ERROR; // } // severity= res.findMaxProblemSeverity(JavaRuntime.JRE_CONTAINER_MARKER, true, IResource.DEPTH_ZERO); // if (severity == IMarker.SEVERITY_ERROR) { // return ERRORTICK_BUILDPATH_ERROR; // } // } severity= res.findMaxProblemSeverity(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE); // } else { // IMarker[] markers= res.findMarkers(IMarker.PROBLEM, true, depth); // if (markers != null && markers.length > 0) { // for (int i= 0; i < markers.length && (severity != IMarker.SEVERITY_ERROR); i++) { // IMarker curr= markers[i]; // if (isMarkerInRange(curr, sourceElement)) { // int val= curr.getAttribute(IMarker.SEVERITY, -1); // if (val == IMarker.SEVERITY_WARNING || val == IMarker.SEVERITY_ERROR) { // severity= val; // } // } // } // } // } if (severity == IMarker.SEVERITY_ERROR) { return JavaElementImageDescriptor.ERROR; } else if (severity == IMarker.SEVERITY_WARNING) { return JavaElementImageDescriptor.WARNING; } return 0; } }