public Property createCopy(EntityType targetModel) { if (!declaringType.getParameters().isEmpty()) { Type newType = TypeResolver.resolve(type, declaringType, targetModel); if (!newType.equals(type) || !newType.getClass().equals(type.getClass())) { return new Property(targetModel, name, newType, inits, false); } else { return new Property(targetModel, name, type, inits, targetModel.getSuperType() != null); } } else { return new Property(targetModel, name, type, inits, targetModel.getSuperType() != null); } }
private static Type resolveWithParameters(Type type, Type declaringType, EntityType context) { Type[] params = new Type[type.getParameters().size()]; boolean transformed = false; for (int i = 0; i < type.getParameters().size(); i++) { Type param = type.getParameters().get(i); if (param != null && !param.getFullName().equals(type.getFullName())) { params[i] = resolve(param, declaringType, context); if (!params[i].equals(param)) { transformed = true; } } } if (transformed) { return new SimpleType(type, params); } else { return type; } }