### Question:
ArrayModel extends Referrer<ArrayModel> { static ArrayModel reference(final Registry registry, final Referrer<?> referrer, final $Array.Array xsb) { return registry.reference(new ArrayModel(registry, referrer, xsb), referrer); } private  ArrayModel(final Registry registry, final Declarer declarer, final Schema.Array xsb); private  ArrayModel(final Registry registry, final Declarer declarer, final $Array xsb, final $FieldBinding binding); private  ArrayModel(final Registry registry, final Declarer declarer, final $Array.Array xsb); private  ArrayModel(final Registry registry, final Declarer declarer, final Id id, final Registry.Type type, final Annotation arrayAnnotation, final int minIterate, final int maxIterate, final int[] elementIds, final LinkedHashMap<Integer,Annotation> topologicalOrder, final String declaringTypeName); private  ArrayModel(final Registry registry, final Declarer declarer, final ArrayElement arrayElement, final Map<Integer,Annotation> idToElement, final String declaringTypeName); @Override String elementName();  }### Answer:
@Test public void testGreatestCommonSuperObject() { final Registry registry = new Registry(getClass().getPackage().getName()); final $Number number1 = new Number(); number1.setName$(new $Number.Name$("integer1")); number1.setScale$(new $Number.Scale$(BigInteger.ZERO)); final NumberModel model1 = NumberModel.reference(registry, null, number1); final $Number number2 = new Number(); number2.setName$(new $Number.Name$("integer2")); number2.setScale$(new $Number.Scale$(BigInteger.ZERO)); final NumberModel model2 = NumberModel.reference(registry, null, number2); assertEquals(registry.getType(BigInteger.class), ArrayModel.getGreatestCommonSuperType(Arrays.asList(model1, model2))); }