|
57 | 57 | import org.eclipse.osgi.util.NLS; |
58 | 58 | import org.eclipse.pde.core.target.ITargetDefinition; |
59 | 59 | import org.eclipse.pde.core.target.ITargetHandle; |
| 60 | +import org.eclipse.pde.core.target.ITargetLocation; |
60 | 61 | import org.eclipse.pde.core.target.ITargetPlatformService; |
61 | 62 | import org.eclipse.pde.core.target.LoadTargetDefinitionJob; |
62 | 63 | import org.eclipse.pde.core.target.TargetEvents; |
63 | 64 | import org.eclipse.pde.internal.core.ICoreConstants; |
64 | 65 | import org.eclipse.pde.internal.core.PDECore; |
65 | 66 | import org.eclipse.pde.internal.core.PDEPreferencesManager; |
66 | 67 | import org.eclipse.pde.internal.core.target.P2TargetUtils; |
| 68 | +import org.eclipse.pde.internal.core.target.TargetDefinition; |
67 | 69 | import org.eclipse.pde.internal.core.target.TargetDefinitionPersistenceHelper; |
68 | 70 | import org.eclipse.pde.internal.core.target.TargetPlatformService; |
69 | 71 | import org.eclipse.pde.internal.core.target.WorkspaceFileTargetHandle; |
@@ -161,10 +163,27 @@ protected void addPages() { |
161 | 163 | protected void pageChange(int newPageIndex) { |
162 | 164 | try { |
163 | 165 | if (newPageIndex != fSourceTabIndex && getCurrentPage() == fSourceTabIndex) { |
164 | | - InputStream stream = new ByteArrayInputStream(fTargetDocument.get().getBytes(StandardCharsets.UTF_8)); |
165 | | - TargetDefinitionPersistenceHelper.initFromXML(getTarget(), stream); |
166 | | - if (!getTarget().isResolved()) { |
167 | | - getTargetChangedListener().contentsChanged(getTarget(), this, true, false); |
| 166 | + String text = fTargetDocument.get(); |
| 167 | + byte[] bytes = text.getBytes(StandardCharsets.UTF_8); |
| 168 | + InputStream stream = new ByteArrayInputStream(bytes); |
| 169 | + ITargetDefinition currentTarget = getTarget(); |
| 170 | + ITargetPlatformService service = PDECore.getDefault().acquireService(ITargetPlatformService.class); |
| 171 | + ITargetDefinition newTarget = service.newTarget(); |
| 172 | + TargetDefinitionPersistenceHelper.initFromXML(newTarget, stream); |
| 173 | + if (currentTarget instanceof TargetDefinition && ((TargetDefinition) currentTarget).isContentEqual(newTarget)) { |
| 174 | + ITargetLocation[] oldLocations = currentTarget.getTargetLocations(); |
| 175 | + boolean wasResolved = currentTarget.isResolved(); |
| 176 | + stream.reset(); |
| 177 | + TargetDefinitionPersistenceHelper.initFromXML(currentTarget, stream); |
| 178 | + if (wasResolved) { |
| 179 | + currentTarget.setTargetLocations(oldLocations); |
| 180 | + } |
| 181 | + } else { |
| 182 | + stream.reset(); |
| 183 | + TargetDefinitionPersistenceHelper.initFromXML(currentTarget, stream); |
| 184 | + if (!getTarget().isResolved()) { |
| 185 | + getTargetChangedListener().contentsChanged(getTarget(), this, true, false); |
| 186 | + } |
168 | 187 | } |
169 | 188 | } |
170 | 189 | super.pageChange(newPageIndex); |
|
0 commit comments