  Incorrect placement of methods within classes is a typical code smell called
Feature Envy, which causes additional maintenance and cost during evolution. To
remove this design flaw, several Move Method refactoring tools have been
proposed. To the best of our knowledge, state-of-the-art related techniques can
be broadly divided into two categories: the first line is
non-machine-learning-based approaches built on software measurement, while the
selection and thresholds of software metrics heavily rely on expert knowledge.
The second line is machine learning-based approaches, which suggest Move Method
refactoring by learning to extract features from code information. However,
most approaches in this line treat different forms of code information
identically, disregarding their significant variation on data analysis. In this
paper, we propose an approach to recommend Move Method refactoring named RMove
by automatically learning structural and semantic representation from code
fragment respectively. We concatenate these representations together and
further train the machine learning classifiers to guide the movement of method
to suitable classes. We evaluate our approach on two publicly available
datasets. The results show that our approach outperforms three state-of-the-art
refactoring tools including PathMove, JDeodorant, and JMove in effectiveness
and usefulness. The results also unveil useful findings and provide new
insights that benefit other types of feature envy refactoring techniques.
