From 59b1c94f50645c3ca754a1c6c8baf10a88a901e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Porras=20Campo?= Date: Wed, 29 Jan 2025 09:04:31 +0100 Subject: [PATCH] Lazy creation of the Set resolving MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By doing that, when resources already linked are loaded from storage or when no cyclic resolution takes place, no memory needs to be allocated for the set. Signed-off-by: Rubén Porras Campo --- .../eclipse/xtext/xbase/resource/BatchLinkableResource.java | 4 ++-- .../org/eclipse/xtext/linking/lazy/LazyLinkingResource.java | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/resource/BatchLinkableResource.java b/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/resource/BatchLinkableResource.java index 6ffe292cfc5..322549d5a28 100644 --- a/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/resource/BatchLinkableResource.java +++ b/org.eclipse.xtext.xbase/src/org/eclipse/xtext/xbase/resource/BatchLinkableResource.java @@ -220,7 +220,7 @@ public void ensureJvmMembersInitialized() { LinkedHashSet> before = resolving; try { eSetDeliver(false); - if (!before.isEmpty()) { + if (before != null && !before.isEmpty()) { resolving = new LinkedHashSet>(); } if (isInitializingJvmMembers) { @@ -237,7 +237,7 @@ public void ensureJvmMembersInitialized() { } catch (Exception e) { log.error(e.getMessage(), e); } finally { - if (!before.isEmpty()) { + if (before != null && !before.isEmpty()) { resolving = before; } eSetDeliver(wasDeliver); diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/linking/lazy/LazyLinkingResource.java b/org.eclipse.xtext/src/org/eclipse/xtext/linking/lazy/LazyLinkingResource.java index e1a7bb92325..2867b00391d 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/linking/lazy/LazyLinkingResource.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/linking/lazy/LazyLinkingResource.java @@ -124,7 +124,7 @@ protected void doLinking() { /** * @since 2.4 */ - protected LinkedHashSet> resolving = Sets.newLinkedHashSet(); + protected LinkedHashSet> resolving; /** * resolves any lazy cross references in this resource, adding Issues for unresolvable elements to this resource. @@ -250,6 +250,9 @@ public synchronized EObject getEObject(String uriFragment) { protected EObject getEObject(String uriFragment, Triple triple) throws AssertionError { cyclicLinkingDetectionCounter++; if (cyclicLinkingDetectionCounter > cyclicLinkingDectectionCounterLimit) { + if (resolving == null) { + resolving = Sets.newLinkedHashSet(); + } if (!resolving.add(triple)) { return handleCyclicResolution(triple); }