blob: b37cc5a28fab07e8197399fbc1b738b6fcf2feb9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2020 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Stephan Herrmann - Contribution for
* bug 384380 - False positive on a "Potential null pointer access" after a continue
* Bug 400874 - [1.8][compiler] Inference infrastructure should evolve to meet JLS8 18.x (Part G of JSR335 spec)
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.lookup;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.ExpressionContext;
public interface InvocationSite {
TypeBinding[] genericTypeArguments();
boolean isSuperAccess();
boolean isQualifiedSuper();
boolean isTypeAccess();
// in case the receiver type does not match the actual receiver type
// e.g. pkg.Type.C (receiver type of C is type of source context,
// but actual receiver type is pkg.Type)
// e.g2. in presence of implicit access to enclosing type
void setActualReceiverType(ReferenceBinding receiverType);
void setDepth(int depth);
void setFieldIndex(int depth);
int sourceEnd();
int sourceStart();
default int nameSourceStart() { return sourceStart(); }
default int nameSourceEnd() { return sourceEnd(); }
TypeBinding invocationTargetType();
boolean receiverIsImplicitThis();
boolean checkingPotentialCompatibility();
void acceptPotentiallyCompatibleMethods(MethodBinding [] methods);
public default LocalVariableBinding[] getPatternVariablesWhenTrue() {
return null;
}
/** When inference for this invocationSite starts, get a fresh inference context, initialized from this site. */
InferenceContext18 freshInferenceContext(Scope scope);
ExpressionContext getExpressionContext();
static class EmptyWithAstNode implements InvocationSite {
ASTNode node;
public EmptyWithAstNode(ASTNode node) {
this.node = node;
}
@Override
public TypeBinding[] genericTypeArguments() { return null;}
@Override
public boolean isSuperAccess() {return false;}
@Override
public boolean isTypeAccess() {return false;}
@Override
public void setActualReceiverType(ReferenceBinding receiverType) {/* empty */}
@Override
public void setDepth(int depth) {/* empty */ }
@Override
public void setFieldIndex(int depth) {/* empty */ }
@Override
public int sourceEnd() {return this.node.sourceEnd; }
@Override
public int sourceStart() {return this.node.sourceStart; }
@Override
public TypeBinding invocationTargetType() { return null; }
@Override
public boolean receiverIsImplicitThis() { return false; }
@Override
public InferenceContext18 freshInferenceContext(Scope scope) { return null; }
@Override
public ExpressionContext getExpressionContext() { return ExpressionContext.VANILLA_CONTEXT; }
@Override
public boolean isQualifiedSuper() { return false; }
@Override
public boolean checkingPotentialCompatibility() { return false; }
@Override
public void acceptPotentiallyCompatibleMethods(MethodBinding[] methods) { /* ignore */ }
}
}