1 11 package org.eclipse.jdt.internal.ui.browsing; 12 13 import org.eclipse.core.runtime.CoreException; 14 15 import org.eclipse.jdt.core.ICompilationUnit; 16 import org.eclipse.jdt.core.ISourceRange; 17 import org.eclipse.jdt.core.ISourceReference; 18 import org.eclipse.jdt.core.IType; 19 20 import org.eclipse.jdt.ui.ProblemsLabelDecorator; 21 22 import org.eclipse.jdt.internal.ui.viewsupport.ImageDescriptorRegistry; 23 24 28 class TopLevelTypeProblemsLabelDecorator extends ProblemsLabelDecorator { 29 30 public TopLevelTypeProblemsLabelDecorator(ImageDescriptorRegistry registry) { 31 super(registry); 32 } 33 34 37 protected boolean isInside(int pos, ISourceReference sourceElement) throws CoreException { 38 43 if (!(sourceElement instanceof IType) || ((IType)sourceElement).getDeclaringType() != null) 44 return false; 45 46 ICompilationUnit cu= ((IType)sourceElement).getCompilationUnit(); 47 if (cu == null) 48 return false; 49 IType[] types= cu.getTypes(); 50 if (types.length < 1) 51 return false; 52 53 int firstTypeStartOffset= -1; 54 ISourceRange range= types[0].getSourceRange(); 55 if (range != null) 56 firstTypeStartOffset= range.getOffset(); 57 58 int lastTypeEndOffset= -1; 59 range= types[types.length-1].getSourceRange(); 60 if (range != null) 61 lastTypeEndOffset= range.getOffset() + range.getLength() - 1; 62 63 return pos < firstTypeStartOffset || pos > lastTypeEndOffset || isInside(pos, sourceElement.getSourceRange()); 64 } 65 66 private boolean isInside(int pos, ISourceRange range) { 67 if (range == null) 68 return false; 69 int offset= range.getOffset(); 70 return offset <= pos && pos < offset + range.getLength(); 71 } 72 } 73 | Popular Tags |