CLion 2019.3ヘルプ

メンバーをプルアップ、メンバーをプッシュダウン

メンバーのプル・アップリファクタリングでは、クラスメンバーを基本クラスに移動できます。

メンバーのプッシュ・ダウンリファクタリングは、クラスメンバーをサブクラスに移動することによってクラス階層をクリーンアップできます。その後、メンバーは直接サブクラスにのみ再配置されます。

メンバーをプルアップする

  1. Select the members to be moved to a superclass.

  2. メインメニューまたはコンテキストメニューでリファクタリング | メンバーのプル・アップを選択します。メンバーのプル・アップダイアログが表示されます。

  3. 宛先オブジェクト(スーパークラス)を選択します。

  4. メンバーセクションで、移動するメンバーを選択します。

  5. 選択したメンバーを宛先に移動するには、リファクタリングをクリックします。

サンプル

class BaseClass{ int d1 = 0; static const int d2 = 1; }; class ChildClass: public BaseClass{ char SomeChar = 'a'; long d22; void exFunc(int); //This method will be pulled up }; void ChildClass::exFunc(int) {};
class BaseClass{ int d1 = 0; static const int d2 = 1; void exFunc(int); }; class ChildClass: public BaseClass{ char SomeChar = 'a'; long d22; }; void BaseClass::exFunc(int) {};

@interface SampleClass:NSObject /* This method will be pulled up */ - (int)IntSum:(int)num1 andNum2:(int)num2; @end @implementation SampleClass - (int)IntSum:(int)num1 andNum2:(int)num2{ int result = num1 = num2; return result; } @end
@interface BaseClass : NSObject - (int)IntSum:(int)num1 andNum2:(int)num2; @end @interface SampleClass : BaseClass @end @implementation BaseClass - (int)IntSum:(int)num1 andNum2:(int)num2{ int result = num1 = num2; return result; } @end

class SuperClass: def super_method(self): pass class SubClassOne(SuperClass): # This function will be pulled up def my_method(self): pass
class SuperClass: def super_method(self): pass def my_method(self): pass class SubClassOne(SuperClass): pass

従属メンバーをプルアップする

C++コードの次のサンプルを考えてみましょう:

class BaseClass { int a = 0; }; class ChildClass : BaseClass { int b1 = 12; int b2 = b1 * 4; };

ご覧のとおり、変数 bib2の間には依存関係があります。メンバーのプル・アップリファクタリングをクラス ChildClass に適用し、移動する b2 を選択してクラス内に b1 を残そうとすると、CLionは次のようにメンバーのプル・アップダイアログで問題のメンバーを強調表示します。

Pull members up error 1

抽出を続行しようとすると、次の警告メッセージが表示されます。

Pull members up error 2

継続を選択して問題を無視し、リファクタリングを続行するか、キャンセルを使用して戻り、解決します。また、検索ツールウィンドウで競合を観察することもできます。

メンバーをプッシュダウンする

  1. エディターで、メンバーをプッシュダウンする必要があるクラスを開きます。

  2. メインメニューまたはコンテキストメニューで、リファクタリング | メンバーのプッシュ・ダウンを選択します。メンバーをプッシュダウンダイアログはプッシュダウンられるメンバーのリストを表示します。

  3. 引き下げられるメンバー領域で、移動するメンバーを選択します。キャレットのメンバーは既に選択されていることに注意してください。

    メンバーをプッシュすると問題が発生する可能性がある場合は、赤いハイライトで通知されます。状況が無人の場合、リファクタリング後にエラーが発生することを意味します。CLionは問題を無視または修正することができる問題検出ダイアログを表示します。

  4. プレビューと変更の適用

サンプル

class BaseClass{ int d1 = 0; static const int d2 = 1; void exFunc(int); //This method will be pushed down }; class ChildClass: public BaseClass{ char SomeChar = 'a'; long d22; }; void BaseClass::exFunc(int) {};
class BaseClass{ int d1 = 0; }; class ChildClass: public BaseClass{ char SomeChar = 'a'; long d22; static const int d2 = 1; void exFunc(int); }; void ChildClass::exFunc(int) {};

@interface Superclass : NSObject { int v; int w; //This variable will be pushed down } - (void)initV; @end @implementation Superclass - (void)initV { v = 20; } @end @interface Subclass : Superclass
@interface Superclass : NSObject { int v; } - (void)initV; @end @implementation Superclass - (void)initV { v = 20; } @end @interface Subclass : Superclass { int w; }

class SuperClass: # This function will be pushed down def super_method(self): pass class SubClassOne(SuperClass): def my_method(self): pass class SubClassTwo(SuperClass): def my_method(self): pass
class SuperClass: pass class SubClassOne(SuperClass): def my_method(self): pass def super_method(self): pass class SubClassTwo(SuperClass): def my_method(self): pass def super_method(self): pass

従属メンバーをプッシュダウンする

C++コードの次のサンプルを考えてみましょう:

class SuperClass { int b1 = 12; int b2 = b1 * 4; }; class ChildClass : SuperClass { int b3 = 11; };

ご覧のとおり、ここでの変数 b2b1に依存します。メンバーのプッシュ・ダウンリファクタリングを上記のクラスに適用し、移動する b1 を選択して b2 を基本クラスクラスのままにしようとすると、CLionは次のようにメンバーを引き下げるダイアログで問題のメンバーを強調表示します。

Push members down error 2

抽出を続行しようとすると、次の警告メッセージが表示されます。

Push members down error 3

継続を選択して問題を無視し、リファクタリングを続行するか、キャンセルを使用して戻り、解決します。また、検索ツールウィンドウで競合を観察することもできます。

最終更新日: 2020年1月10日