Bug 522022: [9][create on paste] paste into package explorer should
understand module-info.java
Change-Id: I91ce011e3bcb20b6414b7cb780ff0d99328de2e9
(cherry picked from commit d1a13bdf5e2266e22b7bd041967442287de5dd6e)
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
index a4b1e18..ed26187 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -363,6 +363,7 @@
private final int fKind;
private final String fTypeName;
private final String fPackageName;
+ private final boolean fIsModuleInfo;
public static List<ParsedCu> parseCus(IJavaProject javaProject, String compilerCompliance, String text) {
ASTParser parser= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
@@ -383,6 +384,17 @@
parser.setProject(javaProject);
parser.setSource(text.toCharArray());
parser.setStatementsRecovery(true);
+ parser.setUnitName(JavaModelUtil.MODULE_INFO_JAVA);
+ unit= (CompilationUnit) parser.createAST(null);
+ if (unit.getModule() != null) {
+ return Collections.singletonList(new ParsedCu(text, ASTParser.K_COMPILATION_UNIT, null, null, true));
+ } else {
+ parser.setUnitName(null);
+ }
+
+ parser.setProject(javaProject);
+ parser.setSource(text.toCharArray());
+ parser.setStatementsRecovery(true);
parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
ASTNode root= parser.createAST(null);
if (root instanceof TypeDeclaration) {
@@ -454,10 +466,15 @@
}
private ParsedCu(String text, int kind, String typeName, String packageName) {
+ this(text, kind, typeName, packageName, false);
+ }
+
+ private ParsedCu(String text, int kind, String typeName, String packageName, boolean isModuleInfo) {
fText= text;
fTypeName= typeName;
fPackageName= packageName;
fKind= kind;
+ fIsModuleInfo= isModuleInfo;
}
public String getTypeName() {
@@ -729,25 +746,35 @@
pm.beginTask("", 4); //$NON-NLS-1$
try {
IPackageFragment destinationPack;
- if (fDestinationPack != null) {
- destinationPack= fDestinationPack;
+ if (parsedCu.fIsModuleInfo) {
+ destinationPack= fDestination.getPackageFragment(""); //$NON-NLS-1$ // the default package
pm.worked(1);
} else {
- String packageName= parsedCu.getPackageName();
- if (packageName == null)
- packageName= ReorgMessages.PasteAction_snippet_default_package_name;
- destinationPack= fDestination.getPackageFragment(packageName);
- if (! destinationPack.exists()) {
- JavaModelUtil.getPackageFragmentRoot(destinationPack).createPackageFragment(packageName, true, new SubProgressMonitor(pm, 1));
- } else {
+ if (fDestinationPack != null) {
+ destinationPack= fDestinationPack;
pm.worked(1);
+ } else {
+ String packageName= parsedCu.getPackageName();
+ if (packageName == null)
+ packageName= ReorgMessages.PasteAction_snippet_default_package_name;
+ destinationPack= fDestination.getPackageFragment(packageName);
+ if (!destinationPack.exists()) {
+ JavaModelUtil.getPackageFragmentRoot(destinationPack).createPackageFragment(packageName, true, new SubProgressMonitor(pm, 1));
+ } else {
+ pm.worked(1);
+ }
}
}
String parsedText= Strings.trimIndentation(parsedCu.getText(), destinationPack.getJavaProject(), true);
int kind= parsedCu.getKind();
if (kind == ASTParser.K_COMPILATION_UNIT) {
- final String cuName= parsedCu.getTypeName() + JavaModelUtil.DEFAULT_CU_SUFFIX;
+ final String cuName;
+ if (parsedCu.fIsModuleInfo) {
+ cuName= JavaModelUtil.MODULE_INFO_JAVA;
+ } else {
+ cuName= parsedCu.getTypeName() + JavaModelUtil.DEFAULT_CU_SUFFIX;
+ }
ICompilationUnit cu= destinationPack.getCompilationUnit(cuName);
boolean alreadyExists= cu.exists();
if (alreadyExists) {