| /******************************************************************************* |
| * 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.wst.jsdt.core.tests.model; |
| |
| import java.util.Vector; |
| |
| import org.eclipse.wst.jsdt.core.CompletionProposal; |
| import org.eclipse.wst.jsdt.core.CompletionRequestor; |
| import org.eclipse.wst.jsdt.core.Signature; |
| |
| public class CompletionTestsRequestor extends CompletionRequestor { |
| private Vector fElements = new Vector(); |
| private Vector fCompletions = new Vector(); |
| private Vector fRelevances = new Vector(); |
| private Vector fCompletionStart = new Vector(); |
| private Vector fCompletionEnd = new Vector(); |
| |
| public boolean fDebug = false; |
| |
| private void acceptCommon(CompletionProposal proposal) { |
| fCompletions.addElement(new String(proposal.getCompletion())); |
| fRelevances.addElement(String.valueOf(proposal.getRelevance())); |
| fCompletionStart.addElement(String.valueOf(proposal.getReplaceStart())); |
| fCompletionEnd.addElement(String.valueOf(proposal.getReplaceEnd())); |
| } |
| public void accept(CompletionProposal proposal) { |
| char[] typeName = null; |
| switch(proposal.getKind()) { |
| case CompletionProposal.ANONYMOUS_CLASS_DECLARATION : |
| typeName = Signature.getSignatureSimpleName(proposal.getDeclarationSignature()); |
| fElements.addElement(new String(typeName)); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("anonymous type " + new String(typeName)); |
| break; |
| |
| case CompletionProposal.TYPE_REF : |
| typeName = Signature.getSignatureSimpleName(proposal.getSignature()); |
| fElements.addElement(new String(typeName)); |
| this.acceptCommon(proposal); |
| if (fDebug) { |
| System.out.println("Class " + new String(typeName)); |
| } |
| break; |
| |
| case CompletionProposal.FIELD_REF : |
| fElements.addElement(new String(proposal.getName())); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("Field " + new String(proposal.getName())); |
| break; |
| |
| case CompletionProposal.KEYWORD: |
| fElements.addElement(new String(proposal.getName())); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("Keyword " + new String(proposal.getName())); |
| break; |
| |
| case CompletionProposal.LABEL_REF: |
| fElements.addElement(new String(proposal.getName())); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("Label " + new String(proposal.getName())); |
| break; |
| |
| case CompletionProposal.LOCAL_VARIABLE_REF: |
| fElements.addElement(new String(proposal.getName())); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("Local variable " + new String(proposal.getName())); |
| break; |
| |
| case CompletionProposal.METHOD_REF: |
| fElements.addElement(new String(proposal.getName())); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("method " + new String(proposal.getName())); |
| break; |
| |
| case CompletionProposal.METHOD_DECLARATION: |
| fElements.addElement(new String(proposal.getName())); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("method declaration " + new String(proposal.getName())); |
| break; |
| |
| case CompletionProposal.PACKAGE_REF: |
| fElements.addElement(new String(proposal.getDeclarationSignature())); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("package " + new String(proposal.getDeclarationSignature())); |
| break; |
| |
| case CompletionProposal.VARIABLE_DECLARATION: |
| fElements.addElement(new String(proposal.getName())); |
| this.acceptCommon(proposal); |
| if (fDebug) |
| System.out.println("variable name " + new String(proposal.getName())); |
| break; |
| } |
| |
| } |
| |
| public String getResults() { |
| return getResults(true, false); |
| } |
| |
| public String getResultsWithPosition(){ |
| return getResults(true, true); |
| } |
| |
| public String getResults(boolean relevance, boolean position) { |
| StringBuffer result = new StringBuffer(); |
| int size = fElements.size(); |
| |
| if (size == 1) { |
| result.append(getResult(0, relevance, position)); |
| } else if (size > 1) { |
| String[] sortedBucket = new String[size]; |
| for (int i = 0; i < size; i++) { |
| sortedBucket[i] = getResult(i, relevance, position); |
| } |
| quickSort(sortedBucket, 0, size - 1); |
| for (int j = 0; j < sortedBucket.length; j++) { |
| if (result.length() > 0) result.append("\n"); |
| result.append(sortedBucket[j]); |
| } |
| } |
| |
| return result.toString(); |
| } |
| |
| private String getResult(int i, boolean relevance, boolean position) { |
| if(i < 0 || i >= fElements.size()) |
| return ""; |
| |
| StringBuffer buffer = new StringBuffer(); |
| buffer.append("element:"); |
| buffer.append(fElements.elementAt(i)); |
| buffer.append(" completion:"); |
| buffer.append(fCompletions.elementAt(i)); |
| if(position) { |
| buffer.append(" position:["); |
| buffer.append(fCompletionStart.elementAt(i)); |
| buffer.append(","); |
| buffer.append(fCompletionEnd.elementAt(i)); |
| buffer.append("]"); |
| } |
| if(relevance) { |
| buffer.append(" relevance:"); |
| buffer.append(fRelevances.elementAt(i)); |
| } |
| return buffer.toString(); |
| } |
| |
| protected String[] quickSort(String[] collection, int left, int right) { |
| int original_left = left; |
| int original_right = right; |
| String mid = collection[ (left + right) / 2]; |
| do { |
| while (mid.compareTo(collection[left]) > 0) |
| // s[left] >= mid |
| left++; |
| while (mid.compareTo(collection[right]) < 0) |
| // s[right] <= mid |
| right--; |
| if (left <= right) { |
| String tmp = collection[left]; |
| collection[left] = collection[right]; |
| collection[right] = tmp; |
| left++; |
| right--; |
| } |
| } while (left <= right); |
| if (original_left < right) |
| collection = quickSort(collection, original_left, right); |
| if (left < original_right) |
| collection = quickSort(collection, left, original_right); |
| return collection; |
| } |
| public String toString() { |
| return getResults(); |
| } |
| } |