| /******************************************************************************* |
| * Copyright (c) 2004, 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; |
| |
| import org.eclipse.jdt.core.CompletionProposal; |
| import org.eclipse.jdt.core.CompletionRequestor; |
| import org.eclipse.jdt.core.Flags; |
| import org.eclipse.jdt.core.Signature; |
| import org.eclipse.jdt.core.compiler.CharOperation; |
| import org.eclipse.jdt.core.compiler.IProblem; |
| |
| /** |
| * This CompletionRequetor wrap the old requestor ICOmpletionRequestor |
| * @since 3.1 |
| * @deprecated |
| */ |
| public class CompletionRequestorWrapper extends CompletionRequestor { |
| private static boolean DECODE_SIGNATURE = false; |
| |
| private org.eclipse.jdt.core.ICompletionRequestor requestor; |
| public CompletionRequestorWrapper(org.eclipse.jdt.core.ICompletionRequestor requestor) { |
| this.requestor = requestor; |
| } |
| |
| public void accept(CompletionProposal proposal) { |
| InternalCompletionProposal internalCompletionProposal = (InternalCompletionProposal) proposal; |
| switch(internalCompletionProposal.getKind()) { |
| case CompletionProposal.KEYWORD: |
| this.requestor.acceptKeyword( |
| internalCompletionProposal.getName(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance()); |
| break; |
| case CompletionProposal.PACKAGE_REF: |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptPackage( |
| internalCompletionProposal.getDeclarationSignature(), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance()); |
| } else { |
| this.requestor.acceptPackage( |
| internalCompletionProposal.getPackageName(), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance()); |
| } |
| break; |
| case CompletionProposal.TYPE_REF: |
| if((internalCompletionProposal.getFlags() & Flags.AccEnum) != 0) { |
| // does not exist for old requestor |
| } else if((internalCompletionProposal.getFlags() & Flags.AccInterface) != 0) { |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptInterface( |
| internalCompletionProposal.getDeclarationSignature(), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getSignature()), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags() & ~Flags.AccInterface, |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance()); |
| } else { |
| this.requestor.acceptInterface( |
| internalCompletionProposal.getPackageName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getPackageName(), |
| internalCompletionProposal.getTypeName(), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags() & ~Flags.AccInterface, |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance()); |
| } |
| } else { |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptClass( |
| internalCompletionProposal.getDeclarationSignature(), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getSignature()), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance()); |
| } else { |
| this.requestor.acceptClass( |
| internalCompletionProposal.getPackageName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getPackageName(), |
| internalCompletionProposal.getTypeName(), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance()); |
| } |
| } |
| break; |
| case CompletionProposal.FIELD_REF: |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptField( |
| Signature.getSignatureQualifier(internalCompletionProposal.getDeclarationSignature()), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getDeclarationSignature()), |
| internalCompletionProposal.getName(), |
| Signature.getSignatureQualifier(internalCompletionProposal.getSignature()), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getSignature()), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } else { |
| this.requestor.acceptField( |
| internalCompletionProposal.getDeclarationPackageName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getDeclarationPackageName(), |
| internalCompletionProposal.getDeclarationTypeName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getDeclarationTypeName(), |
| internalCompletionProposal.getName(), |
| internalCompletionProposal.getPackageName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getPackageName(), |
| internalCompletionProposal.getTypeName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getTypeName(), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } |
| break; |
| case CompletionProposal.METHOD_REF: |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptMethod( |
| Signature.getSignatureQualifier(internalCompletionProposal.getDeclarationSignature()), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getDeclarationSignature()), |
| internalCompletionProposal.getName(), |
| getParameterPackages(internalCompletionProposal.getSignature()), |
| getParameterTypes(internalCompletionProposal.getSignature()), |
| internalCompletionProposal.findParameterNames(null) == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.findParameterNames(null), |
| Signature.getSignatureQualifier(Signature.getReturnType(internalCompletionProposal.getSignature())), |
| Signature.getSignatureSimpleName(Signature.getReturnType(internalCompletionProposal.getSignature())), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } else { |
| this.requestor.acceptMethod( |
| internalCompletionProposal.getDeclarationPackageName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getDeclarationPackageName(), |
| internalCompletionProposal.getDeclarationTypeName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getDeclarationTypeName(), |
| internalCompletionProposal.getName(), |
| internalCompletionProposal.getParameterPackageNames() == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.getParameterPackageNames(), |
| internalCompletionProposal.getParameterTypeNames() == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.getParameterTypeNames(), |
| internalCompletionProposal.findParameterNames(null) == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.findParameterNames(null), |
| internalCompletionProposal.getPackageName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getPackageName(), |
| internalCompletionProposal.getTypeName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getTypeName(), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } |
| break; |
| case CompletionProposal.METHOD_DECLARATION: |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptMethodDeclaration( |
| Signature.getSignatureQualifier(internalCompletionProposal.getDeclarationSignature()), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getDeclarationSignature()), |
| internalCompletionProposal.getName(), |
| getParameterPackages(internalCompletionProposal.getSignature()), |
| getParameterTypes(internalCompletionProposal.getSignature()), |
| internalCompletionProposal.findParameterNames(null) == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.findParameterNames(null), |
| Signature.getSignatureQualifier(Signature.getReturnType(internalCompletionProposal.getSignature())), |
| Signature.getSignatureSimpleName(Signature.getReturnType(internalCompletionProposal.getSignature())), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } else { |
| this.requestor.acceptMethodDeclaration( |
| internalCompletionProposal.getDeclarationPackageName(), |
| internalCompletionProposal.getDeclarationTypeName(), |
| internalCompletionProposal.getName(), |
| internalCompletionProposal.getParameterPackageNames() == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.getParameterPackageNames(), |
| internalCompletionProposal.getParameterTypeNames() == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.getParameterTypeNames(), |
| internalCompletionProposal.findParameterNames(null) == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.findParameterNames(null), |
| internalCompletionProposal.getPackageName(), |
| internalCompletionProposal.getTypeName(), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } |
| break; |
| case CompletionProposal.ANONYMOUS_CLASS_DECLARATION: |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptAnonymousType( |
| Signature.getSignatureQualifier(internalCompletionProposal.getDeclarationSignature()), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getDeclarationSignature()), |
| getParameterPackages(internalCompletionProposal.getSignature()), |
| getParameterTypes(internalCompletionProposal.getSignature()), |
| internalCompletionProposal.findParameterNames(null) == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.findParameterNames(null), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } else { |
| this.requestor.acceptAnonymousType( |
| internalCompletionProposal.getDeclarationPackageName(), |
| internalCompletionProposal.getDeclarationTypeName(), |
| internalCompletionProposal.getParameterPackageNames() == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.getParameterPackageNames(), |
| internalCompletionProposal.getParameterTypeNames() == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.getParameterTypeNames(), |
| internalCompletionProposal.findParameterNames(null) == null ? CharOperation.NO_CHAR_CHAR : internalCompletionProposal.findParameterNames(null), |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } |
| break; |
| case CompletionProposal.LABEL_REF : |
| this.requestor.acceptLabel( |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| break; |
| case CompletionProposal.LOCAL_VARIABLE_REF: |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptLocalVariable( |
| internalCompletionProposal.getCompletion(), |
| Signature.getSignatureQualifier(internalCompletionProposal.getSignature()), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getSignature()), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } else { |
| this.requestor.acceptLocalVariable( |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getPackageName() == null ? CharOperation.NO_CHAR : internalCompletionProposal.getPackageName(), |
| internalCompletionProposal.getTypeName(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } |
| break; |
| case CompletionProposal.VARIABLE_DECLARATION: |
| if(DECODE_SIGNATURE) { |
| this.requestor.acceptLocalVariable( |
| internalCompletionProposal.getCompletion(), |
| Signature.getSignatureQualifier(internalCompletionProposal.getSignature()), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getSignature()), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } else { |
| this.requestor.acceptLocalVariable( |
| internalCompletionProposal.getCompletion(), |
| internalCompletionProposal.getPackageName(), |
| internalCompletionProposal.getTypeName(), |
| internalCompletionProposal.getFlags(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } |
| break; |
| case CompletionProposal.POTENTIAL_METHOD_DECLARATION: |
| if(this.requestor instanceof IExtendedCompletionRequestor) { |
| IExtendedCompletionRequestor r = (IExtendedCompletionRequestor) this.requestor; |
| if(DECODE_SIGNATURE) { |
| r.acceptPotentialMethodDeclaration( |
| Signature.getSignatureQualifier(internalCompletionProposal.getDeclarationSignature()), |
| Signature.getSignatureSimpleName(internalCompletionProposal.getDeclarationSignature()), |
| internalCompletionProposal.getName(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } else { |
| r.acceptPotentialMethodDeclaration( |
| internalCompletionProposal.getDeclarationPackageName(), |
| internalCompletionProposal.getDeclarationTypeName(), |
| internalCompletionProposal.getName(), |
| internalCompletionProposal.getReplaceStart(), |
| internalCompletionProposal.getReplaceEnd(), |
| internalCompletionProposal.getRelevance() |
| ); |
| } |
| } |
| break; |
| |
| } |
| } |
| |
| public void completionFailure(IProblem problem) { |
| this.requestor.acceptError(problem); |
| } |
| |
| private char[][] getParameterPackages(char[] methodSignature) { |
| char[][] parameterQualifiedTypes = Signature.getParameterTypes(methodSignature); |
| int length = parameterQualifiedTypes == null ? 0 : parameterQualifiedTypes.length; |
| char[][] parameterPackages = new char[length][]; |
| for(int i = 0; i < length; i++) { |
| parameterPackages[i] = Signature.getSignatureQualifier(parameterQualifiedTypes[i]); |
| } |
| |
| return parameterPackages; |
| } |
| |
| private char[][] getParameterTypes(char[] methodSignature) { |
| char[][] parameterQualifiedTypes = Signature.getParameterTypes(methodSignature); |
| int length = parameterQualifiedTypes == null ? 0 : parameterQualifiedTypes.length; |
| char[][] parameterPackages = new char[length][]; |
| for(int i = 0; i < length; i++) { |
| parameterPackages[i] = Signature.getSignatureSimpleName(parameterQualifiedTypes[i]); |
| } |
| |
| return parameterPackages; |
| } |
| } |