Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 5331 Details for
Bug 39188
Feature Request: Constructor Wizard
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
proposed fix.
patch39188-3.txt (text/plain), 14.07 KB, created by
Randy Faust
on 2003-07-02 10:40:58 EDT
(
hide
)
Description:
proposed fix.
Filename:
MIME Type:
Creator:
Randy Faust
Created:
2003-07-02 10:40:58 EDT
Size:
14.07 KB
patch
obsolete
>Index: core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddCustomConstructorOperation.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddCustomConstructorOperation.java,v >retrieving revision 1.1 >diff -u -r1.1 AddCustomConstructorOperation.java >--- core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddCustomConstructorOperation.java 1 Jul 2003 11:10:29 -0000 1.1 >+++ core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddCustomConstructorOperation.java 2 Jul 2003 14:33:00 -0000 >@@ -18,19 +18,19 @@ > import org.eclipse.core.runtime.SubProgressMonitor; > > import org.eclipse.jdt.core.Flags; >-import org.eclipse.jdt.core.ICompilationUnit; > import org.eclipse.jdt.core.IField; > import org.eclipse.jdt.core.IJavaElement; > import org.eclipse.jdt.core.IJavaProject; > import org.eclipse.jdt.core.IMethod; > import org.eclipse.jdt.core.IType; > import org.eclipse.jdt.core.ITypeHierarchy; >-import org.eclipse.jdt.core.JavaModelException; > import org.eclipse.jdt.core.NamingConventions; > import org.eclipse.jdt.core.Signature; >+import org.eclipse.jdt.core.ToolFactory; >+import org.eclipse.jdt.core.compiler.IScanner; >+import org.eclipse.jdt.core.compiler.ITerminalSymbols; > >-import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility.GenStubSettings; >-import org.eclipse.jdt.internal.corext.util.JavaModelUtil; >+import org.eclipse.jdt.internal.corext.dom.TokenScanner; > > /** > * Creates a custom constructor with fields initialized. >@@ -43,8 +43,9 @@ > private IMethod fConstructorCreated; > private boolean fDoSave; > private CodeGenerationSettings fSettings; >+ private IMethod[] fSuperMethod; > >- public AddCustomConstructorOperation(IType type, CodeGenerationSettings settings, IField[] selected, boolean save, IJavaElement insertPosition) { >+ public AddCustomConstructorOperation(IType type, CodeGenerationSettings settings, IField[] selected, boolean save, IJavaElement insertPosition, int superIndex) { > super(); > fType= type; > fDoSave= save; >@@ -52,6 +53,11 @@ > fSettings= settings; > fSelected= selected; > fInsertPosition= insertPosition; >+ try { >+ fSuperMethod= new IMethod[1]; >+ fSuperMethod[0]= StubUtility.getOverridableConstructors(type)[superIndex]; >+ } catch (CoreException e) { >+ } > } > > /** >@@ -66,16 +72,24 @@ > monitor.setTaskName(CodeGenerationMessages.getString("AddCustomConstructorOperation.description")); //$NON-NLS-1$ > monitor.beginTask("", 3); //$NON-NLS-1$ > >- ITypeHierarchy hierarchy= fType.newSupertypeHierarchy(new SubProgressMonitor(monitor, 1)); > monitor.worked(1); > > ImportsStructure imports= new ImportsStructure(fType.getCompilationUnit(), fSettings.importOrder, fSettings.importThreshold, true); >- String defaultConstructor= getDefaultConstructor(fType, hierarchy, imports); >- int firstParenIndex= defaultConstructor.indexOf("(") + 1; //$NON-NLS-1$ >- int closingBraceIndex= defaultConstructor.indexOf("}"); //$NON-NLS-1$ >- StringBuffer buf= new StringBuffer(defaultConstructor.substring(0, firstParenIndex)); >+ ITypeHierarchy hierarchy= fType.newSupertypeHierarchy(new SubProgressMonitor(monitor, 1)); >+ monitor.worked(1); >+ >+ String defaultConstructor= StubUtility.genOverrideStubs(fSuperMethod, fType, hierarchy, fSettings, imports)[0]; >+ int closingBraceIndex= defaultConstructor.lastIndexOf('}'); //$NON-NLS-1$ >+ >+ IScanner scanner= ToolFactory.createScanner(true, false, false, false); >+ scanner.setSource(defaultConstructor.toCharArray()); >+ TokenScanner tokenScanner= new TokenScanner(scanner); >+ int closingParenIndex= tokenScanner.getTokenStartOffset(ITerminalSymbols.TokenNameRPAREN, 0); >+ >+ StringBuffer buf= new StringBuffer(defaultConstructor.substring(0, closingParenIndex)); > String[] params= new String[fSelected.length]; > for (int i= 0; i < fSelected.length; i++) { >+ buf.append(", "); //$NON-NLS-1$ > buf.append(Signature.toString(fSelected[i].getTypeSignature())); > buf.append(" "); //$NON-NLS-1$ > IJavaProject project= fSelected[i].getJavaProject(); >@@ -89,11 +103,11 @@ > > String paramName= StubUtility.guessArgumentName(project, accessName, new String[0]); > >- buf.append(params[i]= paramName); >- if (i != fSelected.length - 1) >- buf.append(","); //$NON-NLS-1$ >+ buf.append(params[i]= paramName); > } >- buf.append(defaultConstructor.substring(firstParenIndex, closingBraceIndex)); >+ >+ buf.append(defaultConstructor.substring(closingParenIndex, closingBraceIndex)); >+ > for (int i= 0; i < fSelected.length; i++) { > String fieldName= fSelected[i].getElementName(); > boolean isStatic= Flags.isStatic(fSelected[i].getFlags()); >@@ -123,24 +137,6 @@ > monitor.done(); > } > } >- >- private String getDefaultConstructor(IType type, ITypeHierarchy hierarchy, ImportsStructure imports) { >- try { >- ICompilationUnit cu= type.getCompilationUnit(); >- GenStubSettings genStubSettings= new GenStubSettings(fSettings); >- >- IType objectType= type.getJavaProject().findType("java.lang.Object"); //$NON-NLS-1$ >- IMethod curr= objectType.getMethod("Object", new String[0]); //$NON-NLS-1$ >- IMethod defaultConstructor= JavaModelUtil.findMethodImplementationInHierarchy(hierarchy, type, curr.getElementName(), curr.getParameterTypes(), curr.isConstructor()); >- IMethod desc= JavaModelUtil.findMethodDeclarationInHierarchy(hierarchy, type, curr.getElementName(), curr.getParameterTypes(), curr.isConstructor()); >- String str= StubUtility.genStub(cu, type.getElementName(), defaultConstructor, desc.getDeclaringType(), genStubSettings, imports); >- return str; >- >- } catch (JavaModelException e) { >- } catch (CoreException e) { >- } >- return null; >- } > > /** > * Returns the created constructor. To be called after a sucessful run. >Index: ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.properties >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.properties,v >retrieving revision 1.91 >diff -u -r1.91 ActionMessages.properties >--- ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.properties 1 Jul 2003 11:10:29 -0000 1.91 >+++ ui/org/eclipse/jdt/internal/ui/actions/ActionMessages.properties 2 Jul 2003 14:33:10 -0000 >@@ -120,20 +120,21 @@ > AddUnimplementedConstructorsAction.dialog.title=Add Constructors from Superclass > AddUnimplementedConstructorsAction.dialog.label=&Select constructors to implement: > >-CreateNewConstructorAction.label=Create New &Constructor using Fields... >-CreateNewConstructorAction.description=Create New Constructor using fields >-CreateNewConstructorAction.tooltip=Create New Constructor using Fields >-CreateNewConstructorAction.error.title=Create New Constructor using Fields >+CreateNewConstructorAction.label=Create &Constructor using Fields... >+CreateNewConstructorAction.description=Create Constructor using fields >+CreateNewConstructorAction.tooltip=Create Constructor using Fields >+CreateNewConstructorAction.error.title=Create Constructor using Fields > CreateNewConstructorAction.error.type_removed_in_editor=Input type has been removed in editor. > CreateNewConstructorAction.not_applicable=The operation is not applicable to the current selection. > CreateNewConstructorAction.fields_selected={0} of {1} selected. >-CreateNewConstructorAction.dialog.title=Create New Constructor using Fields >+CreateNewConstructorAction.dialog.title=Create Constructor using Fields > CreateNewConstructorAction.dialog.label=&Select fields to initialize: >-CreateNewConstructorAction.interface_not_applicable=The Create New Constructor operation is not applicable to interfaces. >+CreateNewConstructorAction.interface_not_applicable=The Create Constructor operation is not applicable to interfaces. > CreateNewConstructorAction.typeContainsNoFields.message=The type contains no fields. > > CreateNewConstructorSelectionDialog.up_button=&Up > CreateNewConstructorSelectionDialog.down_button=&Down >+CreateNewConstructorSelectionDialog.sort_constructor_choices.label=&SuperClass Constructors: > > AddJavaDocStubAction.label=Add &Javadoc Comment > AddJavaDocStubAction.description=Add a Javadoc comment stub to the member element >Index: ui/org/eclipse/jdt/ui/actions/CreateNewConstructorAction.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/CreateNewConstructorAction.java,v >retrieving revision 1.1 >diff -u -r1.1 CreateNewConstructorAction.java >--- ui/org/eclipse/jdt/ui/actions/CreateNewConstructorAction.java 1 Jul 2003 11:10:29 -0000 1.1 >+++ ui/org/eclipse/jdt/ui/actions/CreateNewConstructorAction.java 2 Jul 2003 14:33:27 -0000 >@@ -17,8 +17,14 @@ > import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IStatus; > >+import org.eclipse.swt.SWT; >+import org.eclipse.swt.events.SelectionAdapter; >+import org.eclipse.swt.events.SelectionEvent; >+import org.eclipse.swt.layout.GridData; > import org.eclipse.swt.layout.GridLayout; >+import org.eclipse.swt.widgets.Combo; > import org.eclipse.swt.widgets.Composite; >+import org.eclipse.swt.widgets.Label; > import org.eclipse.swt.widgets.Shell; > > import org.eclipse.jface.dialogs.IDialogConstants; >@@ -49,6 +55,7 @@ > > import org.eclipse.jdt.internal.corext.codemanipulation.AddCustomConstructorOperation; > import org.eclipse.jdt.internal.corext.codemanipulation.CodeGenerationSettings; >+import org.eclipse.jdt.internal.corext.codemanipulation.StubUtility; > import org.eclipse.jdt.internal.corext.util.JavaModelUtil; > import org.eclipse.jdt.internal.ui.IJavaHelpContextIds; > import org.eclipse.jdt.internal.ui.JavaPlugin; >@@ -64,6 +71,7 @@ > import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext; > import org.eclipse.jdt.internal.ui.util.ElementValidator; > import org.eclipse.jdt.internal.ui.util.ExceptionHandler; >+import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLabels; > > > public class CreateNewConstructorAction extends SelectionDispatchAction { >@@ -134,7 +142,11 @@ > try { > IField[] selectedFields= getSelectedFields(selection); > // open an editor and work on a working copy >- IEditorPart editor= EditorUtility.openInEditor(getSelectedType(selection)); >+ IEditorPart editor= null; >+ if (selectedFields != null) >+ editor= EditorUtility.openInEditor(selectedFields[0]); >+ else >+ editor= EditorUtility.openInEditor(getSelectedType(selection).getCompilationUnit()); > > if (canRunOn(selectedFields)){ > run((IType)EditorUtility.getWorkingCopy(selectedFields[0].getDeclaringType()), selectedFields, editor, false); >@@ -318,8 +330,9 @@ > settings.createComments= dialog.getGenerateComment(); > > IJavaElement elementPosition= dialog.getElementPosition(); >- AddCustomConstructorOperation op= new AddCustomConstructorOperation(type, settings, selected, false, elementPosition); >- >+ int superIndex= dialog.getSuperIndex(); >+ AddCustomConstructorOperation op= new AddCustomConstructorOperation(type, settings, selected, false, elementPosition, superIndex); >+ > IRewriteTarget target= editor != null ? (IRewriteTarget) editor.getAdapter(IRewriteTarget.class) : null; > if (target != null) { > target.beginCompoundChange(); >@@ -488,12 +501,16 @@ > > private static class CreateNewConstructorSelectionDialog extends SourceActionDialog { > private CreateNewConstructorContentProvider fContentProvider; >+ private IType fType; >+ private int fSuperIndex; >+ > private static final int UP_BUTTON= IDialogConstants.CLIENT_ID + 1; > private static final int DOWN_BUTTON= IDialogConstants.CLIENT_ID + 2; > > public CreateNewConstructorSelectionDialog(Shell parent, ILabelProvider labelProvider, CreateNewConstructorContentProvider contentProvider, CompilationUnitEditor editor, IType type) { > super(parent, labelProvider, contentProvider, editor, type); > fContentProvider= contentProvider; >+ fType= type; > } > > protected Composite createSelectionButtons(Composite composite) { >@@ -533,13 +550,54 @@ > } > > private List getElementList() { >- Object elements[]= getTreeViewer().getCheckedElements(); >+ IStructuredSelection selection= (IStructuredSelection) getTreeViewer().getSelection(); >+ List elements= selection.toList(); > ArrayList elementList= new ArrayList(); >- for(int i = 0; i < elements.length; i++) >- elementList.add(elements[i]); >+ >+ for (int i= 0; i < elements.size(); i++) { >+ elementList.add(elements.get(i)); >+ } > return elementList; > } >+ >+ protected Composite createEntryPtCombo(Composite composite) { >+ Composite entryComposite= super.createEntryPtCombo(composite); >+ addSuperClassConstructorChoices(entryComposite); >+ >+ return entryComposite; >+ } >+ >+ private Composite addSuperClassConstructorChoices(Composite composite) { >+ try { >+ Label label= new Label(composite, SWT.NONE); >+ label.setText(ActionMessages.getString("CreateNewConstructorSelectionDialog.sort_constructor_choices.label")); //$NON-NLS-1$ >+ GridData gd= new GridData(GridData.FILL_BOTH); >+ label.setLayoutData(gd); > >+ final Combo combo= new Combo(composite, SWT.READ_ONLY); >+ IMethod[] constructorMethods= StubUtility.getOverridableConstructors(fType); >+ >+ for (int i= 0; i < constructorMethods.length; i++) { >+ combo.add(JavaElementLabels.getElementLabel(constructorMethods[i], JavaElementLabels.M_PARAMETER_TYPES)); >+ } >+ // TODO: Can we be a little more intelligent about guessing the super() ? >+ combo.setText(combo.getItem(0)); >+ combo.setLayoutData(new GridData(GridData.FILL_BOTH)); >+ combo.addSelectionListener(new SelectionAdapter(){ >+ public void widgetSelected(SelectionEvent e) { >+ fSuperIndex= combo.getSelectionIndex(); >+ } >+ }); >+ >+ } catch (CoreException e) { >+ } >+ return composite; >+ } >+ >+ public int getSuperIndex() { >+ return fSuperIndex; >+ } >+ > } > > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 39188
:
5323
|
5330
| 5331