A framework for the checking and refactoring of crosscutting concepts