aspect ArrayRewrite { syn boolean Dim.isVariable() { for (int i = 0 ; i < getNumExp() ; i++) { if (getExp(i) instanceof VariableSize) { return true; } } return false; } rewrite ParseArrayType { when (! getDim(0).isVariable()) to FixedArrayType { if (getNumDim() == 1) { return new FixedArrayType(getType(), getDim(0).getExpList()); } else { List l = new List(); for (int i = 1 ; i < getNumDim() ; i++) { l.add(getDim(i)); } return new FixedArrayType(new ParseArrayType(getType(), l), getDim(0).getExpList()); } } when (getDim(0).isVariable()) to VariableArrayType { if (getNumDim() == 1) { return new VariableArrayType(getType(), getDim(0).getExpList()); } else { List l = new List(); for (int i = 1 ; i < getNumDim() ; i++) { l.add(getDim(i)); } return new VariableArrayType(new ParseArrayType(getType(), l), getDim(0).getExpList()); } } } }