Using Structural and Semantic Information to Recommend Source Code Refactoring Solutions