From 8d07be5f205f0bdf44bc76f9093bc32d6d2afc8a Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 13 Mar 2008 08:27:11 +0000 Subject: [PATCH] Default name for extract constant factory, by Emanuel Graf, bug 222379. --- .../refactoring/dialogs/ExtractInputPage.java | 2 +- .../dialogs/NameAndVisibilityComposite.java | 16 +++++-------- .../ExtractConstantRefactoring.java | 24 +++++++++++++++++++ 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/dialogs/ExtractInputPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/dialogs/ExtractInputPage.java index a3e3e0bcf06..49f03141d8e 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/dialogs/ExtractInputPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/dialogs/ExtractInputPage.java @@ -47,7 +47,7 @@ public abstract class ExtractInputPage extends UserInputWizardPage { } public void createControl(Composite parent) { - control = new NameAndVisibilityComposite(parent, label); + control = new NameAndVisibilityComposite(parent, label, info.getName()); setTitle(getName()); setPageComplete(false); control.getConstantNameText().addKeyListener(new KeyAdapter(){ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/dialogs/NameAndVisibilityComposite.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/dialogs/NameAndVisibilityComposite.java index ef1a191becb..3bc33434e61 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/dialogs/NameAndVisibilityComposite.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/dialogs/NameAndVisibilityComposite.java @@ -11,10 +11,6 @@ *******************************************************************************/ package org.eclipse.cdt.internal.ui.refactoring.dialogs; -/** - * @author Thomas Corbat - * - */ import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; @@ -37,11 +33,11 @@ public class NameAndVisibilityComposite extends Composite { private final String labelName; private final VisibilitySelectionPanel visibilityPanel; - public NameAndVisibilityComposite(Composite parent, String labelName) { - this(parent, labelName, VisibilityEnum.v_public); + public NameAndVisibilityComposite(Composite parent, String labelName, String defaultName) { + this(parent, labelName, VisibilityEnum.v_public, defaultName); } - public NameAndVisibilityComposite(Composite parent, String labelName, VisibilityEnum defaultVisibility){ + public NameAndVisibilityComposite(Composite parent, String labelName, VisibilityEnum defaultVisibility, String defaultName){ super(parent, SWT.NONE); @@ -49,7 +45,7 @@ public class NameAndVisibilityComposite extends Composite { setLayout(new GridLayout()); - createNewMethodNameComposite(this); + createNewMethodNameComposite(this, defaultName); visibilityPanel = new VisibilitySelectionPanel(this, defaultVisibility,SWT.NONE); } @@ -67,13 +63,13 @@ public class NameAndVisibilityComposite extends Composite { } - private void createNewMethodNameComposite(Composite control) { + private void createNewMethodNameComposite(Composite control, String defaultName) { Composite methodNameComposite = new Composite(control, SWT.NONE); FillLayout compositeLayout = new FillLayout(SWT.HORIZONTAL); GridData gridData = new GridData(SWT.FILL,SWT.BEGINNING, true, false); gridData.horizontalAlignment = GridData.FILL; methodNameComposite.setLayoutData(gridData); methodNameComposite.setLayout(compositeLayout); - constantName = new LabeledTextField(methodNameComposite, labelName); + constantName = new LabeledTextField(methodNameComposite, labelName, defaultName); } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractconstant/ExtractConstantRefactoring.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractconstant/ExtractConstantRefactoring.java index 89990cf69da..99848851773 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractconstant/ExtractConstantRefactoring.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/extractconstant/ExtractConstantRefactoring.java @@ -133,10 +133,34 @@ public class ExtractConstantRefactoring extends CRefactoring { findAllNodesForReplacement(literalExpressionVector); info.addNamesToUsedNames(findAllDeclaredNames()); + info.setName(getDefaultName(target)); sm.done(); return initStatus; } + private String getDefaultName(IASTLiteralExpression literal) { + String nameString = literal.toString(); + switch (literal.getKind()) { + case IASTLiteralExpression.lk_char_constant: + case ICPPASTLiteralExpression.lk_string_literal: + int beginIndex = 1; + if(nameString.startsWith("L")) { //$NON-NLS-1$ + beginIndex = 2; + } + final int len= nameString.length(); + if (beginIndex < len && len > 0) { + nameString = nameString.substring(beginIndex, len-1); + } + break; + + default: + break; + } + + nameString = nameString.replaceAll("[\\W]", "_"); //$NON-NLS-1$//$NON-NLS-2$ + return '_' + nameString; + } + private Vector findAllDeclaredNames() { Vectornames = new Vector(); IASTFunctionDefinition funcDef = getFunctionDefinition();