org.eclipse.jdt.internal.compiler.lookup.InvocationSite Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ecj Show documentation
Show all versions of ecj Show documentation
Eclipse Compiler for Java(TM)
/*******************************************************************************
* 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 */ }
}
}