@Override public Type getGenericTypeDefinition() { if (_elementType.isGenericTypeDefinition()) { return this; } return _elementType.getGenericTypeDefinition().makeArrayType(); }
@Override public Type getGenericTypeDefinition() { if (_elementType.isGenericTypeDefinition()) { return this; } return _elementType.getGenericTypeDefinition().makeArrayType(); }
@Override public Type getGenericTypeDefinition() { if (_elementType.isGenericTypeDefinition()) { return this; } return _elementType.getGenericTypeDefinition().makeArrayType(); }
public void put(final Key key, final Type type) { final Class<?> erasedType = key._erasedType; if (!_erasedMap.containsKey(erasedType)) { if (type.isGenericType() && !type.isGenericTypeDefinition()) { _erasedMap.put(erasedType, type.getGenericTypeDefinition()); } else { _erasedMap.put(erasedType, type); } } _map.put(key, type); if (type.isArray()) { final Type elementType = type.getElementType(); if (!_arrayMap.containsKey(elementType)) { _arrayMap.put(elementType, type); } } }
public void put(final Key key, final Type type) { final Class<?> erasedType = key._erasedType; if (!_erasedMap.containsKey(erasedType)) { if (type.isGenericType() && !type.isGenericTypeDefinition()) { _erasedMap.put(erasedType, type.getGenericTypeDefinition()); } else { _erasedMap.put(erasedType, type); } } _map.put(key, type); if (type.isArray()) { final Type elementType = type.getElementType(); if (!_arrayMap.containsKey(elementType)) { _arrayMap.put(elementType, type); } } }
public void put(final Key key, final Type type) { final String descriptor = key.descriptor; if (!_definitionMap.containsKey(descriptor)) { if (type.isGenericType() && !type.isGenericTypeDefinition()) { _definitionMap.put(descriptor, type.getGenericTypeDefinition()); } else { _definitionMap.put(descriptor, type); } } if (type.isPrimitive() && !_definitionMap.containsKey(type.getName())) { _definitionMap.put(type.getName(), type); } _map.put(key, type); if (type.isArray()) { final Type elementType = type.getElementType(); if (!_arrayMap.containsKey(elementType)) { _arrayMap.put(elementType, type); } } }
public StringBuilder appendErasedSignature(final StringBuilder sb) { if (isGenericType() && !isGenericTypeDefinition()) { return getGenericTypeDefinition().appendErasedSignature(sb); } return _appendErasedClassSignature(sb); }
@Override public Void visitClassType(final Type<?> type, final MemberInfo scope) { super.visitClassType(type, scope); _frames.push(new VerifierFrame(FrameType.TYPE_SIGNATURE, type)); if (type.isGenericTypeDefinition()) { visit(type.getGenericTypeParameters(), scope, FrameType.TYPE_VARIABLE); } else if (type.isGenericType()) { visit(type.getTypeArguments(), scope, FrameType.TYPE_ARGUMENT); } _frames.pop(); return null; }
public StringBuilder appendErasedSignature(final StringBuilder sb) { if (isGenericType() && !isGenericTypeDefinition()) { return getGenericTypeDefinition().appendErasedSignature(sb); } return _appendErasedClassSignature(sb); }
public StringBuilder appendErasedSignature(final StringBuilder sb) { if (isGenericType() && !isGenericTypeDefinition()) { return getGenericTypeDefinition().appendErasedSignature(sb); } return _appendErasedClassSignature(sb); }
protected StringBuilder _appendClassSignature(final StringBuilder sb) { StringBuilder s = sb; s.append('L'); s = _appendClassName(s, true, false); if (isGenericType()) { final TypeList typeArguments = getTypeBindings().getBoundTypes(); final int count = typeArguments.size(); if (count > 0) { s.append('<'); //noinspection ForLoopReplaceableByForEach for (int i = 0; i < count; ++i) { final Type type = typeArguments.get(i); if (type.isGenericTypeDefinition()) { s = type.appendErasedSignature(s); } else { s = type.appendSignature(s); } } s.append('>'); } } s.append(';'); return s; }
protected StringBuilder _appendClassSignature(final StringBuilder sb) { StringBuilder s = sb; s.append('L'); s = _appendClassName(s, true, false); if (isGenericType()) { final TypeList typeArguments = getTypeBindings().getBoundTypes(); final int count = typeArguments.size(); if (count > 0) { s.append('<'); //noinspection ForLoopReplaceableByForEach for (int i = 0; i < count; ++i) { final Type type = typeArguments.get(i); if (type.isGenericTypeDefinition()) { s = type.appendErasedSignature(s); } else { s = type.appendSignature(s); } } s.append('>'); } } s.append(';'); return s; }
public final Type<?> getErasedType() { if (isArray()) { return getElementType().getErasedType().makeArrayType(); } if (isGenericParameter()) { return getExtendsBound().getErasedType(); } if (!isGenericType()) { return this; } if (!isGenericTypeDefinition()) { return getGenericTypeDefinition().getErasedType(); } if (_erasedType == null) { synchronized (CACHE_LOCK) { //noinspection ConstantConditions if (_erasedType == null) { _erasedType = new ErasedType<>(this); } } } return _erasedType; }
public final Type<?> getErasedType() { if (isArray()) { return getElementType().getErasedType().makeArrayType(); } if (isGenericParameter()) { return getExtendsBound().getErasedType(); } if (!isGenericType()) { return this; } if (!isGenericTypeDefinition()) { return getGenericTypeDefinition().getErasedType(); } if (_erasedType == null) { synchronized (CACHE_LOCK) { //noinspection ConstantConditions if (_erasedType == null) { _erasedType = new ErasedType<>(this); } } } return _erasedType; }
public boolean containsGenericParameter(final Type<?> genericParameter) { if (!VerifyArgument.notNull(genericParameter, "genericParameter").isGenericParameter()) { throw Error.notGenericParameter(genericParameter); } if (hasElementType()) { return getRootElementType().containsGenericParameter(genericParameter); } if (isGenericParameter()) { return this.isEquivalentTo(genericParameter); } if (isGenericTypeDefinition()) { final TypeBindings typeArguments = getTypeBindings(); for (int i = 0, n = typeArguments.size(); i < n; i++) { if (typeArguments.getBoundType(i).containsGenericParameter(genericParameter)) { return true; } } } return false; }
public FieldInfo visitField(final Type<?> declaringType, final FieldInfo field, final TypeBindings bindings) { final Type<?> oldFieldType = field.getFieldType(); final Type<?> newFieldType = visit(field.getFieldType(), bindings); final Type<?> actualDeclaringType; final Type oldDeclaringType = field.getDeclaringType(); if (!TypeUtils.areEquivalent(oldDeclaringType, declaringType) && oldDeclaringType.isGenericTypeDefinition() && declaringType.isGenericType() && TypeUtils.areEquivalent(oldDeclaringType, declaringType.getGenericTypeDefinition())) { actualDeclaringType = declaringType; } else { actualDeclaringType = oldDeclaringType; } if (TypeUtils.areEquivalent(oldFieldType, newFieldType) && TypeUtils.areEquivalent(actualDeclaringType, declaringType)) { return field; } return new ReflectedField(actualDeclaringType, field.getRawField(), newFieldType); }
public final Type<?> getErasedType() { if (isArray()) { return getElementType().getErasedType().makeArrayType(); } if (isGenericParameter()) { return getExtendsBound().getErasedType(); } if (!isGenericType()) { return this; } if (!isGenericTypeDefinition()) { return getGenericTypeDefinition().getErasedType(); } if (_erasedType == null) { synchronized (CACHE_LOCK) { //noinspection ConstantConditions if (_erasedType == null) { _erasedType = new ErasedType<>(this); } } } return _erasedType; }
public FieldInfo visitField(final Type<?> declaringType, final FieldInfo field, final TypeBindings bindings) { final Type<?> oldFieldType = field.getFieldType(); final Type<?> newFieldType = visit(field.getFieldType(), bindings); final Type<?> actualDeclaringType; final Type oldDeclaringType = field.getDeclaringType(); if (!TypeUtils.areEquivalent(oldDeclaringType, declaringType) && oldDeclaringType.isGenericTypeDefinition() && declaringType.isGenericType() && TypeUtils.areEquivalent(oldDeclaringType, declaringType.getGenericTypeDefinition())) { actualDeclaringType = declaringType; } else { actualDeclaringType = oldDeclaringType; } if (TypeUtils.areEquivalent(oldFieldType, newFieldType) && TypeUtils.areEquivalent(actualDeclaringType, declaringType)) { return field; } return new ReflectedField(actualDeclaringType, field.getRawField(), newFieldType); }
public static boolean isSubtypeUnchecked(final Type t, final Type s) { if (t.isArray() && s.isArray()) { if (t.getElementType().isPrimitive()) { return isSameType(elementType(t), elementType(s)); } return isSubtypeUnchecked(elementType(t), elementType(s)); } else if (isSubtype(t, s)) { return true; } else if (t.isGenericParameter()) { return isSubtypeUnchecked(t.getExtendsBound(), s); } else if (s.isGenericParameter()) { return isSubtypeUnchecked(t, s.getExtendsBound()); } else if (s.isGenericType() && !s.isGenericTypeDefinition()) { final Type t2 = asSuper(t, s); if (t2 != null) { return true; } } return false; }
public static boolean isSubtypeUnchecked(final Type t, final Type s) { if (t.isArray() && s.isArray()) { if (t.getElementType().isPrimitive()) { return isSameType(elementType(t), elementType(s)); } return isSubtypeUnchecked(elementType(t), elementType(s)); } else if (isSubtype(t, s)) { return true; } else if (t.isGenericParameter()) { return isSubtypeUnchecked(t.getExtendsBound(), s); } else if (s.isGenericParameter()) { return isSubtypeUnchecked(t, s.getExtendsBound()); } else if (s.isGenericType() && !s.isGenericTypeDefinition()) { final Type t2 = asSuper(t, s); if (t2 != null) { return true; } } return false; }