mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Correct field access for getters and setters by Emanuel Graf, bug 232290.
This commit is contained in:
parent
c7e0b78046
commit
401d6e1845
6 changed files with 156 additions and 31 deletions
|
@ -54,7 +54,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSystemId(int systemId){
|
void setSystemId(int systemId){
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSystemId(int systemId){
|
void setSystemId(int systemId){
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ namespace Personal {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSystemId(int systemId){
|
void setSystemId(int systemId){
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -221,7 +221,7 @@ namespace Personal {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSystemId(int systemId){
|
void setSystemId(int systemId){
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -286,7 +286,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSystemId(int systemId){
|
void setSystemId(int systemId){
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -329,7 +329,7 @@ public:
|
||||||
int GetUniqueId();
|
int GetUniqueId();
|
||||||
void setName(char *name)
|
void setName(char *name)
|
||||||
{
|
{
|
||||||
this.name = name;
|
this->name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getSystemId(){
|
int getSystemId(){
|
||||||
|
@ -337,7 +337,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSystemId(int systemId){
|
void setSystemId(int systemId){
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -402,7 +402,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSystemId(int systemId){
|
void setSystemId(int systemId){
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -450,7 +450,7 @@ public:
|
||||||
|
|
||||||
void setName(char *name)
|
void setName(char *name)
|
||||||
{
|
{
|
||||||
this.name = name;
|
this->name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getSystemId(){
|
int getSystemId(){
|
||||||
|
@ -458,7 +458,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSystemId(int systemId){
|
void setSystemId(int systemId){
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -550,7 +550,7 @@ public:
|
||||||
|
|
||||||
void setSystemId(int systemId)
|
void setSystemId(int systemId)
|
||||||
{
|
{
|
||||||
this.systemId = systemId;
|
this->systemId = systemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *getName() const
|
char *getName() const
|
||||||
|
@ -560,7 +560,7 @@ public:
|
||||||
|
|
||||||
void setName(char *name)
|
void setName(char *name)
|
||||||
{
|
{
|
||||||
this.name = name;
|
this->name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
Person(int socSecNo); // contructor
|
Person(int socSecNo); // contructor
|
||||||
|
@ -631,7 +631,7 @@ public:
|
||||||
|
|
||||||
void setIsOk(bool isOk)
|
void setIsOk(bool isOk)
|
||||||
{
|
{
|
||||||
this.isOk = isOk;
|
this->isOk = isOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getI() const
|
int getI() const
|
||||||
|
@ -641,7 +641,7 @@ public:
|
||||||
|
|
||||||
void setI(int i)
|
void setI(int i)
|
||||||
{
|
{
|
||||||
this.i = i;
|
this->i = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -650,3 +650,95 @@ private:
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//!Generate Getters and Setters no Methods
|
||||||
|
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
|
||||||
|
//@.config
|
||||||
|
filename=C.h
|
||||||
|
getters=id
|
||||||
|
setters=id
|
||||||
|
//@C.h
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
private:
|
||||||
|
int //$id$//;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
|
||||||
|
//=
|
||||||
|
#ifndef C_H_
|
||||||
|
#define C_H_
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
private:
|
||||||
|
int id;
|
||||||
|
public:
|
||||||
|
int getId() const
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setId(int id)
|
||||||
|
{
|
||||||
|
this->id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /*C_H_*/
|
||||||
|
|
||||||
|
//!Generate Getters and Setters no Methods
|
||||||
|
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
|
||||||
|
//@.config
|
||||||
|
filename=C.h
|
||||||
|
getters=i
|
||||||
|
setters=i
|
||||||
|
//@C.h
|
||||||
|
/*
|
||||||
|
* test.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TEST_H_
|
||||||
|
#define TEST_H_
|
||||||
|
|
||||||
|
//comment1
|
||||||
|
class test
|
||||||
|
{
|
||||||
|
int //$i$//; //comment2
|
||||||
|
char* b;
|
||||||
|
//comment3
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* TEST_H_ */
|
||||||
|
|
||||||
|
//=
|
||||||
|
/*
|
||||||
|
* test.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TEST_H_
|
||||||
|
#define TEST_H_
|
||||||
|
|
||||||
|
//comment1
|
||||||
|
class test
|
||||||
|
{
|
||||||
|
int i; //comment2
|
||||||
|
char* b;
|
||||||
|
public:
|
||||||
|
int getI() const
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setI(int i)
|
||||||
|
{
|
||||||
|
this->i = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
//comment3
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* TEST_H_ */
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,7 @@ public class FunctionFactory {
|
||||||
litExpr.setValue("this"); //$NON-NLS-1$
|
litExpr.setValue("this"); //$NON-NLS-1$
|
||||||
fieldRef.setFieldOwner(litExpr);
|
fieldRef.setFieldOwner(litExpr);
|
||||||
fieldRef.setFieldName(fieldDeclaration.getDeclarators()[0].getName());
|
fieldRef.setFieldName(fieldDeclaration.getDeclarators()[0].getName());
|
||||||
|
fieldRef.setIsPointerDereference(true);
|
||||||
binExpr.setOperand1(fieldRef);
|
binExpr.setOperand1(fieldRef);
|
||||||
binExpr.setOperator(IASTBinaryExpression.op_assign);
|
binExpr.setOperator(IASTBinaryExpression.op_assign);
|
||||||
CPPASTIdExpression idExpr = new CPPASTIdExpression();
|
CPPASTIdExpression idExpr = new CPPASTIdExpression();
|
||||||
|
|
|
@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
|
||||||
import org.eclipse.jface.viewers.CheckStateChangedEvent;
|
import org.eclipse.jface.viewers.CheckStateChangedEvent;
|
||||||
import org.eclipse.jface.viewers.ICheckStateListener;
|
import org.eclipse.jface.viewers.ICheckStateListener;
|
||||||
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
|
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
|
||||||
|
@ -22,6 +21,10 @@ import org.eclipse.swt.layout.FillLayout;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
|
import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.gettersandsetters.GetterAndSetterContext.FieldWrapper;
|
||||||
|
|
||||||
public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
|
public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
|
||||||
|
|
||||||
private GetterAndSetterContext context;
|
private GetterAndSetterContext context;
|
||||||
|
@ -50,6 +53,23 @@ public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
|
||||||
variableSelectionView.setAutoExpandLevel(3);
|
variableSelectionView.setAutoExpandLevel(3);
|
||||||
variableSelectionView.setInput(""); //$NON-NLS-1$
|
variableSelectionView.setInput(""); //$NON-NLS-1$
|
||||||
|
|
||||||
|
for(Object obj : variableSelectionView.getVisibleExpandedElements()) {
|
||||||
|
System.out.println();
|
||||||
|
if (obj instanceof FieldWrapper){
|
||||||
|
if(obj.toString().contains(context.selectedName.getRawSignature())){
|
||||||
|
variableSelectionView.setSubtreeChecked(obj, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
|
||||||
variableSelectionView.addCheckStateListener(new ICheckStateListener(){
|
variableSelectionView.addCheckStateListener(new ICheckStateListener(){
|
||||||
|
|
||||||
public void checkStateChanged(CheckStateChangedEvent event) {
|
public void checkStateChanged(CheckStateChangedEvent event) {
|
||||||
|
@ -61,12 +81,8 @@ public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
context.selectedFunctions = checkedFunctions;
|
context.selectedFunctions = checkedFunctions;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,15 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.OperationCanceledException;
|
import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
import org.eclipse.core.runtime.SubMonitor;
|
import org.eclipse.core.runtime.SubMonitor;
|
||||||
|
import org.eclipse.jface.text.Region;
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
||||||
|
|
||||||
|
@ -24,6 +28,8 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator;
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||||
|
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.IASTSimpleDeclaration;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
|
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
|
||||||
|
@ -62,8 +68,16 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring {
|
||||||
private void initRefactoring(IProgressMonitor pm) {
|
private void initRefactoring(IProgressMonitor pm) {
|
||||||
loadTranslationUnit(initStatus, pm);
|
loadTranslationUnit(initStatus, pm);
|
||||||
context.setUnit(unit);
|
context.setUnit(unit);
|
||||||
|
context.selectedName = getSelectedName();
|
||||||
findDeclarations();
|
findDeclarations();
|
||||||
|
}
|
||||||
|
|
||||||
|
private IASTName getSelectedName() {
|
||||||
|
Vector<IASTName> names = findAllMarkedNames();
|
||||||
|
if (names.size() < 1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return names.lastElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void findDeclarations() {
|
protected void findDeclarations() {
|
||||||
|
@ -106,19 +120,20 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void collectModifications(IProgressMonitor pm,ModificationCollector collector) throws CoreException, OperationCanceledException {
|
protected void collectModifications(IProgressMonitor pm,ModificationCollector collector) throws CoreException, OperationCanceledException {
|
||||||
// egtodo
|
ArrayList<IASTNode> getterAndSetters = new ArrayList<IASTNode>();
|
||||||
// ASTRewrite rewriter = collector.rewriterForTranslationUnit(unit);
|
|
||||||
|
|
||||||
for(GetterSetterInsertEditProvider currentProvider : context.selectedFunctions){
|
for(GetterSetterInsertEditProvider currentProvider : context.selectedFunctions){
|
||||||
// egtodo
|
getterAndSetters.add(currentProvider.getFunction());
|
||||||
// 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);
|
|
||||||
}
|
}
|
||||||
|
ICPPASTCompositeTypeSpecifier classDefinition = (ICPPASTCompositeTypeSpecifier) context.existingFields.get(context.existingFields.size()-1).getParent();
|
||||||
|
|
||||||
|
AddDeclarationNodeToClassChange.createChange(classDefinition, VisibilityEnum.v_public, getterAndSetters, false, collector);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GetterAndSetterContext getContext() {
|
public GetterAndSetterContext getContext() {
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Region getRegion() {
|
||||||
|
return region;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,7 @@ import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
|
||||||
* @author Thomas Corbat
|
* @author Thomas Corbat
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class GenerateGettersAndSettersRefactoringWizard extends
|
public class GenerateGettersAndSettersRefactoringWizard extends RefactoringWizard {
|
||||||
RefactoringWizard {
|
|
||||||
|
|
||||||
private final GenerateGettersAndSettersRefactoring refactoring;
|
private final GenerateGettersAndSettersRefactoring refactoring;
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||||
import org.eclipse.jface.viewers.Viewer;
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
|
|
||||||
|
@ -29,6 +30,7 @@ public class GetterAndSetterContext implements ITreeContentProvider{
|
||||||
public ArrayList<IASTSimpleDeclaration> existingFunctionDeclarations = new ArrayList<IASTSimpleDeclaration>();
|
public ArrayList<IASTSimpleDeclaration> existingFunctionDeclarations = new ArrayList<IASTSimpleDeclaration>();
|
||||||
public ArrayList<GetterSetterInsertEditProvider> selectedFunctions = new ArrayList<GetterSetterInsertEditProvider>();
|
public ArrayList<GetterSetterInsertEditProvider> selectedFunctions = new ArrayList<GetterSetterInsertEditProvider>();
|
||||||
private IASTTranslationUnit unit;
|
private IASTTranslationUnit unit;
|
||||||
|
public IASTName selectedName;
|
||||||
|
|
||||||
public Object[] getChildren(Object parentElement) {
|
public Object[] getChildren(Object parentElement) {
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue