public BArrayType(BType elemType, int size) { super(null, null, BNewArray.class); this.elementType = elemType; if (elementType instanceof BArrayType) { dimensions = ((BArrayType) elementType).getDimensions() + 1; } if (size != -1) { state = BArrayState.CLOSED_SEALED; this.size = size; } }
public BArrayType(BType elementType) { super(null, null, BNewArray.class); this.elementType = elementType; if (elementType instanceof BArrayType) { dimensions = ((BArrayType) elementType).getDimensions() + 1; } }
private static boolean checkArrayCast(BType sourceType, BType targetType, List<TypePair> unresolvedTypes) { if (targetType.getTag() == TypeTags.ARRAY_TAG && sourceType.getTag() == TypeTags.ARRAY_TAG) { BArrayType sourceArrayType = (BArrayType) sourceType; BArrayType targetArrayType = (BArrayType) targetType; if (targetArrayType.getDimensions() > sourceArrayType.getDimensions()) { return false; } return checkArrayCast(sourceArrayType.getElementType(), targetArrayType.getElementType(), unresolvedTypes); } else if (targetType.getTag() == TypeTags.UNION_TAG) { return checkUnionAssignable(sourceType, targetType, unresolvedTypes); } if (targetType.getTag() == TypeTags.ANY_TAG) { return true; } return sourceType.equals(targetType); }
public boolean equals(Object obj) { // if obj == 'null' or not instance of BTypeValue - return false if (obj == null || !(obj instanceof BTypeDescValue)) { return false; } BTypeDescValue typeValue = (BTypeDescValue) obj; if ((typeValue.value() instanceof BArrayType) && (this.value() instanceof BArrayType)) { BArrayType objArrayType = (BArrayType) typeValue.value(); BArrayType thisArrayType = (BArrayType) this.value(); if (objArrayType.getDimensions() != thisArrayType.getDimensions()) { return false; } return (new BTypeDescValue(thisArrayType.getElementType())) .equals(new BTypeDescValue(objArrayType.getElementType())); } else { return typeValue.value() == this.value(); } }
@Override public BPacket toBValue(BArrayType type, BValueSerializer serializer) { BType elementType = type.getElementType(); int dimensions = type.getDimensions(); int size = type.getSize(); BPacket packet = BPacket.from(typeName(), null); packet.put(ELEM_TYPE, serializer.toBValue(elementType, null)); packet.put(DIMENSIONS, new BInteger(dimensions)); packet.put(SIZE, new BInteger(size)); return packet; }