/** * Creates an ArrayType parametrized by a given Type and dimension count. * * @param baseType * a Type to parametrize the ArrayType * @param numDimensions * the dimension count to parametrize the ArrayType. * @return an ArrayType parametrized accrodingly. */ public static ArrayType v(Type baseType, int numDimensions) { if (numDimensions < 0) { throw new RuntimeException("Invalid number of array dimensions: " + numDimensions); } int orgDimensions = numDimensions; Type elementType = baseType; while (numDimensions > 0) { ArrayType ret = elementType.getArrayType(); if (ret == null) { ret = new ArrayType(baseType, orgDimensions - numDimensions + 1); elementType.setArrayType(ret); } elementType = ret; numDimensions--; } return (ArrayType) elementType; }
/** * Creates an ArrayType parametrized by a given Type and dimension count. * @param baseType a Type to parametrize the ArrayType * @param numDimensions the dimension count to parametrize the ArrayType. * @return an ArrayType parametrized accrodingly. */ public static ArrayType v(Type baseType, int numDimensions) { if( numDimensions < 1 ) throw new RuntimeException( "attempt to create array with "+numDimensions+" dimensions" ); ArrayType ret; Type elementType; if( numDimensions == 1 ) { elementType = baseType; } else { elementType = ArrayType.v( baseType, numDimensions-1 ); } ret = elementType.getArrayType(); if( ret == null ) { ret = new ArrayType(baseType, numDimensions); elementType.setArrayType( ret ); } return ret; }
/** * Creates an ArrayType parametrized by a given Type and dimension count. * @param baseType a Type to parametrize the ArrayType * @param numDimensions the dimension count to parametrize the ArrayType. * @return an ArrayType parametrized accrodingly. */ public static ArrayType v(Type baseType, int numDimensions) { if( numDimensions < 1 ) throw new RuntimeException( "attempt to create array with "+numDimensions+" dimensions" ); ArrayType ret; Type elementType; if( numDimensions == 1 ) { elementType = baseType; } else { elementType = ArrayType.v( baseType, numDimensions-1 ); } ret = elementType.getArrayType(); if( ret == null ) { ret = new ArrayType(baseType, numDimensions); elementType.setArrayType( ret ); } return ret; }
targetType = TypeUtils.buildArrayOrAddDimension(targetType, arrayRef.getType().getArrayType());
if (leftValue instanceof ArrayRef) { ArrayRef arrayRef = (ArrayRef) leftValue; newType = TypeUtils.buildArrayOrAddDimension(newType, arrayRef.getType().getArrayType()); } else if (defStmt.getRightOp() instanceof ArrayRef) { newType = ((ArrayType) newType).getElementType(); ArrayRef arrayRef = (ArrayRef) defStmt.getRightOp(); targetType = TypeUtils.buildArrayOrAddDimension(targetType, arrayRef.getType().getArrayType()); } else if (leftValue instanceof ArrayRef) { assert source.getAccessPath().getBaseType() instanceof ArrayType;