Skip to content

Commit 20c90d7

Browse files
committed
Target platform editor - Only resolve target platform if changed
When you leave the Source tab, the editor takes the entire text (XML) from that tab and reconstructs a new internal Target Definition model (ITargetDefinition). This new model is compared to the current target definition model and if it is the same, the resolving of the target platform is not triggered.
1 parent 1c1d663 commit 20c90d7

File tree

1 file changed

+23
-4
lines changed
  • ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition

1 file changed

+23
-4
lines changed

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,15 @@
5757
import org.eclipse.osgi.util.NLS;
5858
import org.eclipse.pde.core.target.ITargetDefinition;
5959
import org.eclipse.pde.core.target.ITargetHandle;
60+
import org.eclipse.pde.core.target.ITargetLocation;
6061
import org.eclipse.pde.core.target.ITargetPlatformService;
6162
import org.eclipse.pde.core.target.LoadTargetDefinitionJob;
6263
import org.eclipse.pde.core.target.TargetEvents;
6364
import org.eclipse.pde.internal.core.ICoreConstants;
6465
import org.eclipse.pde.internal.core.PDECore;
6566
import org.eclipse.pde.internal.core.PDEPreferencesManager;
6667
import org.eclipse.pde.internal.core.target.P2TargetUtils;
68+
import org.eclipse.pde.internal.core.target.TargetDefinition;
6769
import org.eclipse.pde.internal.core.target.TargetDefinitionPersistenceHelper;
6870
import org.eclipse.pde.internal.core.target.TargetPlatformService;
6971
import org.eclipse.pde.internal.core.target.WorkspaceFileTargetHandle;
@@ -161,10 +163,27 @@ protected void addPages() {
161163
protected void pageChange(int newPageIndex) {
162164
try {
163165
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+
}
168187
}
169188
}
170189
super.pageChange(newPageIndex);

0 commit comments

Comments
 (0)