blob: b01102e0e271df35e8345fd5c7717d9ab1478aef [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.search;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeParameter;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.core.search.SearchPattern;
import org.eclipse.jdt.ui.search.ElementQuerySpecification;
import org.eclipse.jdt.ui.search.PatternQuerySpecification;
import org.eclipse.jdt.ui.search.QuerySpecification;
abstract class MatchFilter {
public abstract boolean isApplicable(JavaSearchQuery query);
public abstract boolean filters(JavaElementMatch match);
public abstract String getName();
public abstract String getActionLabel();
public abstract String getDescription();
public abstract String getID();
private static final MatchFilter IMPORT_FILTER= new ImportFilter();
private static final MatchFilter JAVADOC_FILTER= new JavadocFilter();
private static final MatchFilter READ_FILTER= new ReadFilter();
private static final MatchFilter WRITE_FILTER= new WriteFilter();
private static final MatchFilter INEXACT_FILTER= new InexactMatchFilter();
private static final MatchFilter ERASURE_FILTER= new ErasureMatchFilter();
private static final MatchFilter[] ALL_FILTERS= new MatchFilter[] {
IMPORT_FILTER,
JAVADOC_FILTER,
READ_FILTER,
WRITE_FILTER,
INEXACT_FILTER,
ERASURE_FILTER
};
public static MatchFilter[] allFilters() {
return ALL_FILTERS;
}
}
class ImportFilter extends MatchFilter {
public boolean filters(JavaElementMatch match) {
return match.getElement() instanceof IImportDeclaration;
}
public String getName() {
return SearchMessages.MatchFilter_ImportFilter_name;
}
public String getActionLabel() {
return SearchMessages.MatchFilter_ImportFilter_actionLabel;
}
public String getDescription() {
return SearchMessages.MatchFilter_ImportFilter_description;
}
public boolean isApplicable(JavaSearchQuery query) {
QuerySpecification spec= query.getSpecification();
if (spec instanceof ElementQuerySpecification) {
ElementQuerySpecification elementSpec= (ElementQuerySpecification) spec;
return elementSpec.getElement() instanceof IType;
} else if (spec instanceof PatternQuerySpecification) {
PatternQuerySpecification patternSpec= (PatternQuerySpecification) spec;
return patternSpec.getSearchFor() == IJavaSearchConstants.TYPE;
}
return false;
}
public String getID() {
return "filter_imports"; //$NON-NLS-1$
}
}
abstract class FieldFilter extends MatchFilter {
public boolean isApplicable(JavaSearchQuery query) {
QuerySpecification spec= query.getSpecification();
if (spec instanceof ElementQuerySpecification) {
ElementQuerySpecification elementSpec= (ElementQuerySpecification) spec;
return elementSpec.getElement() instanceof IField;
} else if (spec instanceof PatternQuerySpecification) {
PatternQuerySpecification patternSpec= (PatternQuerySpecification) spec;
return patternSpec.getSearchFor() == IJavaSearchConstants.FIELD;
}
return false;
}
}
class WriteFilter extends FieldFilter {
public boolean filters(JavaElementMatch match) {
return match.isWriteAccess() && !match.isReadAccess();
}
public String getName() {
return SearchMessages.MatchFilter_WriteFilter_name;
}
public String getActionLabel() {
return SearchMessages.MatchFilter_WriteFilter_actionLabel;
}
public String getDescription() {
return SearchMessages.MatchFilter_WriteFilter_description;
}
public String getID() {
return "filter_writes"; //$NON-NLS-1$
}
}
class ReadFilter extends FieldFilter {
public boolean filters(JavaElementMatch match) {
return match.isReadAccess() && !match.isWriteAccess();
}
public String getName() {
return SearchMessages.MatchFilter_ReadFilter_name;
}
public String getActionLabel() {
return SearchMessages.MatchFilter_ReadFilter_actionLabel;
}
public String getDescription() {
return SearchMessages.MatchFilter_ReadFilter_description;
}
public String getID() {
return "filter_reads"; //$NON-NLS-1$
}
}
class JavadocFilter extends MatchFilter {
public boolean filters(JavaElementMatch match) {
return match.isJavadoc();
}
public String getName() {
return SearchMessages.MatchFilter_JavadocFilter_name;
}
public String getActionLabel() {
return SearchMessages.MatchFilter_JavadocFilter_actionLabel;
}
public String getDescription() {
return SearchMessages.MatchFilter_JavadocFilter_description;
}
public boolean isApplicable(JavaSearchQuery query) {
return true;
}
public String getID() {
return "filter_javadoc"; //$NON-NLS-1$
}
}
abstract class GenericTypeFilter extends MatchFilter {
public boolean isApplicable(JavaSearchQuery query) {
QuerySpecification spec= query.getSpecification();
if (spec instanceof ElementQuerySpecification) {
ElementQuerySpecification elementSpec= (ElementQuerySpecification) spec;
Object element= elementSpec.getElement();
ITypeParameter[] typeParameters= null;
try {
if (element instanceof IType) {
typeParameters= ((IType)element).getTypeParameters();
} else if (element instanceof IMethod) {
typeParameters= ((IMethod)element).getTypeParameters();
}
} catch (JavaModelException e) {
return false;
}
return typeParameters != null && typeParameters.length > 0;
}
return false;
}
}
class ErasureMatchFilter extends GenericTypeFilter {
public boolean filters(JavaElementMatch match) {
return (match.getMatchRule() & (SearchPattern.R_FULL_MATCH | SearchPattern.R_EQUIVALENT_MATCH)) == 0;
}
public String getName() {
return SearchMessages.MatchFilter_ErasureFilter_name;
}
public String getActionLabel() {
return SearchMessages.MatchFilter_ErasureFilter_actionLabel;
}
public String getDescription() {
return SearchMessages.MatchFilter_ErasureFilter_description;
}
public String getID() {
return "filter_erasure"; //$NON-NLS-1$
}
}
class InexactMatchFilter extends GenericTypeFilter {
public boolean filters(JavaElementMatch match) {
return (match.getMatchRule() & (SearchPattern.R_FULL_MATCH)) == 0;
}
public String getName() {
return SearchMessages.MatchFilter_InexactFilter_name;
}
public String getActionLabel() {
return SearchMessages.MatchFilter_InexactFilter_actionLabel;
}
public String getDescription() {
return SearchMessages.MatchFilter_InexactFilter_description;
}
public String getID() {
return "filter_inexact"; //$NON-NLS-1$
}
}