下面列出了怎么用org.eclipse.jdt.core.dom.SuperMethodReference的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public boolean visit(Name name) {
StructuralPropertyDescriptor locationInParent= name.getLocationInParent();
if (locationInParent == ExpressionMethodReference.NAME_PROPERTY
|| locationInParent == TypeMethodReference.NAME_PROPERTY
|| locationInParent == SuperMethodReference.NAME_PROPERTY) {
return false;
}
SimpleName leftmost= getLeftmost(name);
IBinding leftmostBinding= leftmost.resolveBinding();
if (leftmostBinding instanceof IVariableBinding || leftmostBinding instanceof IMethodBinding || leftmostBinding instanceof ITypeBinding) {
if (shouldUnqualify(leftmost))
unqualifyMemberName(leftmost);
else
qualifyUnqualifiedMemberNameIfNecessary(leftmost);
}
if (leftmostBinding instanceof ITypeBinding) {
String addedImport= fNewLocationCuRewrite.getImportRewrite().addImport((ITypeBinding)leftmostBinding, fNewLocationContext);
fNewLocationCuRewrite.getImportRemover().registerAddedImport(addedImport);
}
return false;
}
/**
* Converts method reference expressions of the form:
*
* <p>
*
* <pre>
* super::m into (par1, ..., parN) -> super.m(par1, ..., parN)
* </pre>
*/
private Expression convert(SuperMethodReference expression) {
MethodDescriptor methodDescriptor =
JdtUtils.createMethodDescriptor(expression.resolveMethodBinding());
return AbstractCompilationUnitBuilder.createForwardingFunctionExpression(
getSourcePosition(expression),
JdtUtils.createDeclaredTypeDescriptor(expression.resolveTypeBinding()),
JdtUtils.createMethodDescriptor(
expression.resolveTypeBinding().getFunctionalInterfaceMethod()),
resolveImplicitOuterClassReference(methodDescriptor.getEnclosingTypeDescriptor()),
methodDescriptor,
true);
}
private SuperMethodRef visit(SuperMethodReference node) {
int startLine = _cunit.getLineNumber(node.getStartPosition());
int endLine = _cunit.getLineNumber(node.getStartPosition() + node.getLength());
SuperMethodRef superMethodRef = new SuperMethodRef(startLine, endLine, node);
return superMethodRef;
}
private static SimpleName getMethodInvocationName(MethodReference methodReference) {
SimpleName name = null;
if (methodReference instanceof ExpressionMethodReference) {
name = ((ExpressionMethodReference) methodReference).getName();
} else if (methodReference instanceof TypeMethodReference) {
name = ((TypeMethodReference) methodReference).getName();
} else if (methodReference instanceof SuperMethodReference) {
name = ((SuperMethodReference) methodReference).getName();
}
return name;
}
private Expression convert(org.eclipse.jdt.core.dom.Expression expression) {
switch (expression.getNodeType()) {
case ASTNode.ARRAY_ACCESS:
return convert((org.eclipse.jdt.core.dom.ArrayAccess) expression);
case ASTNode.ARRAY_CREATION:
return convert((org.eclipse.jdt.core.dom.ArrayCreation) expression);
case ASTNode.ARRAY_INITIALIZER:
return convert((org.eclipse.jdt.core.dom.ArrayInitializer) expression);
case ASTNode.ASSIGNMENT:
return convert((org.eclipse.jdt.core.dom.Assignment) expression);
case ASTNode.BOOLEAN_LITERAL:
return convert((org.eclipse.jdt.core.dom.BooleanLiteral) expression);
case ASTNode.CAST_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.CastExpression) expression);
case ASTNode.CHARACTER_LITERAL:
return convert((org.eclipse.jdt.core.dom.CharacterLiteral) expression);
case ASTNode.CLASS_INSTANCE_CREATION:
return convert((org.eclipse.jdt.core.dom.ClassInstanceCreation) expression);
case ASTNode.CONDITIONAL_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.ConditionalExpression) expression);
case ASTNode.EXPRESSION_METHOD_REFERENCE:
return convert((org.eclipse.jdt.core.dom.ExpressionMethodReference) expression);
case ASTNode.CREATION_REFERENCE:
return convert((org.eclipse.jdt.core.dom.CreationReference) expression);
case ASTNode.TYPE_METHOD_REFERENCE:
return convert((org.eclipse.jdt.core.dom.TypeMethodReference) expression);
case ASTNode.SUPER_METHOD_REFERENCE:
return convert((org.eclipse.jdt.core.dom.SuperMethodReference) expression);
case ASTNode.FIELD_ACCESS:
return convert((org.eclipse.jdt.core.dom.FieldAccess) expression);
case ASTNode.INFIX_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.InfixExpression) expression);
case ASTNode.INSTANCEOF_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.InstanceofExpression) expression);
case ASTNode.LAMBDA_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.LambdaExpression) expression);
case ASTNode.METHOD_INVOCATION:
return convert((org.eclipse.jdt.core.dom.MethodInvocation) expression);
case ASTNode.NULL_LITERAL:
return NullLiteral.get();
case ASTNode.NUMBER_LITERAL:
return convert((org.eclipse.jdt.core.dom.NumberLiteral) expression);
case ASTNode.PARENTHESIZED_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.ParenthesizedExpression) expression);
case ASTNode.POSTFIX_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.PostfixExpression) expression);
case ASTNode.PREFIX_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.PrefixExpression) expression);
case ASTNode.QUALIFIED_NAME:
return convert((org.eclipse.jdt.core.dom.QualifiedName) expression);
case ASTNode.SIMPLE_NAME:
return convert((org.eclipse.jdt.core.dom.SimpleName) expression);
case ASTNode.STRING_LITERAL:
return convert((org.eclipse.jdt.core.dom.StringLiteral) expression);
case ASTNode.SUPER_FIELD_ACCESS:
return convert((org.eclipse.jdt.core.dom.SuperFieldAccess) expression);
case ASTNode.SUPER_METHOD_INVOCATION:
return convert((org.eclipse.jdt.core.dom.SuperMethodInvocation) expression);
case ASTNode.THIS_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.ThisExpression) expression);
case ASTNode.TYPE_LITERAL:
return convert((org.eclipse.jdt.core.dom.TypeLiteral) expression);
case ASTNode.VARIABLE_DECLARATION_EXPRESSION:
return convert((org.eclipse.jdt.core.dom.VariableDeclarationExpression) expression);
default:
throw internalCompilerError(
"Unexpected type for Expression: %s", expression.getClass().getName());
}
}
@Override
public boolean visit(SuperMethodReference node) {
return handleMethodReference(node);
}
@Override
public void endVisit(SuperMethodReference node) {
endVisitNode(node);
}
@Override
public boolean visit(SuperMethodReference node) {
return visitNode(node);
}
@Override
public boolean visit(SuperMethodReference node) {
doVisitNode(node.getQualifier());
doVisitChildren(node.typeArguments());
return false;
}