Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2000, 2012 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;
 
 
 
 public class MethodPattern extends JavaSearchPattern {
 
 protected boolean findDeclarations = true;
 protected boolean findReferences = true;
 
 public char[] selector;
 
 public char[] declaringQualification;
 public char[] declaringSimpleName;
 public char[] declaringPackageName//set only when focus is not null
 
 public char[] returnQualification;
 public char[] returnSimpleName;
 
 public char[][] parameterQualifications;
 public char[][] parameterSimpleNames;
 public int parameterCount;
 public boolean varargs = false;
 
 // extra reference info
 protected IType declaringType;
 
 // Signatures and arguments for generic search
 char[][][][] parametersTypeArguments;
 boolean methodParameters = false;
 char[][] methodArguments;
 
 protected static char[][] REF_CATEGORIES = {  };
 protected static char[][] REF_AND_DECL_CATEGORIES = {  };
 protected static char[][] DECL_CATEGORIES = {  };
 
 public final static int FINE_GRAIN_MASK =
Method entries are encoded as selector '/' Arity: e.g. 'foo/0'
 
 public static char[] createIndexKey(char[] selectorint argCount) {
 	char[] countChars = argCount < 10
 		? [argCount]
 		: ("/" + String.valueOf(argCount)).toCharArray(); //$NON-NLS-1$
 	return CharOperation.concat(selectorcountChars);
 }
 
 MethodPattern(int matchRule) {
 	super(matchRule);
 }
 public MethodPattern(
 	char[] selector,
 	char[] declaringQualification,
 	char[] declaringSimpleName,
 	char[] returnQualification,
 	char[] returnSimpleName,
 	char[][] parameterQualifications,
 	char[][] parameterSimpleNames,
 	IType declaringType,
 	int limitTo,
 	int matchRule) {
 
 	this(matchRule);
 
 	this. = limitTo & ;
     if (this. == 0) {
 		switch (limitTo & 0xF) {
 				this. = false;
 				break;
 				this. = false;
 				break;
 				break;
		}
    } else {
		this. = false;
    }
	this. = (this. || this.) ? selector : CharOperation.toLowerCase(selector);
	this. = this. ? declaringQualification : CharOperation.toLowerCase(declaringQualification);
	this. = this. ? declaringSimpleName : CharOperation.toLowerCase(declaringSimpleName);
	this. = this. ? returnQualification : CharOperation.toLowerCase(returnQualification);
	this. = this. ? returnSimpleName : CharOperation.toLowerCase(returnSimpleName);
	if (parameterSimpleNames != null) {
		this. = parameterSimpleNames.length;
		this. = new char[this.][];
		this. = new char[this.][];
		for (int i = 0; i < this.i++) {
			this.[i] = this. ? parameterQualifications[i] : CharOperation.toLowerCase(parameterQualifications[i]);
			this.[i] = this. ? parameterSimpleNames[i] : CharOperation.toLowerCase(parameterSimpleNames[i]);
		}
else {
		this. = -1;
	}
	this. = declaringType;
	if (this. !=  null) {
	}
/*
 * Instanciate a method pattern with signatures for generics search
 */
	char[] selector,
	char[] declaringQualification,
	char[] declaringSimpleName,
	char[] returnQualification,
	char[] returnSimpleName,
	String returnSignature,
	char[][] parameterQualifications,
	char[][] parameterSimpleNames,
	String[] parameterSignatures,
	IMethod method,
	int limitTo,
	int matchRule) {
	this(selector,
		declaringQualification,
		declaringSimpleName,
		returnQualification,
		returnSimpleName,
		parameterQualifications,
		parameterSimpleNames,
		limitTo,
		matchRule);
	// Set flags
	try {
		this. = (method.getFlags() & .) != 0;
catch (JavaModelException e) {
		// do nothing
	}
	// Get unique key for parameterized constructors
	String genericDeclaringTypeSignature = null;
	if (method.isResolved()) {
		String key = method.getKey();
		BindingKey bindingKey = new BindingKey(key);
		if (bindingKey.isParameterizedType()) {
			genericDeclaringTypeSignature = Util.getDeclaringTypeSignature(key);
			// Store type signature and arguments for declaring type
			if (genericDeclaringTypeSignature != null) {
					this. = Util.splitTypeLevelsSignature(genericDeclaringTypeSignature);
			}
		}
else {
		this. = true;
	}
	// Store type signatures and arguments for return type
	if (returnSignature != null) {
		this. = Util.splitTypeLevelsSignature(returnSignature);
	}
	// Store type signatures and arguments for method parameters type
	if (parameterSignatures != null) {
		int length = parameterSignatures.length;
		if (length > 0) {
			this. = new char[length][][];
			this. = new char[length][][][];
			for (int i=0; i<lengthi++) {
				this.[i] = Util.splitTypeLevelsSignature(parameterSignatures[i]);
			}
		}
	}
	// Store type signatures and arguments for method
	if (hasMethodArguments())  this. = true;
/*
 * Instanciate a method pattern with signatures for generics search
 */
	char[] selector,
	char[] declaringQualification,
	char[] declaringSimpleName,
	String declaringSignature,
	char[] returnQualification,
	char[] returnSimpleName,
	String returnSignature,
	char[][] parameterQualifications,
	char[][] parameterSimpleNames,
	String[] parameterSignatures,
	char[][] arguments,
	int limitTo,
	int matchRule) {
	this(selector,
		declaringQualification,
		declaringSimpleName,
		returnQualification,
		returnSimpleName,
		parameterQualifications,
		parameterSimpleNames,
		null,
		limitTo,
		matchRule);
	// Store type signature and arguments for declaring type
	if (declaringSignature != null) {
		this. = Util.splitTypeLevelsSignature(declaringSignature);
	}
	// Store type signatures and arguments for return type
	if (returnSignature != null) {
		this. = Util.splitTypeLevelsSignature(returnSignature);
	}
	// Store type signatures and arguments for method parameters type
	if (parameterSignatures != null) {
		int length = parameterSignatures.length;
		if (length > 0) {
			this. = new char[length][][];
			this. = new char[length][][][];
			for (int i=0; i<lengthi++) {
				this.[i] = Util.splitTypeLevelsSignature(parameterSignatures[i]);
			}
		}
	}
	// Store type signatures and arguments for method
	this. = arguments;
	if (hasMethodArguments())  this. = true;
public void decodeIndexKey(char[] key) {
	int last = key.length - 1;
	this. = 0;
	this. = null;
	int power = 1;
	for (int i=lasti>=0; i--) {
		if (key[i] == ) {
			System.arraycopy(key, 0, this. = new char[i], 0, i);
			break;
		}
		if (i == last) {
			this. = key[i] - '0';
else {
			power *= 10;
			this. += power * (key[i] - '0');
		}
	}
public char[][] getIndexCategories() {
	if (this.)
boolean hasMethodArguments() {
	return this. != null && this..length > 0;
	return this.;
public boolean isPolymorphicSearch() {
	return this.;
public boolean matchesDecodedKey(SearchPattern decodedPattern) {
	MethodPattern pattern = (MethodPatterndecodedPattern;
	return (this. == pattern.parameterCount || this. == -1 || this.)
		&& matchesName(this.pattern.selector);
Returns whether a method declaration or message send must be resolved to find out if this method pattern matches it.
protected boolean mustResolve() {
	// declaring type
	// If declaring type is specified - even with simple name - always resolves
	if (this. != null || this. != nullreturn true;
	// return type
	// If return type is specified - even with simple name - always resolves
	if (this. != null || this. != nullreturn true;
	// parameter types
	if (this. != null)
		for (int i = 0, max = this..lengthi < maxi++)
			if (this.[i] != nullreturn true;
	return false;
public EntryResult[] queryIn(Index indexthrows IOException {
	char[] key = this.// can be null
	int matchRule = getMatchRule();
	switch(getMatchMode()) {
			if (this. != null && this. >= 0 && !this.)
			else { // do a prefix query with the selector
				matchRule &= ~;
				matchRule |= ;
			}
			break;
			// do a prefix query with the selector
			break;
			if (this. >= 0 && !this.)
				key = createIndexKey(this. == null ?  : this.this.);
			else if (this. != null && this.[this..length - 1] != '*')
				key = CharOperation.concat(this.);
			// else do a pattern query with just the selector
			break;
			// TODO (frederic) implement regular expression match
			break;
			// do a prefix query with the selector
			break;
	}
	return index.query(getIndexCategories(), keymatchRule); // match rule is irrelevant when the key is null
protected StringBuffer print(StringBuffer output) {
	if (this.) {
"MethodCombinedPattern: " //$NON-NLS-1$
"MethodDeclarationPattern: "); //$NON-NLS-1$
else {
		output.append("MethodReferencePattern: "); //$NON-NLS-1$
	}
	if (this. != null)
	if (this. != null)
	else if (this. != null)
		output.append("*."); //$NON-NLS-1$
	if (this. != null)
		output.append(this.);
	else
		output.append("*"); //$NON-NLS-1$
	output.append('(');
	if (this. == null) {
		output.append("..."); //$NON-NLS-1$
else {
		for (int i = 0, max = this..lengthi < maxi++) {
			if (i > 0) output.append(", "); //$NON-NLS-1$
			if (this.[i] != nulloutput.append(this.[i]).append('.');
			if (this.[i] == nulloutput.append('*'); else output.append(this.[i]);
		}
	}
	output.append(')');
	if (this. != null)
		output.append(" --> ").append(this.).append('.'); //$NON-NLS-1$
	else if (this. != null)
		output.append(" --> "); //$NON-NLS-1$
	if (this. != null)
	else if (this. != null)
		output.append("*"); //$NON-NLS-1$
	return super.print(output);
New to GrepCode? Check out our FAQ X