public static TypeList combine(final TypeList first, final TypeList second) { return combineCore(first, second, false); }
public boolean containsBoundType(final Type type) { return type != null && _boundTypes.contains(type); }
@NotNull @Override public TypeList subList(final int fromIndex, final int toIndex) { subListRangeCheck(fromIndex, toIndex, size()); final int offset = getOffset() + fromIndex; final int length = toIndex - fromIndex; if (length == 0) { return empty(); } return new TypeList(getElements(), offset, length); }
static boolean isBridgeMethodNeeded(final MethodInfo baseMethod, final MethodInfo override) { final MethodInfo erasedBase = baseMethod.getErasedMethodDefinition(); final MethodInfo erasedOverride = override.getErasedMethodDefinition(); final Type<?> baseReturnType = erasedBase.getReturnType().getErasedType(); final Type<?> overrideReturnType = erasedOverride.getReturnType().getErasedType(); if ((baseReturnType == PrimitiveTypes.Void) != (overrideReturnType == PrimitiveTypes.Void)) { throw Error.incompatibleReturnTypes(); } if (!TypeUtils.areEquivalent(overrideReturnType, baseReturnType)) { return true; } final TypeList parameterTypes = (erasedOverride instanceof MethodBuilder) ? ((MethodBuilder) erasedOverride).getParameterTypes().getErasedTypes() : erasedOverride.getParameters().getParameterTypes().getErasedTypes(); final TypeList baseParameters = (erasedBase instanceof MethodBuilder) ? ((MethodBuilder) erasedBase).getParameterTypes().getErasedTypes() : erasedBase.getParameters().getParameterTypes().getErasedTypes(); if (baseParameters.size() != parameterTypes.size()) { throw Error.parameterCountMismatch(); } for (int i = 0, n = parameterTypes.size(); i < n; i++) { final Type<?> t1 = parameterTypes.get(i); final Type<?> t2 = baseParameters.get(i); if (!t1.isEquivalentTo(t2)) { return true; } } return false; }
@Override public TypeList getExplicitInterfaces() { if (_interfaces == null) { return TypeList.empty(); } return _interfaces; }
public static TypeList list(final List<? extends Type<?>> types) { return new TypeList(types); }
public final SignatureType getErasedSignature() { if (_erasedSignature == null) { synchronized (this) { if (_erasedSignature == null) { final Type<?> returnType = _returnType.getErasedType(); final TypeList parameterTypes = _parameterTypes.getErasedTypes(); if (returnType.isEquivalentTo(_returnType) && parameterTypes.isEquivalentTo(_parameterTypes)) { _erasedSignature = this; } else { _erasedSignature = new SignatureType(returnType, parameterTypes); } } } } return _erasedSignature; }
public boolean equals(final TypeList other) { return other == this || other != null && Arrays.equals(super.getElements(), other.getElements()); } }
public final boolean containsGenericParameter(final Type<?> genericParameter) { return _returnType.containsGenericParameter(genericParameter) || _parameterTypes.containsGenericParameter(genericParameter); }
public final boolean containsGenericParameters() { return _returnType.containsGenericParameters() || _parameterTypes.containsGenericParameters(); }
public Type getGenericParameter(final int index) { VerifyArgument.inRange(0, size(), index, "index"); return _genericParameters.get(index); }
@NotNull @Override public TypeList subList(final int fromIndex, final int toIndex) { subListRangeCheck(fromIndex, toIndex, size()); final int offset = getOffset() + fromIndex; final int length = toIndex - fromIndex; if (length == 0) { return empty(); } return new TypeList(getElements(), offset, length); }
private boolean isBridgeMethodNeeded(final MethodOverride methodOverride) { final MethodInfo baseMethod = methodOverride.baseMethod; final MethodBuilder override = methodOverride.override; final Type<?> baseReturnType = baseMethod.getReturnType().getErasedType(); final Type<?> overrideReturnType = override.getReturnType().getErasedType(); if ((baseReturnType == PrimitiveTypes.Void) != (overrideReturnType == PrimitiveTypes.Void)) { throw Error.incompatibleReturnTypes(); } if (!TypeUtils.areEquivalent(overrideReturnType, baseReturnType)) { return true; } final ParameterBuilder[] parameterBuilders = override.parameterBuilders; final TypeList baseParameters = (baseMethod instanceof MethodBuilder) ? ((MethodBuilder) baseMethod).getParameterTypes().getErasedTypes() : baseMethod.getParameters().getParameterTypes().getErasedTypes(); if (baseParameters.size() != parameterBuilders.length) { throw Error.parameterCountMismatch(); } for (int i = 0, n = parameterBuilders.length; i < n; i++) { final Class<?> c1 = parameterBuilders[i].getParameterType().getErasedClass(); final Class<?> c2 = baseParameters.get(i).getErasedClass(); if (c1 != c2) { return true; } } return false; }
@Override public TypeList getExplicitInterfaces() { if (_interfaces == null) { return TypeList.empty(); } return _interfaces; }