Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
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.codeassist.select;
 
 /*
  * Selection node build by the parser in any case it was intending to
  * reduce a message send containing the cursor.
  * e.g.
  *
  *	class X {
  *    void foo() {
  *      this.[start]bar[end](1, 2)
  *    }
  *  }
  *
  *	---> class X {
  *         void foo() {
  *           <SelectOnMessageSend:this.bar(1, 2)>
  *         }
  *       }
  *
  */
 
 
 public class SelectionOnMessageSend extends MessageSend {
 
 	/*
 	 * Cannot answer default abstract match, iterate in superinterfaces of declaring class
 	 * for a better match (default abstract match came from scope lookups).
 	 */
 
 		ReferenceBinding[] itsInterfaces = methodBinding.declaringClass.superInterfaces();
 		if (itsInterfaces != .) {
 			ReferenceBinding[] interfacesToVisit = itsInterfaces;
 			int nextPosition = interfacesToVisit.length;
 
 			for (int i = 0; i < nextPositioni++) {
 				ReferenceBinding currentType = interfacesToVisit[i];
 				MethodBinding[] methods = currentType.getMethods(methodBinding.selector);
 				if(methods != null) {
 					for (int k = 0; k < methods.lengthk++) {
 						if(methodBinding.areParametersEqual(methods[k]))
 							return methods[k];
 					}
 				}
 
 				if ((itsInterfaces = currentType.superInterfaces()) != .) {
 					int itsLength = itsInterfaces.length;
 					if (nextPosition + itsLength >= interfacesToVisit.length)
 						System.arraycopy(interfacesToVisit, 0, interfacesToVisit = new ReferenceBinding[nextPosition + itsLength + 5], 0, nextPosition);
 					nextInterface : for (int a = 0; a < itsLengtha++) {
 						ReferenceBinding next = itsInterfaces[a];
 						for (int b = 0; b < nextPositionb++)
 							if (next == interfacesToVisit[b]) continue nextInterface;
 						interfacesToVisit[nextPosition++] = next;
 					}
 				}
 			}
 		}
 		return methodBinding;
 	}
 
 	public StringBuffer printExpression(int indentStringBuffer output) {
 
 		output.append("<SelectOnMessageSend:"); //$NON-NLS-1$
 		if (!this..isImplicitThis()) this..printExpression(0, output).append('.');
 		output.append(this.).append('(');
 		if (this. != null) {
 			for (int i = 0; i < this..lengthi++) {
 				if (i > 0) output.append(", "); //$NON-NLS-1$
 				this.[i].printExpression(0, output);
 			}
 		}
 		return output.append(")>"); //$NON-NLS-1$
 	}
 
 	public TypeBinding resolveType(BlockScope scope) {
 
 		super.resolveType(scope);
 
 		// tolerate some error cases
 		if(this. == null ||
 					!(this..isValidBinding() ||
			throw new SelectionNodeFound();
else {
else {
				throw new SelectionNodeFound(this.);
			}
		}
	}
New to GrepCode? Check out our FAQ X