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;
+	}
 }