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
In the editor, select the class members that you want to extract into a superclass.
Choose
from the main menu or from the context menu.In the Extract Superclass dialog, specify the following:
Name of the new superclass in the Extract superclass from field.
Members to be included in the superclass.
Click Preview to check the refactoring result before proceeding. CLion will notify you in case of problems.
Dependency problems are also highlighted in the Extract dialog:
Click Extract to proceed with the refactoring. CLion will create a superclass and modify the original class to inherit from it.