C++_Refactoring_-_Now_for_Real
-
Upload
thumperward -
Category
Documents
-
view
213 -
download
0
description
Transcript of C++_Refactoring_-_Now_for_Real
![Page 1: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/1.jpg)
C++ Refactoring – Now for Real Sergey Prigogin
CDT committer, refactoring component lead
Copyright (c) 2012 Google. Made available under the Eclipse Public License v1.0.
![Page 2: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/2.jpg)
History of refactoring in CDT
2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
Rename
Toggle Function
Extract Local Variable
Getters and Setters
Hide Method
Implement Method
Extract Constant
Extract Function
![Page 3: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/3.jpg)
What’s wrong with refactoring in CDT?
Ø Corrupts surrounding code
Ø Generated code is not formatted properly
Ø Often produces semantically invalid code
Ø Does it very slowly
Ø Requires you to save all files
![Page 4: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/4.jpg)
Why was it slow?
Ø Refactoring requires AST
Ø AST requires index read lock
Ø Refactoring steps: o checkInitialConditions
o checkFinalConditions
o createChange
![Page 5: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/5.jpg)
How we made it fast
Ø Disposable refactoring context object
Ø Caching of ASTs
Ø Using editor AST when available o Index doesn’t help with dirty editors
![Page 6: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/6.jpg)
Preventing collateral damage
Ø AST rewrite infrastructure
Ø Creation of textual changes based on AST delta
![Page 7: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/7.jpg)
Passing parameters by value or reference
class A {!
public:!
void setIntField(int intField) {!
this->intField = intField;!
}!
!
void setStrField(const std::string& strField) {!
this->strField = strField;!
}!
!
private:!
int intField;!
std::string strField;!
};!
![Page 8: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/8.jpg)
Which variables should be returned int factorial(int k) {! int i = 1;! int f = 1;! while (i <= k)! f *= i++;! return f;!}!
int multiply(int f, int* i) {! f *= *i++;! return f;!}!!int factorial(int k) {! int i = 1;! int f = 1;! while (i <= k)! f = multiply(f, &i);! return f;!}!
![Page 9: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/9.jpg)
How is was in CDT 8.0 int factorial(int k) {! int i = 1;! int f = 1;! while (i <= k)! f *= i++;! return f;!}!
int multiply(int f, int i)!{! f *= i++;!}!!int factorial(int k) {! int i = 1;! int f = 1;! while (i <= k)! f = multiply(f, i);! return f;!}!
![Page 10: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/10.jpg)
New code style preferences
![Page 11: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/11.jpg)
How can I try it myself?
Download https://hudson.eclipse.org/hudson/job/cdt-nightly/lastSuccessfulBuild/artifact/releng/org.eclipse.cdt.repo/target/org.eclipse.cdt.repo.zip
![Page 12: C++_Refactoring_-_Now_for_Real](https://reader035.fdocuments.us/reader035/viewer/2022080222/563dba20550346aa9aa2f1e3/html5/thumbnails/12.jpg)
What’s next?
Ø Focus on quality
Ø Change Function Signature and Inline refactorings
Ø Rename file when renaming a class
Ø Organize Includes