/******************************************************************************* * Copyright (c) 2000, 2009 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.SearchPattern; import org.eclipse.jdt.internal.core.util.Util; public class FieldPattern extends VariablePattern { // declaring type protected char[] declaringQualification; protected char[] declaringSimpleName; // type protected char[] typeQualification; protected char[] typeSimpleName; protected static char[][] REF_CATEGORIES = { REF }; protected static char[][] REF_AND_DECL_CATEGORIES = { REF, FIELD_DECL }; protected static char[][] DECL_CATEGORIES = { FIELD_DECL }; public static char[] createIndexKey(char[] fieldName) { return fieldName; } public FieldPattern( char[] name, char[] declaringQualification, char[] declaringSimpleName, char[] typeQualification, char[] typeSimpleName, int limitTo, int matchRule) { super(FIELD_PATTERN, name, limitTo, matchRule); this.declaringQualification = this.isCaseSensitive ? declaringQualification : CharOperation.toLowerCase(declaringQualification); this.declaringSimpleName = this.isCaseSensitive ? declaringSimpleName : CharOperation.toLowerCase(declaringSimpleName); this.typeQualification = this.isCaseSensitive ? typeQualification : CharOperation.toLowerCase(typeQualification); this.typeSimpleName = (this.isCaseSensitive || this.isCamelCase) ? typeSimpleName : CharOperation.toLowerCase(typeSimpleName); this.mustResolve = mustResolve(); } /* * Instantiate a field pattern with additional information for generic search */ public FieldPattern( char[] name, char[] declaringQualification, char[] declaringSimpleName, char[] typeQualification, char[] typeSimpleName, String typeSignature, int limitTo, int matchRule) { this(name, declaringQualification, declaringSimpleName, typeQualification, typeSimpleName, limitTo, matchRule); // store type signatures and arguments if (typeSignature != null) { this.typeSignatures = Util.splitTypeLevelsSignature(typeSignature); setTypeArguments(Util.getAllTypeArguments(this.typeSignatures)); } } public void decodeIndexKey(char[] key) { this.name = key; } public SearchPattern getBlankPattern() { return new FieldPattern(null, null, null, null, null, 0, R_EXACT_MATCH | R_CASE_SENSITIVE); } public char[] getIndexKey() { return this.name; } public char[][] getIndexCategories() { if (this.findReferences || this.fineGrain != 0) return this.findDeclarations || this.writeAccess ? REF_AND_DECL_CATEGORIES : REF_CATEGORIES; if (this.findDeclarations) return DECL_CATEGORIES; return CharOperation.NO_CHAR_CHAR; } public boolean matchesDecodedKey(SearchPattern decodedPattern) { return true; // index key is not encoded so query results all match } protected boolean mustResolve() { if (this.declaringSimpleName != null || this.declaringQualification != null) return true; if (this.typeSimpleName != null || this.typeQualification != null) return true; return super.mustResolve(); } protected StringBuffer print(StringBuffer output) { if (this.findDeclarations) { output.append(this.findReferences ? "FieldCombinedPattern: " //$NON-NLS-1$ : "FieldDeclarationPattern: "); //$NON-NLS-1$ } else { output.append("FieldReferencePattern: "); //$NON-NLS-1$ } if (this.declaringQualification != null) output.append(this.declaringQualification).append('.'); if (this.declaringSimpleName != null) output.append(this.declaringSimpleName).append('.'); else if (this.declaringQualification != null) output.append("*."); //$NON-NLS-1$ if (this.name == null) { output.append("*"); //$NON-NLS-1$ } else { output.append(this.name); } if (this.typeQualification != null) output.append(" --> ").append(this.typeQualification).append('.'); //$NON-NLS-1$ else if (this.typeSimpleName != null) output.append(" --> "); //$NON-NLS-1$ if (this.typeSimpleName != null) output.append(this.typeSimpleName); else if (this.typeQualification != null) output.append("*"); //$NON-NLS-1$ return super.print(output); } }