Bug 197923 - [extract class] IAE when extracting class
Summary: [extract class] IAE when extracting class
Status: RESOLVED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.3   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.4 M1   Edit
Assignee: Karsten Becker CLA
QA Contact:
URL:
Whiteboard:
Keywords: contributed
Depends on:
Blocks:
 
Reported: 2007-07-26 03:36 EDT by Benno Baumgartner CLA
Modified: 2007-07-31 09:23 EDT (History)
1 user (show)

See Also:


Attachments
Patch (42.69 KB, patch)
2007-07-30 11:13 EDT, Karsten Becker CLA
no flags Details | Diff
Patch for Martin (8.16 KB, patch)
2007-07-31 07:04 EDT, Karsten Becker CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Benno Baumgartner CLA 2007-07-26 03:36:41 EDT
I20070724-0800

Given:
package test;
public class UFO {
        private int x;
        private int y;
        private int z;

        private String homePlanet;

        public UFO(int x, int y, int z, 
                        String homePlanet) {
                this.x= x;
                this.y= y;
                this.z= z;
                this.homePlanet= homePlanet;
        }

        public String toString() {
                return "An UFO from " + homePlanet +
                        "is at position " +
                        "[" + x + ", " + y + ", " + z + "]";
        }
}

1. Select UFO
2. Extract Class...
3. Create Getters
4. OK
Is:
java.lang.IllegalArgumentException
	at org.eclipse.jdt.core.dom.ASTNode$NodeList.add(ASTNode.java:1247)
	at java.util.AbstractList.add(AbstractList.java:91)
	at org.eclipse.jdt.internal.corext.refactoring.structure.ParameterObjectFactory.createFieldWriteAccess(ParameterObjectFactory.java:292)
	at org.eclipse.jdt.internal.corext.refactoring.structure.ExtractClassRefactoring.replaceReferences(ExtractClassRefactoring.java:564)
	at org.eclipse.jdt.internal.corext.refactoring.structure.ExtractClassRefactoring.updateReferences(ExtractClassRefactoring.java:523)
	at org.eclipse.jdt.internal.corext.refactoring.structure.ExtractClassRefactoring.checkFinalConditions(ExtractClassRefactoring.java:347)
	at org.eclipse.ltk.core.refactoring.CheckConditionsOperation.run(CheckConditionsOperation.java:83)
	at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:119)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:209)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1797)
	at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Comment 1 Karsten Becker CLA 2007-07-26 05:42:47 EDT
This is caused by the this qualifier. I will look into it.
Comment 2 Karsten Becker CLA 2007-07-26 08:38:35 EDT
Hmm, it does not make sense to have separate checkboxes for getters & setters. They will be merged.
Comment 3 Karsten Becker CLA 2007-07-30 11:13:27 EDT
Created attachment 74935 [details]
Patch
Comment 4 Martin Aeschlimann CLA 2007-07-31 05:22:17 EDT
patch released > 20070731

I still see this exception with the following test case:

- import org.eclipse.compare
- Open Hunk.java, extract a class from fNewStart, fNewLength

java.lang.IllegalArgumentException
	at org.eclipse.jdt.core.dom.ASTNode$NodeList.add(ASTNode.java:1247)
	at java.util.AbstractList.add(AbstractList.java:91)
	at org.eclipse.jdt.internal.corext.refactoring.structure.ParameterObjectFactory.createFieldWriteAccess(ParameterObjectFactory.java:366)
	at org.eclipse.jdt.internal.corext.refactoring.structure.ExtractClassRefactoring.replaceReferences(ExtractClassRefactoring.java:567)
	at org.eclipse.jdt.internal.corext.refactoring.structure.ExtractClassRefactoring.updateReferences(ExtractClassRefactoring.java:512)
	at org.eclipse.jdt.internal.corext.refactoring.structure.ExtractClassRefactoring.checkFinalConditions(ExtractClassRefactoring.java:338)
	at org.eclipse.ltk.core.refactoring.CheckConditionsOperation.run(CheckConditionsOperation.java:83)
	at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:119)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1797)
	at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Comment 5 Martin Aeschlimann CLA 2007-07-31 05:23:23 EDT
(with 'Create getter and setter' checked)
Comment 6 Karsten Becker CLA 2007-07-31 07:04:06 EDT
Created attachment 75022 [details]
Patch for Martin

Even though both are IllegalArgumentExceptions both cases are different. Martins trace is caused by an access in a non ControlStatement block.
Comment 7 Martin Aeschlimann CLA 2007-07-31 09:23:26 EDT
patch released > 20070731