private static List<Type> getParameterTypes(MethodSymbol constructorSymbol) { return constructorSymbol.type.getParameterTypes(); } }
static MatchState create(Type ownerType, MethodSymbol methodSymbol) { return new AutoValue_MatchState( ownerType, methodSymbol, ImmutableList.copyOf(methodSymbol.type.getParameterTypes())); } }
@Nullable private Type visitMethodInvocationOrNewClass( List<? extends ExpressionTree> arguments, MethodSymbol sym, Type type) { int idx = arguments.indexOf(current); if (idx == -1) { return null; } if (type.getParameterTypes().size() <= idx) { if (!sym.isVarArgs()) { if ((sym.flags() & Flags.HYPOTHETICAL) != 0) { // HYPOTHETICAL is also used for signature-polymorphic methods return null; } throw new IllegalStateException( String.format( "saw %d formal parameters and %d actual parameters on non-varargs method %s\n", type.getParameterTypes().size(), arguments.size(), sym)); } idx = type.getParameterTypes().size() - 1; } Type argType = type.getParameterTypes().get(idx); if (sym.isVarArgs() && idx == type.getParameterTypes().size() - 1) { argType = state.getTypes().elemtype(argType); } return argType; }
private static String functionalInterfaceSignature(VisitorState state, Type type) { Types types = state.getTypes(); if (!maybeFunctionalInterface(type, types, state)) { return Signatures.descriptor(type, types); } Type descriptorType = types.findDescriptorType(type); List<Type> fiparams = descriptorType.getParameterTypes(); // Implicitly typed block-statement-bodied lambdas are potentially compatible with // void-returning and value-returning functional interface types, so we don't consider return // types in general. The except is nullary functional interfaces, since the lambda parameters // will never be implicitly typed. String result = fiparams.isEmpty() ? Signatures.descriptor(descriptorType.getReturnType(), types) : "_"; return String.format( "(%s)->%s", fiparams.stream().map(t -> Signatures.descriptor(t, types)).collect(joining(",")), result); }
static Type getTargetType(VisitorState state) { Tree parent = state.getPath().getParentPath().getLeaf(); Type type; if (parent instanceof VariableTree || parent instanceof AssignmentTree) { type = ASTHelpers.getType(parent); } else if (parent instanceof ReturnTree || parent instanceof LambdaExpressionTree) { type = getMethodOrLambdaReturnType(state); } else if (parent instanceof MethodInvocationTree) { MethodInvocationTree tree = (MethodInvocationTree) parent; int idx = tree.getArguments().indexOf(state.getPath().getLeaf()); if (idx == -1) { return null; } Type methodType = ASTHelpers.getType(tree.getMethodSelect()); if (idx >= methodType.getParameterTypes().size()) { return null; } return methodType.getParameterTypes().get(idx); } else { return null; } Tree tree = state.getPath().getLeaf(); if (tree instanceof MemberReferenceTree) { type = state.getTypes().findDescriptorType(ASTHelpers.getType(tree)).getReturnType(); } return type; }
/** * Returns the lower bounds of the formals of a method. */ public List<Type> lowerBoundArgtypes(Type t) { return map(t.getParameterTypes(), lowerBoundMapping); } private final Mapping lowerBoundMapping = new Mapping("lowerBound") {
@Override public Boolean visitMethodType(MethodType t, Type s) { return s.tag == METHOD && containsTypeEquivalent(t.argtypes, s.getParameterTypes()); }
public void visitBinary(JCBinary tree) { tree.lhs = translate(tree.lhs, tree.operator.type.getParameterTypes().head); tree.rhs = translate(tree.rhs, tree.operator.type.getParameterTypes().tail.head); result = tree; }
@Override public Boolean visitMethodType(MethodType t, Type s) { return s.tag == METHOD && containsTypeEquivalent(t.argtypes, s.getParameterTypes()); }
static MatchState create(Type ownerType, MethodSymbol methodSymbol) { return new AutoValue_MatchState( ownerType, methodSymbol, ImmutableList.copyOf(methodSymbol.type.getParameterTypes())); } }
@Override public Boolean visitMethodType(MethodType t, Type s) { return s.hasTag(METHOD) && containsTypeEquivalent(t.argtypes, s.getParameterTypes()); }
public void visitAssignop(JCAssignOp tree) { tree.lhs = translate(tree.lhs, null); tree.rhs = translate(tree.rhs, tree.operator.type.getParameterTypes().tail.head); tree.type = erasure(tree.type); result = tree; }
private MethodType typeToMethodType(Type mt) { Type type = types.erasure(mt); return new MethodType(type.getParameterTypes(), type.getReturnType(), type.getThrownTypes(), syms.methodClass); }
/** Emit an invokevirtual instruction. */ public void emitInvokevirtual(int meth, Type mtype) { int argsize = width(mtype.getParameterTypes()); emitop(invokevirtual); if (!alive) return; emit2(meth); state.pop(argsize + 1); state.push(mtype.getReturnType()); }
/** Emit an invokedynamic instruction. */ public void emitInvokedynamic(int desc, Type mtype) { int argsize = width(mtype.getParameterTypes()); emitop(invokedynamic); if (!alive) return; emit2(desc); emit2(0); state.pop(argsize); state.push(mtype.getReturnType()); }
/** Emit an invokeinterface instruction. */ public void emitInvokeinterface(int meth, Type mtype) { int argsize = width(mtype.getParameterTypes()); emitop(invokeinterface); if (!alive) return; emit2(meth); emit1(argsize + 1); emit1(0); state.pop(argsize + 1); state.push(mtype.getReturnType()); }
public void visitNewClass(JCNewClass tree) { if (tree.encl != null) tree.encl = translate(tree.encl, erasure(tree.encl.type)); tree.clazz = translate(tree.clazz, null); if (tree.varargsElement != null) tree.varargsElement = types.erasure(tree.varargsElement); tree.args = translateArgs( tree.args, tree.constructor.erasure(types).getParameterTypes(), tree.varargsElement); tree.def = translate(tree.def, null); tree.type = erasure(tree.type); result = tree; }
/** @see com.sun.tools.javadoc.ClassDocImpl */ private boolean hasParameterTypes(MethodSymbol method, List<Type> paramTypes) { if (paramTypes == null) return true; if (method.params().size() != paramTypes.size()) return false; List<Type> methodParamTypes = types.erasureRecursive(method.asType()).getParameterTypes(); return (Type.isErroneous(paramTypes)) ? fuzzyMatch(paramTypes, methodParamTypes) : types.isSameTypes(paramTypes, methodParamTypes); }
public void visitNewClass(JCNewClass tree) { if (tree.encl != null) tree.encl = translate(tree.encl, erasure(tree.encl.type)); tree.clazz = translate(tree.clazz, null); if (tree.varargsElement != null) tree.varargsElement = types.erasure(tree.varargsElement); tree.args = translateArgs( tree.args, tree.constructor.erasure(types).getParameterTypes(), tree.varargsElement); tree.def = translate(tree.def, null); tree.type = erasure(tree.type); result = tree; }
/** Emit an invokeinterface instruction. */ public void emitInvokeinterface(int meth, Type mtype) { int argsize = width(mtype.getParameterTypes()); emitop(invokeinterface); if (!alive) return; emit2(meth); emit1(argsize + 1); emit1(0); state.pop(argsize + 1); state.push(mtype.getReturnType()); }