@Override @Nullable public Choice<Unifier> visitMethodType(MethodType methodTy, @Nullable Unifier unifier) { // Don't unify the return type, which doesn't matter in overload resolution. return unifyList(unifier, getParameterTypes(), methodTy.getParameterTypes()); }
@Override @Nullable public Choice<Unifier> visitMethodType(MethodType methodTy, @Nullable Unifier unifier) { // Don't unify the return type, which doesn't matter in overload resolution. return unifyList(unifier, getParameterTypes(), methodTy.getParameterTypes()); }
void swapAccessConstructorTag(ClassSymbol oldCTag, ClassSymbol newCTag) { for (MethodSymbol methodSymbol : accessConstrs.values()) { Assert.check(methodSymbol.type.hasTag(METHOD)); MethodType oldMethodType = (MethodType)methodSymbol.type; if (oldMethodType.argtypes.head.tsym == oldCTag) methodSymbol.type = types.createMethodTypeWithParameters(oldMethodType, oldMethodType.getParameterTypes().tail .prepend(newCTag.erasure(types))); } }
argtypes, mt.getParameterTypes(), warn);
argtypes, mt.getParameterTypes(), warn);
ListBuffer<JCExpression> serArgs = new ListBuffer<>(); int i = 0; for (Type t : indyType.getParameterTypes()) { List<JCExpression> indexAsArg = new ListBuffer<JCExpression>().append(make.Literal(i)).toList(); List<Type> argTypes = new ListBuffer<Type>().append(syms.intType).toList();
ListBuffer<JCExpression> serArgs = new ListBuffer<>(); int i = 0; for (Type t : indyType.getParameterTypes()) { List<JCExpression> indexAsArg = new ListBuffer<JCExpression>().append(make.Literal(i)).toList(); List<Type> argTypes = new ListBuffer<Type>().append(syms.intType).toList();
&& tree.sym.owner.isLocal()) { MethodSymbol consSym = (MethodSymbol) tree.sym; List<Type> ptypes = ((MethodType) consSym.type).getParameterTypes(); Type classType = consSym.owner.type;
public boolean alreadyDefinedIn(CharSequence name, TypeMirror returnType, List<TypeMirror> paramTypes, TypeElement enclClass) { ClassSymbol clazz = (ClassSymbol)enclClass; Scope scope = clazz.members(); Name n = names.fromString(name.toString()); ListBuffer<Type> buff = new ListBuffer<>(); for (TypeMirror tm : paramTypes) { buff.append((Type)tm); } for (Symbol sym : scope.getSymbolsByName(n, Scope.LookupKind.NON_RECURSIVE)) { if(sym.type instanceof ExecutableType && jctypes.containsTypeEquivalent(sym.type.asMethodType().getParameterTypes(), buff.toList()) && jctypes.isSameType(sym.type.asMethodType().getReturnType(), (Type)returnType)) return true; } return false; }
/** Similar to Types.isSameType but avoids completion */ private boolean isSameBinaryType(MethodType mt1, MethodType mt2) { List<Type> types1 = types.erasure(mt1.getParameterTypes()) .prepend(types.erasure(mt1.getReturnType())); List<Type> types2 = mt2.getParameterTypes().prepend(mt2.getReturnType()); while (!types1.isEmpty() && !types2.isEmpty()) { if (types1.head.tsym != types2.head.tsym) return false; types1 = types1.tail; types2 = types2.tail; } return types1.isEmpty() && types2.isEmpty(); }
/** Similar to Types.isSameType but avoids completion */ private boolean isSameBinaryType(MethodType mt1, MethodType mt2) { List<Type> types1 = types.erasure(mt1.getParameterTypes()) .prepend(types.erasure(mt1.getReturnType())); List<Type> types2 = mt2.getParameterTypes().prepend(mt2.getReturnType()); while (!types1.isEmpty() && !types2.isEmpty()) { if (types1.head.tsym != types2.head.tsym) return false; types1 = types1.tail; types2 = types2.tail; } return types1.isEmpty() && types2.isEmpty(); }
/** Similar to Types.isSameType but avoids completion */ private boolean isSameBinaryType(MethodType mt1, MethodType mt2) { List<Type> types1 = types.erasure(mt1.getParameterTypes()) .prepend(types.erasure(mt1.getReturnType())); List<Type> types2 = mt2.getParameterTypes().prepend(mt2.getReturnType()); while (!types1.isEmpty() && !types2.isEmpty()) { if (types1.head.tsym != types2.head.tsym) return false; types1 = types1.tail; types2 = types2.tail; } return types1.isEmpty() && types2.isEmpty(); }
/** Similar to Types.isSameType but avoids completion */ private boolean isSameBinaryType(MethodType mt1, MethodType mt2) { List<Type> types1 = types.erasure(mt1.getParameterTypes()) .prepend(types.erasure(mt1.getReturnType())); List<Type> types2 = mt2.getParameterTypes().prepend(mt2.getReturnType()); while (!types1.isEmpty() && !types2.isEmpty()) { if (types1.head.tsym != types2.head.tsym) return false; types1 = types1.tail; types2 = types2.tail; } return types1.isEmpty() && types2.isEmpty(); }
void swapAccessConstructorTag(ClassSymbol oldCTag, ClassSymbol newCTag) { for (MethodSymbol methodSymbol : accessConstrs.values()) { Assert.check(methodSymbol.type.hasTag(METHOD)); MethodType oldMethodType = (MethodType)methodSymbol.type; if (oldMethodType.argtypes.head.tsym == oldCTag) methodSymbol.type = types.createMethodTypeWithParameters(oldMethodType, oldMethodType.getParameterTypes().tail .prepend(newCTag.erasure(types))); } }
/** * Tells if a method can be invoked with some given parameter types. * * @param types * a reference to the types in the compilation scope * @param from * the caller method signature to test (contains the parameter types) * @param target * the callee method signature * @return true if the callee can be invoked by the caller */ public static boolean isInvocable(Types types, MethodType from, MethodType target) { if (from.getParameterTypes().length() != target.getParameterTypes().length()) { return false; } for (int i = 0; i < from.getParameterTypes().length(); i++) { if (!types.isAssignable(types.erasure(from.getParameterTypes().get(i)), types.erasure(target.getParameterTypes().get(i)))) { return false; } } return true; }