mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-03 05:33:33 +02:00
Generate getters and setters by Emanuel Graf, bug 226658.
This commit is contained in:
parent
6df6c40158
commit
cd48414961
23 changed files with 1568 additions and 14 deletions
|
@ -0,0 +1,652 @@
|
||||||
|
//!Generate Getters and Setters One Getter Selection
|
||||||
|
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
|
||||||
|
//@.config
|
||||||
|
filename=C.h
|
||||||
|
getters=name
|
||||||
|
//@C.cpp
|
||||||
|
#include "C.h"
|
||||||
|
|
||||||
|
int Person::SocSecNo(){
|
||||||
|
return socSecNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//=
|
||||||
|
//@C.h
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int //$SocSecNo$//();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
|
||||||
|
int getSystemId(){
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId){
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
//=
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int SocSecNo();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
char *getName() const
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getSystemId(){
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId){
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
//!Generate Getters and Setters One Getter Selection with Namespace
|
||||||
|
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
|
||||||
|
//@.config
|
||||||
|
filename=C.h
|
||||||
|
getters=name
|
||||||
|
//@C.cpp
|
||||||
|
#include "C.h"
|
||||||
|
|
||||||
|
int Person::SocSecNo(){
|
||||||
|
return socSecNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//=
|
||||||
|
//@C.h
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
namespace Personal {
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int //$SocSecNo$//();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
|
||||||
|
int getSystemId(){
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId){
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
|
||||||
|
//=
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
namespace Personal {
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int SocSecNo();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
char *getName() const
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getSystemId(){
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId){
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
|
||||||
|
//!Generate Getters and Setters One Setter Selection
|
||||||
|
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
|
||||||
|
//@.config
|
||||||
|
filename=C.h
|
||||||
|
setters=name
|
||||||
|
//@C.cpp
|
||||||
|
#include "C.h"
|
||||||
|
|
||||||
|
int Person::SocSecNo(){
|
||||||
|
return socSecNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//=
|
||||||
|
//@C.h
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int //$SocSecNo$//();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
|
||||||
|
int getSystemId(){
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId){
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
//=
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int SocSecNo();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
void setName(char *name)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getSystemId(){
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId){
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
//!Generate Getters and Setters Getter and Setter Selection
|
||||||
|
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
|
||||||
|
//@.config
|
||||||
|
filename=C.h
|
||||||
|
setters=name
|
||||||
|
getters=name
|
||||||
|
//@C.cpp
|
||||||
|
#include "C.h"
|
||||||
|
|
||||||
|
int Person::SocSecNo(){
|
||||||
|
return socSecNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//=
|
||||||
|
//@C.h
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int //$SocSecNo$//();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
|
||||||
|
int getSystemId(){
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId){
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
//=
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int SocSecNo();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
char *getName() const
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setName(char *name)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getSystemId(){
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId){
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
//!Generate Getters and Setters Multiple Selection
|
||||||
|
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
|
||||||
|
//@.config
|
||||||
|
filename=C.h
|
||||||
|
getters=name,systemId
|
||||||
|
setters=name,systemId
|
||||||
|
//@C.cpp
|
||||||
|
#include "C.h"
|
||||||
|
|
||||||
|
int Person::SocSecNo(){
|
||||||
|
return socSecNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//=
|
||||||
|
//@C.h
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int //$SocSecNo$//();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
|
||||||
|
//=
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int systemId;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const int socSecNo;
|
||||||
|
|
||||||
|
Person myFriend;
|
||||||
|
int getSystemId() const
|
||||||
|
{
|
||||||
|
return systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSystemId(int systemId)
|
||||||
|
{
|
||||||
|
this.systemId = systemId;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *getName() const
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setName(char *name)
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
Person(int socSecNo); // contructor
|
||||||
|
|
||||||
|
~Person(); // destructor
|
||||||
|
|
||||||
|
|
||||||
|
char* Name();
|
||||||
|
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
int SocSecNo();
|
||||||
|
|
||||||
|
int GetUniqueId();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
int gooo = 1;
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
|
||||||
|
//!Generate Getters and Setters Visibility order 1
|
||||||
|
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
|
||||||
|
//@.config
|
||||||
|
filename=GaS.h
|
||||||
|
getters=i,isOk
|
||||||
|
setters=i,isOk
|
||||||
|
//@GaS.cpp
|
||||||
|
#include "Getters.h"
|
||||||
|
|
||||||
|
GaS::Getters() {
|
||||||
|
}
|
||||||
|
|
||||||
|
GaS::~Getters() {
|
||||||
|
}
|
||||||
|
|
||||||
|
//@GaS.h
|
||||||
|
#ifndef GAS_H_
|
||||||
|
#define GAS_H_
|
||||||
|
|
||||||
|
class GaS {
|
||||||
|
public:
|
||||||
|
GaS();
|
||||||
|
virtual ~GaS();
|
||||||
|
bool //$isOk$//;
|
||||||
|
void methode2();
|
||||||
|
|
||||||
|
private:
|
||||||
|
int i;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//=
|
||||||
|
#ifndef GAS_H_
|
||||||
|
#define GAS_H_
|
||||||
|
|
||||||
|
class GaS {
|
||||||
|
public:
|
||||||
|
GaS();
|
||||||
|
virtual ~GaS();
|
||||||
|
bool isOk;
|
||||||
|
void methode2();
|
||||||
|
bool getIsOk() const
|
||||||
|
{
|
||||||
|
return isOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setIsOk(bool isOk)
|
||||||
|
{
|
||||||
|
this.isOk = isOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getI() const
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setI(int i)
|
||||||
|
{
|
||||||
|
this.i = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int i;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -26,11 +26,12 @@ public class RefactoringTestSuite extends TestSuite {
|
||||||
|
|
||||||
public static Test suite() throws Exception {
|
public static Test suite() throws Exception {
|
||||||
TestSuite suite = new RefactoringTestSuite();
|
TestSuite suite = new RefactoringTestSuite();
|
||||||
|
suite.addTest(UtilTestSuite.suite());
|
||||||
suite.addTest(RenameRegressionTests.suite());
|
suite.addTest(RenameRegressionTests.suite());
|
||||||
suite.addTest(ExtractFunctionTestSuite.suite());
|
suite.addTest(ExtractFunctionTestSuite.suite());
|
||||||
suite.addTest(RefactoringTester.suite("ExtractConstantRefactoringTests", "resources/refactoring/ExtractConstant.rts"));
|
suite.addTest(RefactoringTester.suite("ExtractConstantRefactoringTests", "resources/refactoring/ExtractConstant.rts"));
|
||||||
suite.addTest(RefactoringTester.suite("HideMethodRefactoringTests", "resources/refactoring/HideMethod.rts"));
|
suite.addTest(RefactoringTester.suite("HideMethodRefactoringTests", "resources/refactoring/HideMethod.rts"));
|
||||||
suite.addTest(UtilTestSuite.suite());
|
suite.addTest(RefactoringTester.suite("GettersAndSettersTests", "resources/refactoring/GenerateGettersAndSetters.rts"));
|
||||||
suite.addTest(RefactoringTester.suite("ImplementMethodRefactoringTests", "resources/refactoring/ImplementMethod.rts"));
|
suite.addTest(RefactoringTester.suite("ImplementMethodRefactoringTests", "resources/refactoring/ImplementMethod.rts"));
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,125 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Emanuel Graf & Leo Buettiker - initial API and implementation
|
||||||
|
* Thomas Corbat - implementation
|
||||||
|
******************************************************************************/
|
||||||
|
package org.eclipse.cdt.ui.tests.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.ltk.core.refactoring.Change;
|
||||||
|
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
|
import org.eclipse.cdt.ui.tests.refactoring.RefactoringTest;
|
||||||
|
import org.eclipse.cdt.ui.tests.refactoring.TestSourceFile;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.gettersandsetters.GenerateGettersAndSettersRefactoring;
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.gettersandsetters.GetterAndSetterContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Thomas Corbat
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GenerateGettersAndSettersTest extends RefactoringTest {
|
||||||
|
|
||||||
|
protected boolean fatalError;
|
||||||
|
private int warnings;
|
||||||
|
private ArrayList<String> selectedGetters;
|
||||||
|
private ArrayList<String> selectedSetters;
|
||||||
|
private GenerateGettersAndSettersRefactoring refactoring;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param name
|
||||||
|
* @param files
|
||||||
|
*/
|
||||||
|
public GenerateGettersAndSettersTest(String name, Vector<TestSourceFile> files) {
|
||||||
|
super(name, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runTest() throws Throwable {
|
||||||
|
IFile refFile = project.getFile(fileName);
|
||||||
|
refactoring = new GenerateGettersAndSettersRefactoring(refFile, selection, null);
|
||||||
|
RefactoringStatus initialConditions = refactoring.checkInitialConditions(NULL_PROGRESS_MONITOR);
|
||||||
|
|
||||||
|
|
||||||
|
if(fatalError){
|
||||||
|
assertConditionsFatalError(initialConditions);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
assertConditionsOk(initialConditions);
|
||||||
|
executeRefactoring();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void executeRefactoring() throws CoreException, Exception {
|
||||||
|
|
||||||
|
RefactoringStatus initialConditions = refactoring.checkInitialConditions(NULL_PROGRESS_MONITOR);
|
||||||
|
assertConditionsOk(initialConditions);
|
||||||
|
selectFields();
|
||||||
|
Change createChange = refactoring.createChange(NULL_PROGRESS_MONITOR);
|
||||||
|
RefactoringStatus finalConditions = refactoring.checkFinalConditions(NULL_PROGRESS_MONITOR);
|
||||||
|
if(warnings > 0){
|
||||||
|
assertConditionsWarning(finalConditions, warnings);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
assertConditionsOk(finalConditions);
|
||||||
|
}
|
||||||
|
|
||||||
|
createChange.perform(NULL_PROGRESS_MONITOR);
|
||||||
|
|
||||||
|
compareFiles(fileMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void selectFields() {
|
||||||
|
GetterAndSetterContext context = refactoring.getContext();
|
||||||
|
|
||||||
|
for(IASTSimpleDeclaration currentDecl : context.existingFields){
|
||||||
|
String name = currentDecl.getDeclarators()[0].getName().getRawSignature();
|
||||||
|
if(selectedGetters.contains(name) ){
|
||||||
|
selectedGetters.remove(name);
|
||||||
|
context.selectedFunctions.add(context.createGetterInserter(currentDecl));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(selectedSetters.contains(name) ){
|
||||||
|
selectedSetters.remove(name);
|
||||||
|
context.selectedFunctions.add(context.createSetterInserter(currentDecl));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configureRefactoring(Properties refactoringProperties) {
|
||||||
|
fatalError = Boolean.valueOf(refactoringProperties.getProperty("fatalerror", "false")).booleanValue(); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
warnings = new Integer(refactoringProperties.getProperty("warnings", "0")).intValue(); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
String getters = refactoringProperties.getProperty("getters", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
String setters = refactoringProperties.getProperty("setters", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
|
selectedGetters = new ArrayList<String>();
|
||||||
|
for(String getterName : getters.split(",")){ //$NON-NLS-1$
|
||||||
|
selectedGetters.add(getterName);
|
||||||
|
}
|
||||||
|
selectedSetters = new ArrayList<String>();
|
||||||
|
for(String setterName : setters.split(",")){ //$NON-NLS-1$
|
||||||
|
selectedSetters.add(setterName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -32,6 +32,7 @@ Export-Package: org.eclipse.cdt.internal.corext;x-internal:=true,
|
||||||
org.eclipse.cdt.internal.ui.refactoring.dialogs;x-internal:=true,
|
org.eclipse.cdt.internal.ui.refactoring.dialogs;x-internal:=true,
|
||||||
org.eclipse.cdt.internal.ui.refactoring.extractconstant;x-friends:="org.eclipse.cdt.ui.tests",
|
org.eclipse.cdt.internal.ui.refactoring.extractconstant;x-friends:="org.eclipse.cdt.ui.tests",
|
||||||
org.eclipse.cdt.internal.ui.refactoring.extractfunction;x-friends:="org.eclipse.cdt.ui.tests",
|
org.eclipse.cdt.internal.ui.refactoring.extractfunction;x-friends:="org.eclipse.cdt.ui.tests",
|
||||||
|
org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;x-friends:="org.eclipse.cdt.ui.tests",
|
||||||
org.eclipse.cdt.internal.ui.refactoring.hidemethod;x-friends:="org.eclipse.cdt.ui.tests",
|
org.eclipse.cdt.internal.ui.refactoring.hidemethod;x-friends:="org.eclipse.cdt.ui.tests",
|
||||||
org.eclipse.cdt.internal.ui.refactoring.implementmethod;x-friends:="org.eclipse.cdt.ui.tests",
|
org.eclipse.cdt.internal.ui.refactoring.implementmethod;x-friends:="org.eclipse.cdt.ui.tests",
|
||||||
org.eclipse.cdt.internal.ui.refactoring.rename;x-friends:="org.eclipse.cdt.ui.tests",
|
org.eclipse.cdt.internal.ui.refactoring.rename;x-friends:="org.eclipse.cdt.ui.tests",
|
||||||
|
|
|
@ -148,6 +148,8 @@ ActionDefinition.extractFunction.name= Extract Function - Refactoring
|
||||||
ActionDefinition.extractFunction.description= Extract a function for the selected list of expressions or statements
|
ActionDefinition.extractFunction.description= Extract a function for the selected list of expressions or statements
|
||||||
ActionDefinition.implementMethod.name= Implement Method - Source Generation
|
ActionDefinition.implementMethod.name= Implement Method - Source Generation
|
||||||
ActionDefinition.implementMethod.description= Implements a method for a selected method declaration
|
ActionDefinition.implementMethod.description= Implements a method for a selected method declaration
|
||||||
|
ActionDefinition.gettersAndSetters.name = Generate Getters and Setters...
|
||||||
|
ActionDefinition.gettersAndSetters.description = Generates getters and setters for a selected field
|
||||||
|
|
||||||
# Action Set
|
# Action Set
|
||||||
CodingActionSet.label= C/C++ Coding
|
CodingActionSet.label= C/C++ Coding
|
||||||
|
@ -159,6 +161,7 @@ Refactoring.extractConstant.label=Extr&act Constant...
|
||||||
Refactoring.extractFunction.label=Extract &Function... (work in progress)
|
Refactoring.extractFunction.label=Extract &Function... (work in progress)
|
||||||
Refactoring.hideMethod.label=Hide Member Function... (work in progress)
|
Refactoring.hideMethod.label=Hide Member Function... (work in progress)
|
||||||
Refactoring.implementMethod.label=Impl&ement Method... (work in progress)
|
Refactoring.implementMethod.label=Impl&ement Method... (work in progress)
|
||||||
|
Refactoring.gettersAndSetters.label=Generate Getters and Setters...
|
||||||
|
|
||||||
CEditor.name=C/C++ Editor
|
CEditor.name=C/C++ Editor
|
||||||
|
|
||||||
|
|
|
@ -1171,10 +1171,17 @@
|
||||||
id="org.eclipse.cdt.ui.actions.ExtractConstant"
|
id="org.eclipse.cdt.ui.actions.ExtractConstant"
|
||||||
retarget="true">
|
retarget="true">
|
||||||
</action>
|
</action>
|
||||||
|
<action
|
||||||
|
definitionId="org.eclipse.cdt.ui.refactor.getters.and.setters"
|
||||||
|
label="%Refactoring.gettersAndSetters.label"
|
||||||
|
menubarPath="org.eclipse.jdt.ui.refactoring.menu/codingGroup2"
|
||||||
|
id="org.eclipse.cdt.ui.actions.GettersAndSetters"
|
||||||
|
retarget="true">
|
||||||
|
</action>
|
||||||
<action
|
<action
|
||||||
definitionId="org.eclipse.cdt.ui.refactor.implement.method"
|
definitionId="org.eclipse.cdt.ui.refactor.implement.method"
|
||||||
label="%Refactoring.implementMethod.label"
|
label="%Refactoring.implementMethod.label"
|
||||||
menubarPath="org.eclipse.jdt.ui.refactoring.menu/codingGroup"
|
menubarPath="org.eclipse.jdt.ui.refactoring.menu/codingGroup2"
|
||||||
id="org.eclipse.cdt.ui.actions.ImplementMethod"
|
id="org.eclipse.cdt.ui.actions.ImplementMethod"
|
||||||
retarget="true">
|
retarget="true">
|
||||||
</action>
|
</action>
|
||||||
|
@ -1989,27 +1996,27 @@
|
||||||
name="%ActionDefinition.renameElement.name"
|
name="%ActionDefinition.renameElement.name"
|
||||||
description="%ActionDefinition.renameElement.description"
|
description="%ActionDefinition.renameElement.description"
|
||||||
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
||||||
id="org.eclipse.cdt.ui.edit.text.rename.element">
|
id="org.eclipse.cdt.ui.edit.text.rename.element"/>
|
||||||
</command>
|
|
||||||
<command
|
<command
|
||||||
name="%ActionDefinition.extractConstant.name"
|
name="%ActionDefinition.extractConstant.name"
|
||||||
description="%ActionDefinition.extractConstant.description"
|
description="%ActionDefinition.extractConstant.description"
|
||||||
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
||||||
id="org.eclipse.cdt.ui.refactor.extract.constant">
|
id="org.eclipse.cdt.ui.refactor.extract.constant"/>
|
||||||
</command>
|
|
||||||
<command
|
<command
|
||||||
name="%ActionDefinition.extractFunction.name"
|
name="%ActionDefinition.extractFunction.name"
|
||||||
description="%ActionDefinition.extractFunction.description"
|
description="%ActionDefinition.extractFunction.description"
|
||||||
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
||||||
id="org.eclipse.cdt.ui.refactor.extract.function">
|
id="org.eclipse.cdt.ui.refactor.extract.function"/>
|
||||||
</command>
|
|
||||||
<command
|
<command
|
||||||
name="%ActionDefinition.implementMethod.name"
|
name="%ActionDefinition.implementMethod.name"
|
||||||
description="%ActionDefinition.implementMethod.description"
|
description="%ActionDefinition.implementMethod.description"
|
||||||
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
||||||
id="org.eclipse.cdt.ui.refactor.implement.method">
|
id="org.eclipse.cdt.ui.refactor.implement.method"/>
|
||||||
</command>
|
<command
|
||||||
|
name="%ActionDefinition.gettersAndSetters.name"
|
||||||
|
description="%ActionDefinition.gettersAndSetters.description"
|
||||||
|
categoryId="org.eclipse.cdt.ui.category.refactoring"
|
||||||
|
id="org.eclipse.cdt.ui.refactor.getters.and.setters"/>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
id="pdomSearchPage"
|
id="pdomSearchPage"
|
||||||
|
|
|
@ -116,6 +116,12 @@ public interface ICEditorActionDefinitionIds extends ITextEditorActionDefinition
|
||||||
*/
|
*/
|
||||||
public static final String IMPLEMENT_METHOD= "org.eclipse.cdt.ui.refactor.implement.method"; //$NON-NLS-1$
|
public static final String IMPLEMENT_METHOD= "org.eclipse.cdt.ui.refactor.implement.method"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action definition ID of the refactor -> generate getters and setters
|
||||||
|
* (value <code>"org.eclipse.cdt.ui.refactor.getters.and.setters"</code>).
|
||||||
|
*/
|
||||||
|
public static final String GETTERS_AND_SETTERS= "org.eclipse.cdt.ui.refactor.getters.and.setters"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action definition ID of the refactor -> undo action
|
* Action definition ID of the refactor -> undo action
|
||||||
* (value <code>"org.eclipse.cdt.ui.edit.text.undo.action"</code>).
|
* (value <code>"org.eclipse.cdt.ui.edit.text.undo.action"</code>).
|
||||||
|
|
|
@ -278,7 +278,7 @@ public abstract class CRefactoring extends Refactoring {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean loadTranslationUnit(RefactoringStatus status,
|
protected boolean loadTranslationUnit(RefactoringStatus status,
|
||||||
IProgressMonitor mon) {
|
IProgressMonitor mon) {
|
||||||
SubMonitor subMonitor = SubMonitor.convert(mon, 10);
|
SubMonitor subMonitor = SubMonitor.convert(mon, 10);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTPointerOperator;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclSpecifier;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTBinaryExpression;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCompoundStatement;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTExpressionStatement;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFieldReference;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDeclarator;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDefinition;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTIdExpression;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTLiteralExpression;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTParameterDeclaration;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTReturnStatement;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclSpecifier;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.utils.NameHelper;
|
||||||
|
|
||||||
|
public class FunctionFactory {
|
||||||
|
|
||||||
|
public static IASTFunctionDefinition createGetter(String varName, IASTSimpleDeclaration fieldDeclaration) {
|
||||||
|
|
||||||
|
IASTFunctionDefinition getter = new CPPASTFunctionDefinition();
|
||||||
|
|
||||||
|
getter.setDeclSpecifier(fieldDeclaration.getDeclSpecifier());
|
||||||
|
|
||||||
|
CPPASTName getterName = new CPPASTName();
|
||||||
|
String varPartOfGetterName = NameHelper.makeFirstCharUpper(NameHelper.trimFieldName(varName));
|
||||||
|
getterName.setName("get".concat(varPartOfGetterName).toCharArray()); //$NON-NLS-1$
|
||||||
|
CPPASTFunctionDeclarator declarator = new CPPASTFunctionDeclarator();
|
||||||
|
declarator.setConst(true);
|
||||||
|
declarator.setName(getterName);
|
||||||
|
for(IASTPointerOperator pointer : fieldDeclaration.getDeclarators()[0].getPointerOperators()){
|
||||||
|
declarator.addPointerOperator(pointer);
|
||||||
|
}
|
||||||
|
getter.setDeclarator(declarator);
|
||||||
|
|
||||||
|
CPPASTCompoundStatement compound = new CPPASTCompoundStatement();
|
||||||
|
CPPASTReturnStatement returnStatement = new CPPASTReturnStatement();
|
||||||
|
CPPASTIdExpression idExpr = new CPPASTIdExpression();
|
||||||
|
CPPASTName returnVal = new CPPASTName();
|
||||||
|
returnVal.setName(varName.toCharArray());
|
||||||
|
idExpr.setName(returnVal);
|
||||||
|
returnStatement.setReturnValue(idExpr);
|
||||||
|
compound.addStatement(returnStatement);
|
||||||
|
|
||||||
|
getter.setBody(compound);
|
||||||
|
|
||||||
|
return getter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IASTFunctionDefinition createSetter(String varName, IASTSimpleDeclaration fieldDeclaration) {
|
||||||
|
|
||||||
|
IASTFunctionDefinition setter = new CPPASTFunctionDefinition();
|
||||||
|
|
||||||
|
CPPASTSimpleDeclSpecifier declSpecifier = new CPPASTSimpleDeclSpecifier();
|
||||||
|
declSpecifier.setType(IASTSimpleDeclSpecifier.t_void);
|
||||||
|
setter.setDeclSpecifier(declSpecifier);
|
||||||
|
|
||||||
|
CPPASTName setterName = new CPPASTName();
|
||||||
|
String varPartOfSetterName = NameHelper.makeFirstCharUpper(NameHelper.trimFieldName(varName));
|
||||||
|
setterName.setName("set".concat(varPartOfSetterName).toCharArray()); //$NON-NLS-1$
|
||||||
|
CPPASTFunctionDeclarator declarator = new CPPASTFunctionDeclarator();
|
||||||
|
declarator.setName(setterName);
|
||||||
|
setter.setDeclarator(declarator);
|
||||||
|
CPPASTParameterDeclaration parameterDeclaration = new CPPASTParameterDeclaration();
|
||||||
|
parameterDeclaration.setDeclarator(fieldDeclaration.getDeclarators()[0]);
|
||||||
|
parameterDeclaration.setDeclSpecifier(fieldDeclaration.getDeclSpecifier());
|
||||||
|
declarator.addParameterDeclaration(parameterDeclaration);
|
||||||
|
|
||||||
|
CPPASTCompoundStatement compound = new CPPASTCompoundStatement();
|
||||||
|
CPPASTExpressionStatement exprStmt = new CPPASTExpressionStatement();
|
||||||
|
CPPASTBinaryExpression binExpr = new CPPASTBinaryExpression();
|
||||||
|
CPPASTFieldReference fieldRef = new CPPASTFieldReference();
|
||||||
|
CPPASTLiteralExpression litExpr = new CPPASTLiteralExpression();
|
||||||
|
litExpr.setValue("this"); //$NON-NLS-1$
|
||||||
|
fieldRef.setFieldOwner(litExpr);
|
||||||
|
fieldRef.setFieldName(fieldDeclaration.getDeclarators()[0].getName());
|
||||||
|
binExpr.setOperand1(fieldRef);
|
||||||
|
binExpr.setOperator(IASTBinaryExpression.op_assign);
|
||||||
|
CPPASTIdExpression idExpr = new CPPASTIdExpression();
|
||||||
|
idExpr.setName(fieldDeclaration.getDeclarators()[0].getName());
|
||||||
|
binExpr.setOperand2(idExpr);
|
||||||
|
exprStmt.setExpression(binExpr);
|
||||||
|
compound.addStatement(exprStmt);
|
||||||
|
|
||||||
|
setter.setBody(compound);
|
||||||
|
|
||||||
|
return setter;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
|
import org.eclipse.jface.viewers.CheckStateChangedEvent;
|
||||||
|
import org.eclipse.jface.viewers.ICheckStateListener;
|
||||||
|
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.layout.FillLayout;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
|
||||||
|
|
||||||
|
public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
|
||||||
|
|
||||||
|
private GetterAndSetterContext context;
|
||||||
|
|
||||||
|
public GenerateGettersAndSettersInputPage(GetterAndSetterContext context) {
|
||||||
|
super(Messages.GettersAndSetters_Name);
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createControl(Composite parent) {
|
||||||
|
Composite comp = new Composite(parent, SWT.NONE );
|
||||||
|
comp.setLayout(new FillLayout());
|
||||||
|
createTree(comp);
|
||||||
|
|
||||||
|
setControl(comp);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createTree(Composite comp) {
|
||||||
|
final ContainerCheckedTreeViewer variableSelectionView = new ContainerCheckedTreeViewer(comp, SWT.BORDER);
|
||||||
|
for(IASTSimpleDeclaration currentField : context.existingFields){
|
||||||
|
if(currentField.getDeclarators().length == 0){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
variableSelectionView.setContentProvider(context);
|
||||||
|
variableSelectionView.setAutoExpandLevel(3);
|
||||||
|
variableSelectionView.setInput(""); //$NON-NLS-1$
|
||||||
|
|
||||||
|
variableSelectionView.addCheckStateListener(new ICheckStateListener(){
|
||||||
|
|
||||||
|
public void checkStateChanged(CheckStateChangedEvent event) {
|
||||||
|
ArrayList<GetterSetterInsertEditProvider> checkedFunctions = new ArrayList<GetterSetterInsertEditProvider>();
|
||||||
|
for(Object currentElement : variableSelectionView.getCheckedElements()){
|
||||||
|
if (currentElement instanceof GetterSetterInsertEditProvider) {
|
||||||
|
GetterSetterInsertEditProvider editProvider = (GetterSetterInsertEditProvider) currentElement;
|
||||||
|
checkedFunctions.add(editProvider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
context.selectedFunctions = checkedFunctions;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
|
import org.eclipse.core.runtime.SubMonitor;
|
||||||
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.AddDeclarationNodeToClassChange;
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.CRefactoring;
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.ModificationCollector;
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.utils.VisibilityEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Thomas Corbat
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GenerateGettersAndSettersRefactoring extends CRefactoring {
|
||||||
|
|
||||||
|
private static final String MEMBER_DECLARATION = "MEMBER_DECLARATION"; //$NON-NLS-1$
|
||||||
|
private final GetterAndSetterContext context = new GetterAndSetterContext();
|
||||||
|
|
||||||
|
public GenerateGettersAndSettersRefactoring(IFile file, ISelection selection, ICElement element) {
|
||||||
|
super(file, selection, element);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RefactoringStatus checkInitialConditions(IProgressMonitor pm) throws CoreException, OperationCanceledException {
|
||||||
|
SubMonitor sm = SubMonitor.convert(pm, 10);
|
||||||
|
|
||||||
|
super.checkInitialConditions(sm.newChild(6));
|
||||||
|
|
||||||
|
initRefactoring(pm);
|
||||||
|
|
||||||
|
return initStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initRefactoring(IProgressMonitor pm) {
|
||||||
|
loadTranslationUnit(initStatus, pm);
|
||||||
|
context.setUnit(unit);
|
||||||
|
findDeclarations();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void findDeclarations() {
|
||||||
|
|
||||||
|
unit.accept(new CPPASTVisitor() {
|
||||||
|
|
||||||
|
{
|
||||||
|
shouldVisitDeclarations = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int visit(IASTDeclaration declaration) {
|
||||||
|
if (declaration instanceof IASTSimpleDeclaration) {
|
||||||
|
IASTSimpleDeclaration fieldDeclaration = (IASTSimpleDeclaration) declaration;
|
||||||
|
ASTNodeProperty props = fieldDeclaration.getPropertyInParent();
|
||||||
|
if (props.getName().contains(MEMBER_DECLARATION)) {
|
||||||
|
final IASTDeclarator[] declarators = fieldDeclaration.getDeclarators();
|
||||||
|
if (declarators.length > 0) {
|
||||||
|
if ((declarators[0] instanceof IASTFunctionDeclarator)) {
|
||||||
|
context.existingFunctionDeclarations.add(fieldDeclaration);
|
||||||
|
} else {
|
||||||
|
if(isInSameFile(fieldDeclaration)){
|
||||||
|
context.existingFields.add(fieldDeclaration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (declaration instanceof IASTFunctionDefinition) {
|
||||||
|
IASTFunctionDefinition functionDefinition = (IASTFunctionDefinition) declaration;
|
||||||
|
ASTNodeProperty props = functionDefinition.getPropertyInParent();
|
||||||
|
if (props.getName().contains(MEMBER_DECLARATION)) {
|
||||||
|
context.existingFunctionDefinitions.add(functionDefinition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.visit(declaration);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void collectModifications(IProgressMonitor pm,ModificationCollector collector) throws CoreException, OperationCanceledException {
|
||||||
|
// egtodo
|
||||||
|
// ASTRewrite rewriter = collector.rewriterForTranslationUnit(unit);
|
||||||
|
|
||||||
|
for(GetterSetterInsertEditProvider currentProvider : context.selectedFunctions){
|
||||||
|
// egtodo
|
||||||
|
// TextEditGroup editGroup = new TextEditGroup(Messages.GenerateGettersAndSettersRefactoring_Insert + currentProvider.toString());
|
||||||
|
ICPPASTCompositeTypeSpecifier classDefinition = (ICPPASTCompositeTypeSpecifier) context.existingFunctionDeclarations.get(context.existingFunctionDeclarations.size()-1).getParent();
|
||||||
|
AddDeclarationNodeToClassChange.createChange(classDefinition, VisibilityEnum.v_public, currentProvider.getFunction(), false, collector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetterAndSetterContext getContext() {
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.jface.window.IShellProvider;
|
||||||
|
import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
|
||||||
|
import org.eclipse.ui.PlatformUI;
|
||||||
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.RefactoringRunner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Thomas Corbat
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GenerateGettersAndSettersRefactoringRunner extends RefactoringRunner {
|
||||||
|
|
||||||
|
public GenerateGettersAndSettersRefactoringRunner(IFile file, ISelection selection, ICElement elem, IShellProvider shellProvider) {
|
||||||
|
super(file, selection, elem, shellProvider);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor() instanceof ITextEditor) {
|
||||||
|
GenerateGettersAndSettersRefactoring refactoring = new GenerateGettersAndSettersRefactoring(file, selection, celement);
|
||||||
|
GenerateGettersAndSettersRefactoringWizard wizard = new GenerateGettersAndSettersRefactoringWizard(refactoring);
|
||||||
|
RefactoringWizardOpenOperation operator = new RefactoringWizardOpenOperation(wizard);
|
||||||
|
|
||||||
|
try {
|
||||||
|
operator.run(shellProvider.getShell(), refactoring.getName());
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
//initial condition checking got canceled by the user.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
|
||||||
|
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Thomas Corbat
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GenerateGettersAndSettersRefactoringWizard extends
|
||||||
|
RefactoringWizard {
|
||||||
|
|
||||||
|
private final GenerateGettersAndSettersRefactoring refactoring;
|
||||||
|
|
||||||
|
public GenerateGettersAndSettersRefactoringWizard(
|
||||||
|
GenerateGettersAndSettersRefactoring refactoring) {
|
||||||
|
super(refactoring, WIZARD_BASED_USER_INTERFACE);
|
||||||
|
this.refactoring = refactoring;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addUserInputPages() {
|
||||||
|
UserInputWizardPage page = new GenerateGettersAndSettersInputPage(refactoring.getContext());
|
||||||
|
addPage(page);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,167 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||||
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.utils.NameHelper;
|
||||||
|
|
||||||
|
public class GetterAndSetterContext implements ITreeContentProvider{
|
||||||
|
|
||||||
|
public ArrayList<IASTSimpleDeclaration> existingFields = new ArrayList<IASTSimpleDeclaration>();
|
||||||
|
public ArrayList<IASTFunctionDefinition> existingFunctionDefinitions = new ArrayList<IASTFunctionDefinition>();
|
||||||
|
public ArrayList<IASTSimpleDeclaration> existingFunctionDeclarations = new ArrayList<IASTSimpleDeclaration>();
|
||||||
|
public ArrayList<GetterSetterInsertEditProvider> selectedFunctions = new ArrayList<GetterSetterInsertEditProvider>();
|
||||||
|
private IASTTranslationUnit unit;
|
||||||
|
|
||||||
|
public Object[] getChildren(Object parentElement) {
|
||||||
|
|
||||||
|
ArrayList<GetterSetterInsertEditProvider> children = new ArrayList<GetterSetterInsertEditProvider>();
|
||||||
|
if (parentElement instanceof FieldWrapper) {
|
||||||
|
FieldWrapper wrapper = (FieldWrapper) parentElement;
|
||||||
|
|
||||||
|
if(!wrapper.getter.exists()){
|
||||||
|
children.add(createGetterInserter(wrapper.field));
|
||||||
|
}
|
||||||
|
if(!wrapper.setter.exists() && !wrapper.field.getDeclSpecifier().isConst()){
|
||||||
|
|
||||||
|
children.add(createSetterInserter(wrapper.field));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return children.toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetterSetterInsertEditProvider createGetterInserter(IASTSimpleDeclaration simpleDeclaration) {
|
||||||
|
String varName = simpleDeclaration.getDeclarators()[0].getName().toString();
|
||||||
|
IASTFunctionDefinition getter = FunctionFactory.createGetter(varName, simpleDeclaration);
|
||||||
|
getter.setParent(unit);
|
||||||
|
return new GetterSetterInsertEditProvider(getter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetterSetterInsertEditProvider createSetterInserter(IASTSimpleDeclaration simpleDeclaration) {
|
||||||
|
String varName = simpleDeclaration.getDeclarators()[0].getName().toString();
|
||||||
|
IASTFunctionDefinition setter = FunctionFactory.createSetter(varName, simpleDeclaration);
|
||||||
|
setter.setParent(unit);
|
||||||
|
return new GetterSetterInsertEditProvider(setter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getParent(Object element) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasChildren(Object element) {
|
||||||
|
if (element instanceof FieldWrapper) {
|
||||||
|
FieldWrapper wrapper = (FieldWrapper) element;
|
||||||
|
|
||||||
|
return wrapper.missingGetterOrSetter();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object[] getElements(Object inputElement) {
|
||||||
|
|
||||||
|
return getWrappedFields().toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
}
|
||||||
|
|
||||||
|
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUnit(IASTTranslationUnit unit) {
|
||||||
|
this.unit = unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<FieldWrapper> getWrappedFields() {
|
||||||
|
ArrayList<FieldWrapper> wrappedFields = new ArrayList<FieldWrapper>();
|
||||||
|
for(IASTSimpleDeclaration currentField : existingFields){
|
||||||
|
FieldWrapper wrapper = new FieldWrapper();
|
||||||
|
wrapper.field = currentField;
|
||||||
|
wrapper.getter = getGetterForField(currentField);
|
||||||
|
wrapper.setter = getSetterForField(currentField);
|
||||||
|
if(wrapper.missingGetterOrSetter()){
|
||||||
|
wrappedFields.add(wrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return wrappedFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
private FunctionWrapper getGetterForField(IASTSimpleDeclaration currentField) {
|
||||||
|
FunctionWrapper wrapper = new FunctionWrapper();
|
||||||
|
String trimmedName = NameHelper.trimFieldName(currentField.getDeclarators()[0].getName().toString());
|
||||||
|
String getterName = "get" + NameHelper.makeFirstCharUpper(trimmedName); //$NON-NLS-1$
|
||||||
|
|
||||||
|
setFunctionToWrapper(wrapper, getterName);
|
||||||
|
|
||||||
|
return wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
private FunctionWrapper getSetterForField(IASTSimpleDeclaration currentField) {
|
||||||
|
FunctionWrapper wrapper = new FunctionWrapper();
|
||||||
|
String trimmedName = NameHelper.trimFieldName(currentField.getDeclarators()[0].getName().toString());
|
||||||
|
String setterName = "set" + NameHelper.makeFirstCharUpper(trimmedName); //$NON-NLS-1$
|
||||||
|
|
||||||
|
setFunctionToWrapper(wrapper, setterName);
|
||||||
|
|
||||||
|
return wrapper;
|
||||||
|
}
|
||||||
|
private void setFunctionToWrapper(FunctionWrapper wrapper, String getterName) {
|
||||||
|
for(IASTFunctionDefinition currentDefinition : existingFunctionDefinitions){
|
||||||
|
if(currentDefinition.getDeclarator().getName().toString().endsWith(getterName)){
|
||||||
|
wrapper.functionDefinition = currentDefinition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(IASTSimpleDeclaration currentDeclaration : existingFunctionDeclarations){
|
||||||
|
if(currentDeclaration.getDeclarators()[0].getName().toString().endsWith(getterName)){
|
||||||
|
wrapper.functionDeclaration = currentDeclaration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected class FieldWrapper{
|
||||||
|
protected IASTSimpleDeclaration field;
|
||||||
|
protected FunctionWrapper getter;
|
||||||
|
protected FunctionWrapper setter;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return field.getDeclarators()[0].getName().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean missingGetterOrSetter() {
|
||||||
|
return !getter.exists() || !setter.exists();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected class FunctionWrapper{
|
||||||
|
protected IASTSimpleDeclaration functionDeclaration;
|
||||||
|
protected IASTFunctionDefinition functionDefinition;
|
||||||
|
|
||||||
|
public boolean exists() {
|
||||||
|
|
||||||
|
return functionDeclaration != null || functionDefinition != null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||||
|
|
||||||
|
|
||||||
|
public class GetterSetterInsertEditProvider {
|
||||||
|
|
||||||
|
private IASTFunctionDefinition function;
|
||||||
|
|
||||||
|
public GetterSetterInsertEditProvider(IASTFunctionDefinition function){
|
||||||
|
this.function = function;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return function.getDeclarator().getName().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IASTFunctionDefinition getFunction() {
|
||||||
|
return function;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import org.eclipse.osgi.util.NLS;
|
||||||
|
|
||||||
|
public final class Messages extends NLS {
|
||||||
|
|
||||||
|
private static final String BUNDLE_NAME = "org.eclipse.cdt.hsrrefactoring.generategettersandsetters.messages";//$NON-NLS-1$
|
||||||
|
|
||||||
|
private Messages() {
|
||||||
|
// Do not instantiate
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String GenerateGettersAndSettersRefactoring_Insert;
|
||||||
|
public static String GettersAndSetters_Name;
|
||||||
|
|
||||||
|
static {
|
||||||
|
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
GettersAndSetters_Name=Generate Getters and Setters
|
||||||
|
GenerateGettersAndSettersRefactoring_Insert=Insert
|
|
@ -15,7 +15,11 @@ import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName;
|
||||||
|
@ -64,4 +68,67 @@ public class NameHelper {
|
||||||
qname.addName(declaratorName);
|
qname.addName(declaratorName);
|
||||||
return qname;
|
return qname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static IASTFunctionDefinition getAncestorFunctionDefinition(IASTName startNode) {
|
||||||
|
return (IASTFunctionDefinition) getAncestorDefinition(startNode, IASTFunctionDefinition.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IASTSimpleDeclaration getAncestorFunctionDeclaration(IASTName startNode) {
|
||||||
|
return (IASTSimpleDeclaration) getAncestorDefinition(startNode, IASTSimpleDeclaration.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ICPPASTCompositeTypeSpecifier getAncestorClassDefinition(IASTName startNode) {
|
||||||
|
return (ICPPASTCompositeTypeSpecifier) getAncestorDefinition(startNode, ICPPASTCompositeTypeSpecifier.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static IASTNode getAncestorDefinition(IASTName startNode, Class<? extends IASTNode> type) {
|
||||||
|
|
||||||
|
IASTNode node = startNode;
|
||||||
|
|
||||||
|
while(node != null ){
|
||||||
|
if(type.isInstance(node)) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
node = node.getParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String trimFieldName(String fieldName){
|
||||||
|
char[] letters = fieldName.toCharArray();
|
||||||
|
int start = 0;
|
||||||
|
int end = letters.length - 1;
|
||||||
|
try{
|
||||||
|
while(!Character.isLetter(letters[start]) && start < end) {
|
||||||
|
++start;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Character.isLowerCase(letters[start])){
|
||||||
|
if(!Character.isLetter(letters[start + 1])){
|
||||||
|
start+= 2;
|
||||||
|
}
|
||||||
|
else if (Character.isUpperCase(letters[start + 1])){
|
||||||
|
start += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while((!Character.isLetter(letters[end]) && !Character.isDigit(letters[end])) && start < end) {
|
||||||
|
--end;
|
||||||
|
}
|
||||||
|
}catch(IndexOutOfBoundsException e){}
|
||||||
|
|
||||||
|
return new String(letters, start, end - start + 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String makeFirstCharUpper(String name) {
|
||||||
|
if(Character.isLowerCase(name.charAt(0))){
|
||||||
|
name = Character.toUpperCase(name.charAt(0)) + name.substring(1);
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,6 +260,12 @@ public class CdtActionConstants {
|
||||||
*/
|
*/
|
||||||
public static final String IMPLEMENT_METHOD= "org.eclipse.cdt.ui.actions.ImplementMethod"; //$NON-NLS-1$
|
public static final String IMPLEMENT_METHOD= "org.eclipse.cdt.ui.actions.ImplementMethod"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refactor menu: name of standard Generate Getters and Setters global action
|
||||||
|
* (value <code>"org.eclipse.cdt.ui.actions.GettersAndSetters"</code>).
|
||||||
|
*/
|
||||||
|
public static final String GETTERS_AND_SETTERS= "org.eclipse.cdt.ui.actions.GettersAndSetters"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Refactor menu: name of standard Introduce Parameter global action
|
* Refactor menu: name of standard Introduce Parameter global action
|
||||||
* (value <code>"org.eclipse.cdt.ui.actions.IntroduceParameter"</code>).
|
* (value <code>"org.eclipse.cdt.ui.actions.IntroduceParameter"</code>).
|
||||||
|
|
|
@ -116,6 +116,7 @@ public class CRefactoringActionGroup extends ActionGroup implements ISelectionCh
|
||||||
private RefactoringAction fExtractFunctionAction;
|
private RefactoringAction fExtractFunctionAction;
|
||||||
private RefactoringAction fHideMethodAction;
|
private RefactoringAction fHideMethodAction;
|
||||||
private RefactoringAction fImplementMethodAction;
|
private RefactoringAction fImplementMethodAction;
|
||||||
|
private RefactoringAction fGettersAndSettersAction;
|
||||||
private IWorkbenchSite fSite;
|
private IWorkbenchSite fSite;
|
||||||
private List<RefactoringAction> fAllActions= new ArrayList<RefactoringAction>();
|
private List<RefactoringAction> fAllActions= new ArrayList<RefactoringAction>();
|
||||||
|
|
||||||
|
@ -164,6 +165,10 @@ public class CRefactoringActionGroup extends ActionGroup implements ISelectionCh
|
||||||
fImplementMethodAction = new ImplementMethodAction();
|
fImplementMethodAction = new ImplementMethodAction();
|
||||||
fImplementMethodAction.setActionDefinitionId(ICEditorActionDefinitionIds.IMPLEMENT_METHOD);
|
fImplementMethodAction.setActionDefinitionId(ICEditorActionDefinitionIds.IMPLEMENT_METHOD);
|
||||||
fAllActions.add(fImplementMethodAction);
|
fAllActions.add(fImplementMethodAction);
|
||||||
|
|
||||||
|
fGettersAndSettersAction = new GettersAndSettersAction();
|
||||||
|
fGettersAndSettersAction.setActionDefinitionId(ICEditorActionDefinitionIds.GETTERS_AND_SETTERS);
|
||||||
|
fAllActions.add(fGettersAndSettersAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWorkbenchSite(IWorkbenchSite site) {
|
public void setWorkbenchSite(IWorkbenchSite site) {
|
||||||
|
@ -202,6 +207,7 @@ public class CRefactoringActionGroup extends ActionGroup implements ISelectionCh
|
||||||
setActionHandler(actionBar, CdtActionConstants.EXTRACT_METHOD, fExtractFunctionAction);
|
setActionHandler(actionBar, CdtActionConstants.EXTRACT_METHOD, fExtractFunctionAction);
|
||||||
setActionHandler(actionBar, CdtActionConstants.HIDE_METHOD, fHideMethodAction);
|
setActionHandler(actionBar, CdtActionConstants.HIDE_METHOD, fHideMethodAction);
|
||||||
setActionHandler(actionBar, CdtActionConstants.IMPLEMENT_METHOD, fImplementMethodAction);
|
setActionHandler(actionBar, CdtActionConstants.IMPLEMENT_METHOD, fImplementMethodAction);
|
||||||
|
setActionHandler(actionBar, CdtActionConstants.GETTERS_AND_SETTERS, fGettersAndSettersAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setActionHandler(IActionBars actionBar, String id, RefactoringAction action) {
|
private void setActionHandler(IActionBars actionBar, String id, RefactoringAction action) {
|
||||||
|
@ -232,12 +238,12 @@ public class CRefactoringActionGroup extends ActionGroup implements ISelectionCh
|
||||||
addAction(refactorSubmenu, fExtractConstantAction);
|
addAction(refactorSubmenu, fExtractConstantAction);
|
||||||
addAction(refactorSubmenu, fExtractFunctionAction);
|
addAction(refactorSubmenu, fExtractFunctionAction);
|
||||||
addAction(refactorSubmenu, fHideMethodAction);
|
addAction(refactorSubmenu, fHideMethodAction);
|
||||||
addAction(refactorSubmenu, fImplementMethodAction);
|
|
||||||
|
|
||||||
refactorSubmenu.add(new Separator(GROUP_REORG2));
|
refactorSubmenu.add(new Separator(GROUP_REORG2));
|
||||||
refactorSubmenu.add(new Separator(GROUP_TYPE));
|
refactorSubmenu.add(new Separator(GROUP_TYPE));
|
||||||
refactorSubmenu.add(new Separator(GROUP_TYPE2));
|
refactorSubmenu.add(new Separator(GROUP_TYPE2));
|
||||||
refactorSubmenu.add(new Separator(GROUP_CODING2));
|
refactorSubmenu.add(new Separator(GROUP_CODING2));
|
||||||
|
addAction(refactorSubmenu, fImplementMethodAction);
|
||||||
|
addAction(refactorSubmenu, fGettersAndSettersAction);
|
||||||
refactorSubmenu.add(new Separator(GROUP_TYPE3));
|
refactorSubmenu.add(new Separator(GROUP_TYPE3));
|
||||||
|
|
||||||
menu.appendToGroup(fGroupName, refactorSubmenu);
|
menu.appendToGroup(fGroupName, refactorSubmenu);
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
|
||||||
|
* Rapperswil, University of applied sciences and others
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Institute for Software - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.ui.refactoring.actions;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.jface.text.ITextSelection;
|
||||||
|
import org.eclipse.jface.window.IShellProvider;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.IField;
|
||||||
|
import org.eclipse.cdt.core.model.ISourceReference;
|
||||||
|
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.gettersandsetters.GenerateGettersAndSettersRefactoringRunner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Launches a getter and setter source code generation.
|
||||||
|
*/
|
||||||
|
public class GettersAndSettersAction extends RefactoringAction {
|
||||||
|
|
||||||
|
public GettersAndSettersAction() {
|
||||||
|
super(Messages.GettersAndSetters_label);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(IShellProvider shellProvider, ICElement elem) {
|
||||||
|
new GenerateGettersAndSettersRefactoringRunner(null, null, elem, shellProvider).run();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(IShellProvider shellProvider, IWorkingCopy wc, ITextSelection s) {
|
||||||
|
IResource res= wc.getResource();
|
||||||
|
if (res instanceof IFile) {
|
||||||
|
new GenerateGettersAndSettersRefactoringRunner((IFile) res, s, null, shellProvider).run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateSelection(ICElement elem) {
|
||||||
|
super.updateSelection(elem);
|
||||||
|
if (elem instanceof IField == false
|
||||||
|
|| elem instanceof ISourceReference == false
|
||||||
|
|| ((ISourceReference) elem).getTranslationUnit().getResource() instanceof IFile == false) {
|
||||||
|
setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,6 +20,7 @@ public class Messages extends NLS {
|
||||||
public static String ExtractFunctionAction_label;
|
public static String ExtractFunctionAction_label;
|
||||||
public static String HideMethodAction_label;
|
public static String HideMethodAction_label;
|
||||||
public static String ImplementMethodAction_label;
|
public static String ImplementMethodAction_label;
|
||||||
|
public static String GettersAndSetters_label;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
// initialize resource bundle
|
// initialize resource bundle
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
CRefactoringActionGroup_menu=Refactor
|
CRefactoringActionGroup_menu=Refactor
|
||||||
CRenameAction_label=Rename...
|
CRenameAction_label=Rename...
|
||||||
ExtractConstantAction_label=Extract Constant...
|
ExtractConstantAction_label=Extract Constant...
|
||||||
|
GettersAndSetters_label=Generate Getters and Setters...
|
||||||
ImplementMethodAction_label=Implement Method... (work in progress)
|
ImplementMethodAction_label=Implement Method... (work in progress)
|
||||||
HideMethodAction_label=Hide Member Function... (work in progress)
|
HideMethodAction_label=Hide Member Function... (work in progress)
|
||||||
ExtractFunctionAction_label=Extract Function... (work in progress)
|
ExtractFunctionAction_label=Extract Function... (work in progress)
|
||||||
|
|
Loading…
Add table
Reference in a new issue