/*******************************************************************************
* Copyright (c) 2006, 2013 Wind River Systems, Inc. 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:
* Markus Schorn - initial API and implementation
* Andrew Ferguson (Symbian)
* Bryan Wilkinson (QNX)
*******************************************************************************/
package org.eclipse.cdt.core.index;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.internal.core.index.DeclaredBindingsFilter;
import org.eclipse.core.runtime.CoreException;
/**
* Can be subclassed and used for queries in the index.
* @since 4.0
*/
abstract public class IndexFilter {
public static final IndexFilter ALL = new IndexFilter() {};
public static final IndexFilter ALL_DECLARED = getDeclaredBindingFilter(-1, false);
public static final IndexFilter ALL_DECLARED_OR_IMPLICIT = getDeclaredBindingFilter(-1, true);
public static final IndexFilter CPP_DECLARED_OR_IMPLICIT= getDeclaredBindingFilter(ILinkage.CPP_LINKAGE_ID, true);
/**
* @since 5.1
*/
public static final IndexFilter CPP_DECLARED_OR_IMPLICIT_NO_INSTANCE= getDeclaredBindingFilter(ILinkage.CPP_LINKAGE_ID, true, false);
public static final IndexFilter C_DECLARED_OR_IMPLICIT= getDeclaredBindingFilter(ILinkage.C_LINKAGE_ID, true);
/**
* Get an IndexFilter that filters out bindings from linkages other than that specified.
*
* @param linkageID the id of the linkage whose bindings should be retained
* @return an IndexFilter instance
*/
public static IndexFilter getFilter(final int linkageID) {
return new IndexFilter() {
@Override
public boolean acceptLinkage(ILinkage linkage) {
return linkageID == linkage.getLinkageID();
}
};
}
/**
* Get an IndexFilter that filters out bindings without declarations and those from linkages
* other than that specified.
*
* @param linkageID the id of the linkage whose bindings should be retained, or -1
* to accept all linkages.
* @return an IndexFilter instance
*/
public static IndexFilter getDeclaredBindingFilter(final int linkageID, boolean acceptImplicit) {
return new DeclaredBindingsFilter(linkageID, acceptImplicit, true);
}
/**
* Get an IndexFilter that filters out bindings without declarations and those
* from linkages other than that specified.
*
* @param linkageID the id of the linkage whose bindings should be retained, or -1
* to accept all linkages.
* @return an IndexFilter instance
* @since 5.1
*/
public static IndexFilter getDeclaredBindingFilter(final int linkageID, boolean acceptImplicit, boolean allowInstances) {
return new DeclaredBindingsFilter(linkageID, acceptImplicit, allowInstances);
}
/**
* Returns whether or not to include objects of the given linkage in the query.
* @see IIndex#findBindings(java.util.regex.Pattern, boolean, IndexFilter, org.eclipse.core.runtime.IProgressMonitor)
*
* @param linkage a linkage to be tested
* @return whether to include objects of the given linkage in the query.
*/
public boolean acceptLinkage(ILinkage linkage) {
return true;
}
/**
* Determines whether or not a binding is valid.
*
* @param binding the binding being checked for validity
* @return whether or not the binding is valid
* @throws CoreException
*/
public boolean acceptBinding(IBinding binding) throws CoreException {
return true;
}
}