> I cannot reproduce this behaviour. If the type is imported in the file 
where
> the original method is located, imports should be added to all other 
files
> where required. Could you please describe you problem with more details?

Sure. I think I have narrowed it down too. It only happens when:

1. you are changing a parameter (or return) type of a method

2. the method is in a interface/class that extends/implements a 
superclass/interface

3. you invoke the Change Signature refactoring in the DERIVED 
class/interface file (or in a usage), and answer "Yes" to the "Do you 
want to refactor this method in the superclass/interface" question.

4. the file containing the base class/interface for the refactoring does 
not have an "import" statement for the new type of the return / 
parameter, whereas your derived class does.

So basically you could say that this is not a bug, but it is certainly 
confusing.

If the superclass/interface file contains the import already, the 
refactoring is done properly. However, if the derived class contains the 
correct import, but the superclass/interface does not, it does not add 
the import to all the affected files.

A complete example:

---some/package/DerivedClass.java---

package some.package;

import some.other.package.NewType;

public class DerivedClass implements TestInterface
{
   public void testMethod( String s) {  }
}

---some/other/package/NewType.java---

package some.other.package;

public interface NewType
{
}

---some/package/TestInterface.java---

package some.package;

public interface TestInterface
{
   void testMethod( String s);
}

Now, open DerivedClass, position the cursor on testMethod, and CTRL-F6. 
Answer YES to the question. Then in the refactor dialog, change the 
String parameter to a NewType parameter. Apply the refactoring.

TestInterface will not compile now due to a missing import. This doesn't 
look like a big deal, but when you do a refactoring like this and there 
are 20 files affected, it's a pain in the ass!

So it's clear the problem is that the programmer "knows" that the derived 
class they are editing has access to the type, but IDEA forgets this when 
it moves the refactoring up to the superclass.

Perhaps this also highlights a wider problem of changing parameter types 
when refactoring... shouldn't IDEA scan the project (then classpath) for 
classes of that Name and be 100% sure of the type the programmer means 
before it goes and applies the refactoring?

Hope this helps.

Marc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ W<A> ~~~~~
(o) Wangjammer5 (Marc Palmer) 
( ) Wangjammer7 

www.wangjammers.org = Java Consultants (Web|Smartcards|Crypto)



_______________________________________________
Eap-list mailing list
[EMAIL PROTECTED]
http://www.intellij.com/mailman/listinfo/eap-list

Reply via email to