Inline Method Refactoring  

 

섹션은 당신에게 Inline Method  리팩토링 상에서 포괄적인  overview  how  리팩토링이 IntelliJ IDEA에서 사용될 있는가를 제공합니다.

개요


일반적으로 말하자면, Inline Method   리팩토링이 Extract Method  반대입니다.  Extract Method  리팩토링 수행하면

IDEA 호출자의 보디에 메소드의 보디를 놓을 것이고 메소드는 삭제됩니다.


반면에, 리팩토링을 적용하면 것은 당신은 오로지 하나의 메소드 콜을 선택하고, Inline하고, 다른 콜과 메소드 보디를 유지합니다.


예를 들면, 우리는 다음 코드를 가집니다:

 
    public class AClass {
        public int methodA(int param) {
            return methodB() + param;
        }
        private int methodB() {
            some code here
        }
    }
 
    ...
 
    public class AnotherClass {
        void foo (AClass aClass){
            int res = aClass.methodA(1);
        }
    }

 

그리고 당신은 methodA 사실 중복인 것을 알았습니다.  이것은 리팩토링이 적용되고  후에 코드입니다:
 
    public class AClass {
        private int methodB() {
            some code here
        }
    }
 
    ...
 
    public class AnotherClass {
        void foo (AClass aClass){
            int res = aClass.methodB() + 1;
        }
    }



Inlining Method  


메소드를 inline 하기 위해서

 1.   원하는 메소드 이름에서의 선언 또는 인보케이션에 캐럿을 배치하고, 메뉴에서 또는 에디터에서 오른쪽 버튼을 클릭하여 불려지는 팝업 메뉴에서 Refactor Inline...   클릭하거나 OR  Ctrl + Alt + N  누릅니다. 그리고 당신은 다음 다이얼로그 윈도우를 것입니다:


만일 리팩토링이 메소드 선언으로부터 호출되면 This invocation only and keep the method 옵션 버튼은 불가능하게 하게 입니다.



 2.   다이얼로그는 옵션 그룹과 체크 박스를 가집니다:

Inline  

메소드가 어떻게 Inline되는지 결정합니다:

 All invocations and remove the method  모든 메소드 인보케이션은 메소드 보디로 교체될 것입니다. 그리고 메소드 자체는 제거될 것입니다.
 
This invocation only and keep the method  - 메소드 자체가 유지될 동안 캐럿이 있는 인보케이션은 메소드 보디로 교체될 것입니다.

Preview invocations  to be inlined  

체크 박스를 선택하면 당신은 어떤 사용이 발견되었는지 추적하고, 그들의 교체를 승인하도록 허락합니다.   체크 박스가 선택되지 않을 , IDEA 교체 기능를 자동적으로 수행합니다.


심지어 체크 박스가 선택되지 않았을 때도, 만일 발견된 사용이 어떤 읽기 전용 파일에서 존재하면 교체 사용을 확인하는 프롬프트가 당신에 대기될 입니다.


Refactoring Preview 다이얼로그에서 (만일 그것이 나타나면) 당신은 수행된 변경을 분석할 있습니다.  리팩토링과 함께 진행하기 위해서, Do Refactor 클릭합니다그렇지 않다면 Cancel 클릭합니다. 상세한 것을 보려면 Refactoring Preview 보십시오.


만일 This invocation only and keep the method   옵션 버튼이 선택되면 Preview invocations to be inlined 체크 박스는 불가능하게 니다.



 3.   OK 클릭하십시오. 그리면 원하는 변수는 inline 것입니다.


Inline Method  리팩토링 적용하는데 일부 제한이 있습니다.  IDEA 실행 흐름이 리턴 스테이트먼트에 의해 중단된 재귀적 메소드 또는 메소드를 inline 없습니다.

예를 들면:  

 
     private int methodA(){
         int[] aaa = new int [10];
         for (int i = 0; i < aaa.length; i++) { i = aaa[i]; if (aaa[i] == 0) return i;
         }
         return -1;
     }
     

여기에서는 methodA()  메소드는 inline 없습니다.  그런 경우에 당신에게 에러 메시지가  프롬프트될 것입니다.   다음 당신은 수동으로 필요한 메소드를 inline해야만 하거나, 코드를 방해하는 것을 제외해야만 하거나, 이번에 Inline Method   리팩토링을 하는 것을 단념해야만 합니다.