Skip re-expanding properties for local properties When only local task defined properties (no change nor inherited) are used in a task, then skip expanding tasks on every change since they cannot be different. Change-Id: If5d1d625467cd1b0bdd357d7ed4e7b192716bb6f
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/Properties.java b/src/main/java/com/googlesource/gerrit/plugins/task/Properties.java index 3225244..0812004 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/task/Properties.java +++ b/src/main/java/com/googlesource/gerrit/plugins/task/Properties.java
@@ -40,6 +40,8 @@ protected final Task origTask; protected final CopyOnWrite<Task> task; protected Expander expander; + protected boolean init = true; + protected boolean isTaskRefreshNeeded; public Properties() { this(null, null); @@ -57,11 +59,20 @@ Loader loader = new Loader(changeData); expander = new Expander(n -> loader.load(n)); - Map<String, String> exported = expander.expand(origTask.exported); - if (exported != origTask.exported) { - task.getForWrite().exported = exported; + if (isTaskRefreshNeeded || init) { + Map<String, String> exported = expander.expand(origTask.exported); + if (exported != origTask.exported) { + task.getForWrite().exported = exported; + } + + expander.expand(task, Collections.emptySet()); + + if (init) { + init = false; + isTaskRefreshNeeded = loader.isNonTaskDefinedPropertyLoaded(); + } } - return expander.expand(task, Collections.emptySet()); + return task.getForRead(); } /** Use to expand properties specifically for NamesFactories. */ @@ -75,7 +86,8 @@ protected class Loader { protected final ChangeData changeData; protected final Function<String, String> inheritedMapper; - public Change change; + protected Change change; + protected boolean isInheritedPropertyLoaded; public Loader(ChangeData changeData) { this.changeData = changeData; @@ -86,6 +98,10 @@ } } + public boolean isNonTaskDefinedPropertyLoaded() { + return change != null || isInheritedPropertyLoaded; + } + public String load(String name) { if (name.startsWith("_")) { return internal(name); @@ -95,6 +111,9 @@ value = origTask.properties.get(name); if (value == null) { value = inheritedMapper.apply(name); + if (!value.isEmpty()) { + isInheritedPropertyLoaded = true; + } } } return value;