Skip to content

Commit abc3cc7

Browse files
Neha Burnwallaeubi
authored andcommitted
Empty package removed from manifest while refactoring
1 parent 028463b commit abc3cc7

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/refactoring/BundleManifestChange.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,38 @@ public static Change createMoveToPackageChange(IFile file, MoveFromChange change
6969
return null;
7070
}
7171

72+
public static Change createEmptyPackageChange(IFile file, String packageName, IProgressMonitor monitor)
73+
throws CoreException {
74+
try {
75+
Bundle bundle = getBundle(file, monitor);
76+
if (bundle == null) {
77+
return null;
78+
}
79+
80+
BundleModel model = (BundleModel) bundle.getModel();
81+
BundleTextChangeListener listener = new BundleTextChangeListener(model.getDocument());
82+
bundle.getModel().addModelChangedListener(listener);
83+
84+
BasePackageHeader header = (BasePackageHeader) bundle.getManifestHeader(Constants.EXPORT_PACKAGE);
85+
if (header != null && header.hasPackage(packageName)) {
86+
removePackage(header, packageName);
87+
}
88+
TextEdit[] operations = listener.getTextOperations();
89+
if (operations.length > 0) {
90+
TextFileChange change = new TextFileChange("", file); //$NON-NLS-1$
91+
MultiTextEdit multi = new MultiTextEdit();
92+
multi.addChildren(operations);
93+
change.setEdit(multi);
94+
PDEModelUtility.setChangeTextType(change, file);
95+
return change;
96+
}
97+
} catch (CoreException | MalformedTreeException e) {
98+
} finally {
99+
FileBuffers.getTextFileBufferManager().disconnect(file.getFullPath(), LocationKind.NORMALIZE, monitor);
100+
}
101+
return null;
102+
}
103+
72104
public static MoveFromChange createMovePackageChange(IFile file, Object[] elements, IProgressMonitor monitor) throws CoreException {
73105
try {
74106
Bundle bundle = getBundle(file, monitor);

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/refactoring/ManifestTypeMoveParticipant.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
*******************************************************************************/
1414
package org.eclipse.pde.internal.ui.refactoring;
1515

16+
import java.util.ArrayList;
1617
import java.util.HashMap;
18+
import java.util.List;
19+
import java.util.Map;
1720

1821
import org.eclipse.core.resources.IFile;
1922
import org.eclipse.core.resources.IProject;
@@ -93,6 +96,34 @@ protected void addChange(CompositeChange result, IProgressMonitor pm) throws Cor
9396
result.add(change);
9497
}
9598
}
99+
100+
Map<IPackageFragment, List<IType>> movedByPackage = new HashMap<>();
101+
fElements.forEach((element, newName) -> {
102+
IType type = (IType) element;
103+
IPackageFragment pkg = type.getPackageFragment();
104+
105+
movedByPackage.computeIfAbsent(pkg, k -> new ArrayList<>()).add(type);
106+
});
107+
108+
for (Map.Entry<IPackageFragment, List<IType>> entry : movedByPackage.entrySet()) {
109+
IPackageFragment pkg = entry.getKey();
110+
List<IType> movingTypes = entry.getValue();
111+
112+
try {
113+
IJavaElement[] children = pkg.getChildren();
114+
int totalFiles = children.length;
115+
int movingCount = movingTypes.size();
116+
if (totalFiles == movingCount) {
117+
Change change = BundleManifestChange.createEmptyPackageChange(file, pkg.getElementName(), pm);
118+
if (change != null) {
119+
result.add(change);
120+
}
121+
}
122+
} catch (CoreException e) {
123+
e.printStackTrace();
124+
}
125+
}
126+
96127
}
97128

98129
}

0 commit comments

Comments
 (0)