Bug 537171 - [9] Copying a packaged scope file from a modular project to
another gives error
Change-Id: I68fe9c943beb51467a5ee2d3049543a62c09dea5
Signed-off-by: Kalyan Prasad Tatavarthi <kalyan_prasad@in.ibm.com>
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java
index 2c3d632..b3313a8 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/reorg/ReorgPolicyFactory.java
@@ -77,6 +77,7 @@
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IModuleDescription;
import org.eclipse.jdt.core.IOpenable;
import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.IPackageFragment;
@@ -973,8 +974,25 @@
protected IPackageFragment getDestinationAsPackageFragment() {
IPackageFragment javaAsPackage= getJavaDestinationAsPackageFragment(getJavaElementDestination());
- if (javaAsPackage != null)
- return javaAsPackage;
+ boolean copyFilesToDefaultPackage= true;
+ if (javaAsPackage != null) {
+ IJavaProject jProject= javaAsPackage.getJavaProject();
+ if (jProject != null && JavaModelUtil.is9OrHigher(jProject) && javaAsPackage.isDefaultPackage()) {
+ try {
+ IModuleDescription desc= jProject.getModuleDescription();
+ if (desc!= null && desc.exists()) {
+ copyFilesToDefaultPackage= false;
+ }
+ } catch (JavaModelException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ if (copyFilesToDefaultPackage) {
+ return javaAsPackage;
+ }
+ }
return getResourceDestinationAsPackageFragment(getResourceDestination());
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReorgCorrectionsSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReorgCorrectionsSubProcessor.java
index 61b4d3f..c7015e1 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReorgCorrectionsSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ReorgCorrectionsSubProcessor.java
@@ -184,7 +184,9 @@
// correct package declaration
int relevance= cu.getPackageDeclarations().length == 0 ? IProposalRelevance.MISSING_PACKAGE_DECLARATION : IProposalRelevance.CORRECT_PACKAGE_DECLARATION; // bug 38357
- proposals.add(new CorrectPackageDeclarationProposal(cu, problem, relevance));
+ if (CorrectPackageDeclarationProposal.isValidProposal(cu)) {
+ proposals.add(new CorrectPackageDeclarationProposal(cu, problem, relevance));
+ }
// move to package
IPackageDeclaration[] packDecls= cu.getPackageDeclarations();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectPackageDeclarationProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectPackageDeclarationProposal.java
index 7624a1b..b0442fd 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectPackageDeclarationProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/CorrectPackageDeclarationProposal.java
@@ -24,11 +24,14 @@
import org.eclipse.jface.text.IDocument;
import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IModuleDescription;
import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.internal.corext.util.Messages;
import org.eclipse.jdt.ui.JavaElementLabels;
@@ -94,4 +97,29 @@
}
return (Messages.format(CorrectionMessages.CorrectPackageDeclarationProposal_change_description, JavaElementLabels.getElementLabel(parentPack, JavaElementLabels.ALL_DEFAULT)));
}
+
+ public static boolean isValidProposal(ICompilationUnit cu) {
+ boolean isValid= true;
+ IPackageFragment parentPack= (IPackageFragment) cu.getParent();
+ try {
+ IPackageDeclaration[] decls= cu.getPackageDeclarations();
+ if (parentPack.isDefaultPackage() && decls.length > 0) {
+ IJavaProject jProject = parentPack.getJavaProject();
+ if (jProject != null && JavaModelUtil.is9OrHigher(jProject)) {
+ try {
+ IModuleDescription desc= jProject.getModuleDescription();
+ if (desc!= null && desc.exists()) {
+ isValid= false;
+ }
+ } catch (JavaModelException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ } catch(JavaModelException e) {
+ JavaPlugin.log(e);
+ }
+ return isValid;
+ }
}