blob: 52a9f6d75770e0aaf947e1357b58e2dbe5899289 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.browsing;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.ISourceReference;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.ui.ProblemsLabelDecorator;
import org.eclipse.jdt.internal.ui.viewsupport.ImageDescriptorRegistry;
/**
* Decorates top-level types with problem markers that
* are above the first type.
*/
class TopLevelTypeProblemsLabelDecorator extends ProblemsLabelDecorator {
public TopLevelTypeProblemsLabelDecorator(ImageDescriptorRegistry registry) {
super(registry);
}
/* (non-Javadoc)
* @see org.eclipse.jdt.ui.ProblemsLabelDecorator#isInside(int, ISourceReference)
*/
protected boolean isInside(int pos, ISourceReference sourceElement) throws CoreException {
// XXX: Work in progress for problem decorator being a workbench decorator
// IDecoratorManager decoratorMgr= PlatformUI.getWorkbench().getDecoratorManager();
// if (!decoratorMgr.getEnabled("org.eclipse.jdt.ui.problem.decorator")) //$NON-NLS-1$
// return false;
if (!(sourceElement instanceof IType) || ((IType)sourceElement).getDeclaringType() != null)
return false;
ICompilationUnit cu= ((IType)sourceElement).getCompilationUnit();
if (cu == null)
return false;
IType[] types= cu.getTypes();
if (types.length < 1)
return false;
int firstTypeStartOffset= -1;
ISourceRange range= types[0].getSourceRange();
if (range != null)
firstTypeStartOffset= range.getOffset();
int lastTypeEndOffset= -1;
range= types[types.length-1].getSourceRange();
if (range != null)
lastTypeEndOffset= range.getOffset() + range.getLength() - 1;
return pos < firstTypeStartOffset || pos > lastTypeEndOffset || isInside(pos, sourceElement.getSourceRange());
}
private boolean isInside(int pos, ISourceRange range) {
if (range == null)
return false;
int offset= range.getOffset();
return offset <= pos && pos < offset + range.getLength();
}
}