Search in sources :

Example 1 with CompletionOnMemberAccess

use of org.eclipse.jdt.internal.codeassist.complete.CompletionOnMemberAccess in project lombok by rzwitserloot.

the class ExtensionMethodCompletionProposal method setMethodBinding.

public void setMethodBinding(final MethodBinding method, final ASTNode node) {
    MethodBinding original = method.original();
    TypeBinding[] parameters = Arrays.copyOf(method.parameters, method.parameters.length);
    method.parameters = Arrays.copyOfRange(method.parameters, 1, method.parameters.length);
    TypeBinding[] originalParameters = null;
    if (original != method) {
        originalParameters = Arrays.copyOf(method.original().parameters, method.original().parameters.length);
        method.original().parameters = Arrays.copyOfRange(method.original().parameters, 1, method.original().parameters.length);
    }
    int length = method.parameters == null ? 0 : method.parameters.length;
    char[][] parameterPackageNames = new char[length][];
    char[][] parameterTypeNames = new char[length][];
    for (int i = 0; i < length; i++) {
        TypeBinding type = method.original().parameters[i];
        parameterPackageNames[i] = type.qualifiedPackageName();
        parameterTypeNames[i] = type.qualifiedSourceName();
    }
    char[] completion = CharOperation.concat(method.selector, new char[] { '(', ')' });
    setDeclarationSignature(CompletionEngine.getSignature(method.declaringClass));
    setSignature(CompletionEngine.getSignature(method));
    if (original != method) {
        setOriginalSignature(CompletionEngine.getSignature(original));
    }
    setDeclarationPackageName(method.declaringClass.qualifiedPackageName());
    setDeclarationTypeName(method.declaringClass.qualifiedSourceName());
    setParameterPackageNames(parameterPackageNames);
    setParameterTypeNames(parameterTypeNames);
    setPackageName(method.returnType.qualifiedPackageName());
    setTypeName(method.returnType.qualifiedSourceName());
    setName(method.selector);
    setCompletion(completion);
    setFlags(method.modifiers & (~AccStatic));
    int index = node.sourceEnd + 1;
    if (node instanceof CompletionOnQualifiedNameReference) {
        index -= ((CompletionOnQualifiedNameReference) node).completionIdentifier.length;
    }
    if (node instanceof CompletionOnMemberAccess) {
        index -= ((CompletionOnMemberAccess) node).token.length;
    }
    if (node instanceof CompletionOnSingleNameReference) {
        index -= ((CompletionOnSingleNameReference) node).token.length;
    }
    setReplaceRange(index, index);
    setTokenRange(index, index);
    setRelevance(100);
    method.parameters = parameters;
    if (original != method) {
        method.original().parameters = originalParameters;
    }
}
Also used : CompletionOnMemberAccess(org.eclipse.jdt.internal.codeassist.complete.CompletionOnMemberAccess) TypeBinding(org.eclipse.jdt.internal.compiler.lookup.TypeBinding) MethodBinding(org.eclipse.jdt.internal.compiler.lookup.MethodBinding) CompletionOnSingleNameReference(org.eclipse.jdt.internal.codeassist.complete.CompletionOnSingleNameReference) CompletionOnQualifiedNameReference(org.eclipse.jdt.internal.codeassist.complete.CompletionOnQualifiedNameReference)

Example 2 with CompletionOnMemberAccess

use of org.eclipse.jdt.internal.codeassist.complete.CompletionOnMemberAccess in project lombok by rzwitserloot.

the class PatchExtensionMethodCompletionProposal method getFirstParameterType.

static TypeBinding getFirstParameterType(TypeDeclaration decl, CompletionProposalCollector completionProposalCollector) {
    TypeBinding firstParameterType = null;
    ASTNode node = getAssistNode(completionProposalCollector);
    if (node == null)
        return null;
    if (!(node instanceof CompletionOnQualifiedNameReference) && !(node instanceof CompletionOnSingleNameReference) && !(node instanceof CompletionOnMemberAccess))
        return null;
    // Never offer on 'super.<autocomplete>'.
    if (node instanceof FieldReference && ((FieldReference) node).receiver instanceof SuperReference)
        return null;
    if (node instanceof NameReference) {
        Binding binding = ((NameReference) node).binding;
        /*			if ((node instanceof SingleNameReference) && (((SingleNameReference) node).token.length == 0)) {
				firstParameterType = decl.binding;
			} else */
        if (binding instanceof VariableBinding) {
            firstParameterType = ((VariableBinding) binding).type;
        }
    } else if (node instanceof FieldReference) {
        firstParameterType = ((FieldReference) node).actualReceiverType;
    }
    return firstParameterType;
}
Also used : Binding(org.eclipse.jdt.internal.compiler.lookup.Binding) TypeBinding(org.eclipse.jdt.internal.compiler.lookup.TypeBinding) MethodBinding(org.eclipse.jdt.internal.compiler.lookup.MethodBinding) VariableBinding(org.eclipse.jdt.internal.compiler.lookup.VariableBinding) CompletionOnQualifiedNameReference(org.eclipse.jdt.internal.codeassist.complete.CompletionOnQualifiedNameReference) NameReference(org.eclipse.jdt.internal.compiler.ast.NameReference) CompletionOnSingleNameReference(org.eclipse.jdt.internal.codeassist.complete.CompletionOnSingleNameReference) CompletionOnMemberAccess(org.eclipse.jdt.internal.codeassist.complete.CompletionOnMemberAccess) FieldReference(org.eclipse.jdt.internal.compiler.ast.FieldReference) TypeBinding(org.eclipse.jdt.internal.compiler.lookup.TypeBinding) ASTNode(org.eclipse.jdt.internal.compiler.ast.ASTNode) CompletionOnSingleNameReference(org.eclipse.jdt.internal.codeassist.complete.CompletionOnSingleNameReference) CompletionOnQualifiedNameReference(org.eclipse.jdt.internal.codeassist.complete.CompletionOnQualifiedNameReference) VariableBinding(org.eclipse.jdt.internal.compiler.lookup.VariableBinding) SuperReference(org.eclipse.jdt.internal.compiler.ast.SuperReference)

Aggregations

CompletionOnMemberAccess (org.eclipse.jdt.internal.codeassist.complete.CompletionOnMemberAccess)2 CompletionOnQualifiedNameReference (org.eclipse.jdt.internal.codeassist.complete.CompletionOnQualifiedNameReference)2 CompletionOnSingleNameReference (org.eclipse.jdt.internal.codeassist.complete.CompletionOnSingleNameReference)2 MethodBinding (org.eclipse.jdt.internal.compiler.lookup.MethodBinding)2 TypeBinding (org.eclipse.jdt.internal.compiler.lookup.TypeBinding)2 ASTNode (org.eclipse.jdt.internal.compiler.ast.ASTNode)1 FieldReference (org.eclipse.jdt.internal.compiler.ast.FieldReference)1 NameReference (org.eclipse.jdt.internal.compiler.ast.NameReference)1 SuperReference (org.eclipse.jdt.internal.compiler.ast.SuperReference)1 Binding (org.eclipse.jdt.internal.compiler.lookup.Binding)1 VariableBinding (org.eclipse.jdt.internal.compiler.lookup.VariableBinding)1