Extract superclass
The Extract Superclass refactoring enables extracting certain members of a class into a superclass. In CLion, this refactoring is available for C++, Objective-C/C++, Python and JavaScript code.
Examples
Before | After |
---|---|
class SomeClass {
char SomeChar = 'a';
long d22;
//This function will be extracted to a base class
void exFunc(int);
};
|
class SuperClass {
void exFunc(int);
};
class SomeClass : public SuperClass {
char SomeChar = 'a';
long d22;
};
|
Before | After |
---|---|
@interface SClass : NSObject {
int v; //This variable will be extracted to a superclass
}
- (void)initV;
@end
@implementation SClass
- (void)initV {
v = 20;
}
@end
|
@interface SuperClass : NSObject { int v; }
@end
@interface SClass : SuperClass
- (void)initV;
@end
@implementation SClass
- (void)initV {
v = 20;
}
@end
|
Before | After |
---|---|
class BaseClass:
# This function will be extracted to a base class
def eval_smth(self, a, b, c):
x = 2*b - c
y = 2*b + c
return x, y
|
class SuperClass:
def eval_smth(self, a, b, c):
x = 2*b - c
y = 2*b + c
return x, y
class BaseClass(SuperClass):
pass
|
Before | After |
---|---|
class Editor {
//This function will be extracted to a superclass
View() {
console.log(this.name + ' can view');
}
Edit() {
console.log(this.name + ' can edit');
}
}
|
class User {
View() {
console.log(this.name + ' can view');
}
}
class Editor extends User {
Edit() {
console.log(this.name + ' can edit');
}
}
|
Extract a superclass
Select the desired class in one of the views, or just open it in the editor.
Choose
from the main menu or from the context menu.In the Extract Superclass dialog that appears, specify the following information:
Name of the new superclass in the Extract superclass from field.
Members to be included in the superclass
The Extract superclass from field displays the name of the class, from which a superclass should be extracted. It is read-only.
Click Refactor to proceed with the refactoring. The superclass is created and the original class is modified to inherit from it:
Extracting the class dependent members
Let's consider the following sample of code:
As you can see, there is a dependency between d1
and exRes
. If you apply Extract Superclass refactoring to the above class and try to select exRes
to be moved, CLion highlights the d2
variable with blue:
Trying to proceed with extract, you will get the following warning message:
Choose Continue to ignore the problem and proceed with refactoring, or Cancel to return back and resolve it. Also you can observe the conflict in Find Tool Window.