private boolean findVariable(CharSequence name, Iterator<CsmOffsetableDeclaration> it, int offset, CsmFilter filter) {
while(it.hasNext()) {
CsmOffsetableDeclaration decl = it.next();
if (decl.getStartOffset() >= offset) {
break;
}
switch (decl.getKind()) {
case VARIABLE:
if (CharSequences.comparator().compare(name, ((CsmVariable) decl).getName()) == 0) {
return true;
}
break;
case VARIABLE_DEFINITION:
if (CharSequences.comparator().compare(name, ((CsmVariable) decl).getQualifiedName()) == 0) {
return true;
}
break;
case NAMESPACE_DEFINITION:
CsmNamespaceDefinition nd = (CsmNamespaceDefinition) decl;
if (nd.getStartOffset() <= offset && nd.getEndOffset() >= offset) {
if (findVariable(name, CsmSelect.getDeclarations(nd, filter), offset, filter)) {
return true;
}
}
break;
}
}
return false;
}