final Integer[] levels = levelList.getLevelsDescendingArray();
this.levelData = new LevelStorage[levels.length];
final int expressionsCount = levelList.size();
final int capacity = Math.min(20, expressionsCount);
final IntList expressionPositions = new IntList(capacity);
final IntList activeExpressions = new IntList(capacity);
final IntList functions = new IntList(capacity);
final IntList pageEventListeners = new IntList(capacity);
final IntList prepareEventListeners = new IntList(capacity);
final boolean prepareEventListener = false;
for (int i = 0; i < levels.length; i++)
{
final int currentLevel = levels[i].intValue();
final Integer[] data = (Integer[])
levelList.getElementArrayForLevel(currentLevel, ExpressionDataRow.EMPTY_INTEGERARRAY);
for (int x = 0; x < data.length; x++)
{
final Integer position = data[x];
final Expression ex = this.expressions[position.intValue()];
final int globalPosition = position.intValue();
expressionPositions.add(globalPosition);
activeExpressions.add(globalPosition);
if (ex instanceof Function == false)
{
continue;
}
functions.add(globalPosition);
if (ex instanceof PageEventListener)
{
pageEventListeners.add(globalPosition);
}
}
levelData[i] = new LevelStorage(currentLevel,
expressionPositions.toArray(), activeExpressions.toArray(),
functions.toArray(), pageEventListeners.toArray(),
prepareEventListeners.toArray());
expressionPositions.clear();
activeExpressions.clear();
functions.clear();
pageEventListeners.clear();
prepareEventListeners.clear();
this.prepareEventListener = prepareEventListener;
}
}