From 007db6c60ecb2fec90c270108fdd11116689d9db Mon Sep 17 00:00:00 2001 From: Piotr Tomiak Date: Tue, 24 Sep 2024 10:41:57 +0200 Subject: [PATCH] RelaxNg: Avoid NPEs to improve performance when calculating element descriptors GitOrigin-RevId: 9260e29679da728aeba7119accf2214b5dcfd460 --- .../descriptors/RecursionSaveWalker.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RecursionSaveWalker.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RecursionSaveWalker.java index d672e6678fa0..0ad4cf6113f0 100644 --- a/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RecursionSaveWalker.java +++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/model/descriptors/RecursionSaveWalker.java @@ -29,9 +29,11 @@ public class RecursionSaveWalker extends DPatternWalker { @Override public Void onGrammar(DGrammarPattern p) { if (myVisited.add(p)) { - try { - return super.onGrammar(p); - } catch (NullPointerException e) { + var start = p.getStart(); + if (start != null) { + return start.accept(this); + } + else { return null; // missing start pattern } } @@ -41,9 +43,11 @@ public class RecursionSaveWalker extends DPatternWalker { @Override public Void onRef(DRefPattern p) { if (myVisited.add(p)) { - try { - return super.onRef(p); - } catch (NullPointerException e) { + var target = p.getTarget(); + var pattern = target != null ? target.getPattern() : null; + if (pattern != null) { + return pattern.accept(this); + } else { return null; // unresolved ref } } @@ -53,9 +57,11 @@ public class RecursionSaveWalker extends DPatternWalker { @Override protected Void onUnary(DUnaryPattern p) { if (myVisited.add(p)) { - try { - return super.onUnary(p); - } catch (NullPointerException e) { + var child = p.getChild(); + if (child != null) { + child.accept(this); + } + else { return null; // empty element } }