diff options
| author | Laurent Delaigue | 2016-04-01 14:13:48 +0000 |
|---|---|---|
| committer | Pierre-Charles David | 2016-04-04 09:21:46 +0000 |
| commit | 94e9f3293ad6893b8cd489fcb4ef386356e2ba7c (patch) | |
| tree | c5cb6646cd1f4f3c5a1a6e38f1b310a4dec55b4b | |
| parent | 53421533158c39c829166d42b1a6165a4a9ac7af (diff) | |
| download | org.eclipse.sirius-94e9f3293ad6893b8cd489fcb4ef386356e2ba7c.tar.gz org.eclipse.sirius-94e9f3293ad6893b8cd489fcb4ef386356e2ba7c.tar.xz org.eclipse.sirius-94e9f3293ad6893b8cd489fcb4ef386356e2ba7c.zip | |
[490908] Improve perf when many roots in resource
Only check the first root to analyze a Resource which is not an instance
AirdResource could still be a representation/session resource.
Also fix potential IllegalStateExceptions.
Bug: 490908
Change-Id: I50bb181ea644b8184440188fe09fd1e99b9bfaba
Signed-off-by: Laurent Delaigue <laurent.delaigue@obeo.fr>
Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
| -rw-r--r-- | plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/ResourceQuery.java | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/ResourceQuery.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/ResourceQuery.java index 7ba0eb1220..44202323a8 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/ResourceQuery.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/query/ResourceQuery.java @@ -94,21 +94,13 @@ public class ResourceQuery { */ public boolean isRepresentationsResource() { boolean isRepresentationsResource = false; - try { - isRepresentationsResource = resource.getURI() != null; - } catch (IllegalStateException e) { - // Silent catch: if an issue occurred while getting this Resource's - // URI, then it will not be considered as a representation resource - } - isRepresentationsResource = isRepresentationsResource && new FileQuery(resource.getURI().fileExtension()).isSessionResourceFile(); + URI uri = getUri(); + isRepresentationsResource = uri != null && new FileQuery(uri.fileExtension()).isSessionResourceFile(); isRepresentationsResource = isRepresentationsResource || resource instanceof AirdResource; if (!isRepresentationsResource && !resource.getContents().isEmpty()) { - for (EObject contentEObject : resource.getContents()) { - if (contentEObject instanceof DAnalysis) { - isRepresentationsResource = true; - break; - } - } + // Bug #490908: only check the 1st root since Sirius always puts + // DAnalysis as 1st root of the representation resources. + isRepresentationsResource = resource.getContents().get(0) instanceof DAnalysis; } return isRepresentationsResource; } @@ -120,9 +112,21 @@ public class ResourceQuery { * @return true if it is a modeler resource */ public boolean isModelerResource() { - if (resource.getURI() != null) { - return new FileQuery(resource.getURI().fileExtension()).isVSMFile(); + URI uri = getUri(); + if (uri != null) { + return new FileQuery(uri.fileExtension()).isVSMFile(); } return false; } + + private URI getUri() { + URI uri = null; + try { + uri = resource.getURI(); + } catch (IllegalStateException e) { + // Silent catch: if an issue occurred while getting this Resource's + // URI, then it will not be considered as a representation resource + } + return uri; + } } |
