Bug 574422: [Variables] Fix possible NPE in checkValue
Change-Id: I808d241689127ef02900897aa818fe91bbe4b59b
diff --git a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText2.java b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText2.java
index d0fedf1..578f1e1 100644
--- a/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText2.java
+++ b/ecommons/org.eclipse.statet.ecommons.coremisc/src/org/eclipse/statet/ecommons/variables/core/VariableText2.java
@@ -14,10 +14,7 @@
package org.eclipse.statet.ecommons.variables.core;
-import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.PARAMETER;
-import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.RETURN_TYPE;
-import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.TYPE_ARGUMENT;
-import static org.eclipse.statet.jcommons.lang.NullDefaultLocation.TYPE_BOUND;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullElse;
import java.util.ArrayList;
@@ -35,7 +32,6 @@
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.osgi.util.NLS;
-import org.eclipse.statet.jcommons.lang.NonNull;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -105,7 +101,6 @@
private static final String RESOLVE_FAILED_VALUE= new String("<unresolved>"); //$NON-NLS-1$
- @NonNullByDefault({ PARAMETER, RETURN_TYPE, TYPE_BOUND, TYPE_ARGUMENT })
private static class VariableReference {
/** Offset of '$' */
@@ -115,11 +110,11 @@
/** Name of the variable */
- private final @NonNull String name;
+ private final String name;
- private IStringVariable variable;
+ private @Nullable IStringVariable variable;
- private String value;
+ private @Nullable String value;
public VariableReference(final int begin, final int end, final String name) {
@@ -251,14 +246,16 @@
variable= this.extraVariables.get(name);
if (variable == null) {
- if (this.variableManager == null) {
- this.variableManager= VariablesPlugin.getDefault().getStringVariableManager();
+ var variableManager= this.variableManager;
+ if (variableManager == null) {
+ variableManager= VariablesPlugin.getDefault().getStringVariableManager();
+ this.variableManager= variableManager;
}
- variable= this.variableManager.getValueVariable(name);
+ variable= variableManager.getValueVariable(name);
if (variable == null) {
- variable= this.variableManager.getDynamicVariable(name);
+ variable= variableManager.getDynamicVariable(name);
}
}
@@ -375,9 +372,10 @@
}
}
for (final VariableReference ref : this.references) {
- if (ref.variable != null && ref.hasArg()) {
- if (!(ref.variable instanceof IDynamicVariable)
- || !((IDynamicVariable) ref.variable).supportsArgument()) {
+ final var variable= ref.variable;
+ if (variable != null && ref.hasArg()) {
+ if (!(variable instanceof IDynamicVariable)
+ || !((IDynamicVariable)variable).supportsArgument()) {
this.reporter.problemFound(new Status(IStatus.ERROR, ECommonsVariablesCore.BUNDLE_ID,
NLS.bind(Messages.Validation_Ref_VarNoArgs_message,
ref.name )),
@@ -418,12 +416,13 @@
arg= null;
}
- if (ref.variable == null) {
+ final var variable= ref.variable;
+ if (variable == null) {
ref.value= RESOLVE_FAILED_VALUE;
continue;
}
- ref.value= resolve(ref.variable, arg);
+ ref.value= resolve(variable, arg);
}
catch (final CoreException e) {
ref.value= RESOLVE_FAILED_VALUE;
@@ -445,8 +444,9 @@
while (refIdx < this.references.size()) {
final VariableReference ref= this.references.get(refIdx++);
if (ref.begin >= begin && ref.begin < end) {
+ final String value= nonNullAssert(ref.value);
newText.append(text, begin, ref.begin);
- newText.append(ref.value);
+ newText.append(value);
begin= ref.end;
}
}
@@ -460,8 +460,13 @@
while (refIdx < this.references.size()) {
final VariableReference ref= this.references.get(refIdx++);
if (ref.begin >= begin && ref.begin < end) {
+ String value= nonNullAssert(ref.value);
+ final var variable= ref.variable;
+ if (variable != null) {
+ value= checkValue(variable, value);
+ }
newText.append(text, begin, ref.begin);
- newText.append(checkValue(ref.variable, ref.value));
+ newText.append(value);
begin= ref.end;
}
}
@@ -473,10 +478,10 @@
throws CoreException {
final String value;
if (variable instanceof IDynamicVariable) {
- value= ((IDynamicVariable) variable).getValue(argument);
+ value= ((IDynamicVariable)variable).getValue(argument);
}
else {
- value= ((IValueVariable) variable).getValue();
+ value= ((IValueVariable)variable).getValue();
// if (value != null && value.indexOf("${") >= 0) {
// value= VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(value, true);
// }