как правильно переместить один или несколько пакетов в другой пакет в java с помощью кода

Я разрабатываю приложение [настольное приложение Swing], которое требует от меня рефакторинга кода. [Я знаю, что интерфейс и функция уже предоставлены IDE eclipse, но мне нужно сделать это с помощью кода

первая фаза рефакторинга, которую мне нужно сделать, это переместить выбранный пакет [возможность выбора предоставляется с помощью флажков, которые отображают все доступные пакеты в рабочей области, используя идею JDT. Я использовал учебник по этому адресу: http://www.vogella.de/articles/EclipseJDT/article.html ]

Теперь, когда я выбрал пакеты, которые хочу переместить в другой пакет,

Я использовал этот кусок кода

233.   for (IPackageFragment mypackage : packages) {
234.                    if ((mypackage.getKind() == IPackageFragmentRoot.K_SOURCE) && (searchifSelected(mypackage.getElementName())==true) ){
235.                        IJavaElement container = newModule.getPrimaryElement();
236.                        mypackage.move(container, null, null, true, null);
                }
     }

searchifSelected(mypackage.getElementName())==true сообщает мне, выбрал ли я этот конкретный пакет для перемещения

IJavaElement container = newModule.getPrimaryElement(); — это контейнер [новый пакет], который будет содержать выбранные пакеты.

mypackage.move(container, null, null, true, null); насколько я читал, эта команда должна переместить «mypackage» в «контейнер» как «дочерний».

однако я столкнулся с этой проблемой:

 Java Model Exception: Java Model Status [Invalid destination: 'devFromSupplier [in src [in test]]']
at org.eclipse.jdt.internal.core.MultiOperation.processElements(MultiOperation.java:175)
at org.eclipse.jdt.internal.core.CopyResourceElementsOperation.processElements(CopyResourceElementsOperation.java:417)
at org.eclipse.jdt.internal.core.MultiOperation.executeOperation(MultiOperation.java:90)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:793)
at org.eclipse.jdt.internal.core.JavaModel.runOperation(JavaModel.java:297)
at org.eclipse.jdt.internal.core.JavaModel.move(JavaModel.java:258)
at org.eclipse.jdt.internal.core.PackageFragment.move(PackageFragment.java:420)
at newmodulewizrd.ui.Integrate.printPackageInfos(Integrate.java:236)
at newmodulewizrd.ui.Integrate.printProjectInfo(Integrate.java:177)
at newmodulewizrd.ui.Integrate.getWorkSpace(Integrate.java:149)
at newmodulewizrd.ui.Integrate.moveToOneModule(Integrate.java:120)
at newmodulewizrd.ui.Integrate$1.actionPerformed(Integrate.java:79)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

что, я думаю, означает, что я привожу неправильные аргументы.

может ли кто-нибудь помочь, что мне с этим делать?


person user    schedule 29.11.2011    source источник
comment
можете ли вы включить номера строк в свой сегмент кода..   -  person rana    schedule 29.11.2011
comment
я извиняюсь, я не понял ур точки?   -  person user    schedule 29.11.2011
comment
@рана, я добавил номера строк   -  person user    schedule 29.11.2011
comment
@carl: я упоминал об этом ранее, я должен сделать это с помощью кода, не используя функцию IDE.   -  person user    schedule 29.11.2011


Ответы (2)


Я разместил проблему на форуме eclipse [IDE, которую я использую], а затем обнаружил, что проблема/ошибка метода заключается в том, что он не будет работать в цикле. Вам придется явно вызывать эту функцию одну за другой. Аналогичная ошибка была обнаружена и по этой ссылке:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=240286 [метод удаления]

person user    schedule 30.11.2011

Для тех, кто сталкивается с той же проблемой, я нашел другой способ сделать это, то есть использовать метод переименования и заставить его работать как функцию перемещения. хотя, возможно, это не лучший вариант.

я заменяю приведенный выше код этим кодом

     for (IPackageFragment mypackage : packages) {
                if ((mypackage.getKind() == IPackageFragmentRoot.K_SOURCE) && (searchifSelected(mypackage.getElementName())==true) ){
                    mypackage.rename(textfield.getText()+"."+mypackage.getElementName(), true, null);
                }
            }
person user    schedule 30.11.2011