blob: 9756dc124d6ec145c64f96720c8aec311339f988 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2008 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.core.search.matching;
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
public abstract class VariablePattern extends JavaSearchPattern {
protected boolean findDeclarations = false;
protected boolean findReferences = false;
protected boolean readAccess = false;
protected boolean writeAccess = false;
protected char[] name;
public final static int FINE_GRAIN_MASK =
IJavaSearchConstants.SUPER_REFERENCE |
IJavaSearchConstants.QUALIFIED_REFERENCE |
IJavaSearchConstants.THIS_REFERENCE |
IJavaSearchConstants.IMPLICIT_THIS_REFERENCE;
public VariablePattern(int patternKind, char[] name, int limitTo, int matchRule) {
super(patternKind, matchRule);
this.fineGrain = limitTo & FINE_GRAIN_MASK;
if (this.fineGrain == 0) {
switch (limitTo & 0xF) {
case IJavaSearchConstants.DECLARATIONS :
this.findDeclarations = true;
break;
case IJavaSearchConstants.REFERENCES :
this.readAccess = true;
this.writeAccess = true;
break;
case IJavaSearchConstants.READ_ACCESSES :
this.readAccess = true;
break;
case IJavaSearchConstants.WRITE_ACCESSES :
this.writeAccess = true;
break;
case IJavaSearchConstants.ALL_OCCURRENCES :
this.findDeclarations = true;
this.readAccess = true;
this.writeAccess = true;
break;
}
this.findReferences = this.readAccess || this.writeAccess;
}
this.name = (this.isCaseSensitive || this.isCamelCase) ? name : CharOperation.toLowerCase(name);
}
/*
* Returns whether a method declaration or message send will need to be resolved to
* find out if this method pattern matches it.
*/
protected boolean mustResolve() {
// would like to change this so that we only do it if generic references are found
return this.findReferences || this.fineGrain != 0; // always resolve (in case of a simple name reference being a potential match)
}
}