All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.jdt.internal.compiler.ast.Invocation Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2013, 2014 GK Software AG.
 * 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:
 *     Stephan Herrmann - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.internal.compiler.ast;

import org.eclipse.jdt.internal.compiler.lookup.InferenceContext18;
import org.eclipse.jdt.internal.compiler.lookup.InvocationSite;
import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
import org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding;
import org.eclipse.jdt.internal.compiler.lookup.ParameterizedMethodBinding;
import org.eclipse.jdt.internal.compiler.lookup.Scope;
import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;

/**
 * Abstraction for invocation AST nodes that can trigger 
 * 
    *
  • Invocation Applicability Inferences (18.5.1), and
  • *
  • Invocation Type Inference (18.5.2).
  • *
*/ public interface Invocation extends InvocationSite { Expression[] arguments(); /** * Answer the resolved method binding of this invocation. * If a target type is given, the invocation gets a chance to do repeated method lookup. * @param targetType the target type of this invocation or null if not yet known * @param reportErrors if true then this is the last call, if no valid binding can be answered we should report an error * @param scope if reportErrors is true then this scope can be used for error reporting * */ MethodBinding binding(TypeBinding targetType, boolean reportErrors, Scope scope); /** * Register the given inference context, which produced the given method as its intermediate result. * Later when the same method is selected as the most specific method, the inference context * for this pair (Invocation x MethodBinding) can be looked up using {@link #getExpressionContext()} * to continue the type inference. */ void registerInferenceContext(ParameterizedGenericMethodBinding method, InferenceContext18 infCtx18); /** * Retrieve an inference context for the given method which must have been registered * using {@link #registerInferenceContext(ParameterizedGenericMethodBinding, InferenceContext18)}. * @param method an intermediate resolved candidate for this invocation * return a suspended inference context or null if none was registered for this method. */ InferenceContext18 getInferenceContext(ParameterizedMethodBinding method); /** * Answer true if this invocation has determined its binding using inference. */ boolean usesInference(); /** * Where the AST node may hold references to the results of Invocation Applicability Inference, * this method allows to update those references to the result of Invocation Type Inference. * Note that potentially more than just the method binding is updated. * @param updatedBinding the final method binding after full inference * @param targetType the target type used during Invocation Type Inference * @return true if an update has happened */ boolean updateBindings(MethodBinding updatedBinding, TypeBinding targetType); /** * Answer whether the current invocation has inner expressions that still need updating after inference. */ boolean innersNeedUpdate(); /** * Mark that updating (the need for which is signaled via {@link #innersNeedUpdate()}) has been done. */ void innerUpdateDone(); /** * If this invocation has any poly expressions as arguments, this method answers an inference helper * that mediates during overload resolution, even if no actual inference happens for this invocation. */ InnerInferenceHelper innerInferenceHelper(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy