netbeans icon indicating copy to clipboard operation
netbeans copied to clipboard

NetBeans renames classes only in declaring files, but not in client files

Open PavelTurk opened this issue 9 months ago • 2 comments

Apache NetBeans version

Apache NetBeans 22 release candidate

What happened

NetBeans sometimes renames classes/enum/iterfaces etc only in files, that declare them, but not in files, that use them. I see this problem for projects that use JPMS (have explicit module-info). This bug is linked to https://github.com/apache/netbeans/issues/3725 and was previously describe there.

Product Version: Apache NetBeans IDE 22-rc1
Java: 21.0.2; OpenJDK 64-Bit Server VM 21.0.2+13-58
Runtime: OpenJDK Runtime Environment 21.0.2+13-58
System: Linux version 5.15.0-88-generic running on amd64; UTF-8; en_US (nb)

Language / Project Type / NetBeans Component

Java Maven Project using Java Modules (JPMS)

How to reproduce

I don't have a solution to reproduce this bug. Earlier I used the steps described in https://github.com/apache/netbeans/issues/3725#issuecomment-1997195547 however they don't work any more.

Did this work correctly in an earlier version?

No / Don't know

Operating System

Ubuntu 20.04.3 LTS

JDK

Java: 21.0.2; OpenJDK 64-Bit Server VM 21.0.2+13-58

Apache NetBeans packaging

Apache NetBeans binary zip

Anything else

No response

Are you willing to submit a pull request?

No

PavelTurk avatar May 04 '24 10:05 PavelTurk

Sometimes I get this message while renaming:

Screenshot from 2024-05-05 12-10-38

And this is IDE log:

SEVERE [org.openide.util.Exceptions]
java.lang.NullPointerException: Cannot invoke "org.netbeans.modules.maven.model.pom.Properties.getProperty(String)" because "pr" is null
	at org.netbeans.modules.maven.refactoring.MavenRefactoringPlugin.lambda$prepare$0(MavenRefactoringPlugin.java:105)
	at org.netbeans.modules.maven.model.Utilities.performPOMModelOperations(Utilities.java:326)
	at org.netbeans.modules.maven.model.Utilities.performPOMModelOperations(Utilities.java:277)
	at org.netbeans.modules.maven.refactoring.MavenRefactoringPlugin.lambda$prepare$1(MavenRefactoringPlugin.java:125)
	at org.openide.filesystems.EventControl.runAtomicAction(EventControl.java:102)
	at org.openide.filesystems.FileSystem.runAtomicAction(FileSystem.java:494)
	at org.netbeans.modules.maven.refactoring.MavenRefactoringPlugin.prepare(MavenRefactoringPlugin.java:124)
[catch] at org.netbeans.modules.refactoring.api.AbstractRefactoring.pluginsPrepare2(AbstractRefactoring.java:417)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.pluginsPrepare(AbstractRefactoring.java:401)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.prepare(AbstractRefactoring.java:212)
	at org.netbeans.modules.refactoring.spi.impl.ParametersPanel$Prepare.run(ParametersPanel.java:1063)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1420)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2035)

At the same time I don't know if these problems are related or not.

PavelTurk avatar May 05 '24 09:05 PavelTurk

Sometimes I get this message while renaming:

this got fixed and should be in NB 22 rc3 https://github.com/apache/netbeans/pull/7361

mbien avatar May 06 '24 18:05 mbien

I had something like this:

public interface DialogManager { ... }

public abstract class AbstractService<T extends Bar<?> & DialogManager> {

   private final T owner;
   ...
   protected T getOwner() {..}
   ...
}

After that I renamed DialogManager interface. Interface was renamed, but not everywhere. For example, it wasn't renamed in AbstractService class. In IDE log I got:

SEVERE [global]: IsOverriddenAnnotationHandler: originalMethod == null!
INFO [org.netbeans.api.java.source.ElementHandle]: Cannot resolve: ElementHandle[kind=METHOD; sigs=foo.AbstractService getOwner ()LDialogManager; ]
INFO [org.netbeans.api.java.source.ElementHandle]: Cannot resolve: ElementHandle[kind=METHOD; sigs=foo.AbstractService getOwner ()LDialogManager; ]
SEVERE [global]: IsOverriddenAnnotationHandler: originalMethod == null!
INFO [org.netbeans.api.java.source.ElementHandle]: Cannot resolve: ElementHandle[kind=METHOD; sigs=foo.AbstractService getOwner ()LDialogManager; ]

PavelTurk avatar Jul 18 '24 12:07 PavelTurk

Besides when I rename I get this exception:

Caused: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for kotlin.Pair not found
Caused: java.io.IOException
	at org.netbeans.api.java.source.JavaSource.runUserActionTaskImpl(JavaSource.java:458)
	at org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:425)
	at org.netbeans.api.java.source.JavaSource.runModificationTask(JavaSource.java:680)
	at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.processFiles(JavaRefactoringPlugin.java:323)
	at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.processFiles(JavaRefactoringPlugin.java:264)
	at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.processFiles(JavaRefactoringPlugin.java:246)
[catch] at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.createAndAddElements(JavaRefactoringPlugin.java:338)
	at org.netbeans.modules.refactoring.java.plugins.RenameRefactoringPlugin.prepare(RenameRefactoringPlugin.java:627)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.pluginsPrepare2(AbstractRefactoring.java:417)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.pluginsPrepare(AbstractRefactoring.java:401)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.prepare(AbstractRefactoring.java:212)
	at org.netbeans.modules.refactoring.spi.impl.ParametersPanel$Prepare.run(ParametersPanel.java:1063)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1420)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2035)

I just wonder, nobody has problems with renaming in JPMS projects? I have about 25% of tasks related to renaming failing during refactoring, even with not very serious changes. As a result, I have to change everything manually.

PavelTurk avatar Jul 29 '24 14:07 PavelTurk