[R] Encapsulate fields of Parameter
- Improve nullable handling
Change-Id: Ifa4c0e37d5725a9dd03000bc5bc892ff37436379
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
index ab3b19e..d4a4b7f 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
@@ -1594,7 +1594,7 @@
ITER_ARGS: for (int i= 0; i < args.allocatedArgs.length; i++) {
final RAstNode argValue= args.getArgValueNode(i);
if (argValue != null) {
- if (matchesNameType(Parameters.PACKAGE_NAME, this.params.get(i).type, argValue)) {
+ if (matchesNameType(Parameters.PACKAGE_NAME, this.params.get(i).getType(), argValue)) {
final ElementAccess access= new ElementAccess.Namespace(node, argValue);
access.nameNode= argValue;
@SuppressWarnings("null")
@@ -1604,7 +1604,7 @@
SourceAnalyzer.this.argValueToIgnore.add(argValue);
continue ITER_ARGS;
}
- if ((this.params.get(i).type & Parameters.METHOD_NAME) != 0
+ if ((this.params.get(i).getType() & Parameters.METHOD_NAME) != 0
&& argValue.getNodeType() == NodeType.STRING_CONST) {
final ElementAccess access= new ElementAccess.Default(node);
access.flags= ElementAccess.A_READ | ElementAccess.A_FUNC;
@@ -1614,14 +1614,14 @@
SourceAnalyzer.this.argValueToIgnore.add(argValue);
continue ITER_ARGS;
}
- if ((this.params.get(i).type & Parameters.CLASS_NAME) != 0
+ if ((this.params.get(i).getType() & Parameters.CLASS_NAME) != 0
&& argValue.getNodeType() == NodeType.STRING_CONST) {
registerSimpleClassAccessInEnvir(node, argValue);
SourceAnalyzer.this.argValueToIgnore.add(argValue);
continue ITER_ARGS;
}
- if ((this.params.get(i).type & Parameters.UNSPECIFIC_NAME) != 0
+ if ((this.params.get(i).getType() & Parameters.UNSPECIFIC_NAME) != 0
&& argValue.getNodeType() == NodeType.STRING_CONST) {
final ElementAccess access= new ElementAccess.Default(node);
access.flags= ElementAccess.A_READ;
@@ -1631,7 +1631,7 @@
SourceAnalyzer.this.argValueToIgnore.add(argValue);
continue ITER_ARGS;
}
- if (matchesNameType(Parameters.HELP_TOPIC_NAME, this.params.get(i).type, argValue)) {
+ if (matchesNameType(Parameters.HELP_TOPIC_NAME, this.params.get(i).getType(), argValue)) {
SourceAnalyzer.this.argValueToIgnore.add(argValue);
continue ITER_ARGS;
}
@@ -2094,7 +2094,7 @@
// we copy the names
if (signatureArgNodes != null) { // explicit
ARGS: for (int i= 0; i < baseParams.size(); i++) {
- final String name= baseParams.get(i).name;
+ final String name= baseParams.get(i).getName();
if (name != null) {
for (int j= 0; j < signatureArgNodes.length; j++) {
if (isTextEqualTo(signatureArgNodes[j], name)) {
@@ -2109,12 +2109,12 @@
continue ARGS;
}
}
- else if (baseParams.size() == 1 && "...".equals(baseParams.get(0).name)) {
+ else if (baseParams.size() == 1 && "...".equals(baseParams.get(0).getName())) {
parametersBuilder.add("...", 0, "<?>");
}
else {
ARGS: for (int i= 0; i < baseParams.size(); i++) {
- final String name= baseParams.get(i).name;
+ final String name= baseParams.get(i).getName();
if (name != null) {
if (!name.equals("...")) {
parametersBuilder.add(name, 0, "<?>");
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/FunctionToS4MethodRefactoring.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/FunctionToS4MethodRefactoring.java
index 28e9d1e..d4e3221 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/FunctionToS4MethodRefactoring.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/refactoring/FunctionToS4MethodRefactoring.java
@@ -14,6 +14,8 @@
package org.eclipse.statet.r.core.refactoring;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullElse;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -91,7 +93,7 @@
}
public String getName() {
- return (this.parameter.name != null) ? this.parameter.name : ""; //$NON-NLS-1$
+ return nonNullElse(this.parameter.getName(), ""); //$NON-NLS-1$
}
public boolean getUseAsGenericArgumentDefault() {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rmodel/Parameters.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rmodel/Parameters.java
index 9ff5d7c..7a9936b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rmodel/Parameters.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rmodel/Parameters.java
@@ -65,18 +65,36 @@
public final int index;
- public final @Nullable String name;
- public final int type;
- public final @Nullable String className;
-// String defaultAsCode;
- Parameter(final int index, final @Nullable String name, final int type, final @Nullable String className) {
+ private final @Nullable String name;
+
+ private final int type;
+
+ private final @Nullable String className;
+// private final String defaultAsCode;
+
+
+ Parameter(final int index, final @Nullable String name, final int type,
+ final @Nullable String className) {
this.index= index;
this.name= name;
this.type= type;
this.className= className;
}
+
+ public @Nullable String getName() {
+ return this.name;
+ }
+
+ public int getType() {
+ return this.type;
+ }
+
+ public @Nullable String getClassName() {
+ return this.className;
+ }
+
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/ast/RAsts.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/ast/RAsts.java
index 3394c43..c16dc26 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/ast/RAsts.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/source/ast/RAsts.java
@@ -629,17 +629,22 @@
ITER_ARGS: for (int nodeIdx= fCallArgStartIdx; nodeIdx < nodeArgCount; nodeIdx++) {
if (argsNode2paramIdx[nodeIdx] == TEST_PARTIAL) {
final FCall.Arg argNode= fCallArgs.getChild(nodeIdx - fCallArgStartIdx);
- final String name= argNode.getNameChild().getText();
int matchIdx= -1;
- for (int defIdx= 0; defIdx < testStop; defIdx++) {
- if (allocatedArgs[defIdx] == null && parameters.get(defIdx).name.startsWith(name)) {
- if (matchIdx < 0) {
- matchIdx= defIdx;
- }
- else {
- failCount++;
- argsNode2paramIdx[nodeIdx]= FAIL;
- continue ITER_ARGS;
+ final String name= argNode.getNameChild().getText();
+ if (name != null) {
+ for (int defIdx= 0; defIdx < testStop; defIdx++) {
+ final String paramName;
+ if (allocatedArgs[defIdx] == null
+ && (paramName= parameters.get(defIdx).getName()) != null
+ && paramName.startsWith(name) ) {
+ if (matchIdx < 0) {
+ matchIdx= defIdx;
+ }
+ else {
+ failCount++;
+ argsNode2paramIdx[nodeIdx]= FAIL;
+ continue ITER_ARGS;
+ }
}
}
}
diff --git a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RFunctionValue.java b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RFunctionValue.java
index 08e25f5..fa21580 100644
--- a/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RFunctionValue.java
+++ b/r/org.eclipse.statet.r.debug.core/src/org/eclipse/statet/internal/r/debug/core/model/RFunctionValue.java
@@ -44,17 +44,10 @@
sb.append("<unknown>"); //$NON-NLS-1$
}
else if (params.size() > 0) {
- { final Parameter parameter= params.get(0);
- if (parameter.name != null) {
- sb.append(parameter.name);
- }
- }
+ append(sb, params.get(0));
{ for (int i= 1; i < params.size(); i++) {
sb.append(", "); //$NON-NLS-1$
- final Parameter param= params.get(i);
- if (param.name != null) {
- sb.append(param.name);
- }
+ append(sb, params.get(i));
}
}
}
@@ -64,4 +57,11 @@
return super.getValueString();
}
+ private void append(final StringBuilder sb, final Parameter parameter) {
+ final String name= parameter.getName();
+ if (name != null) {
+ sb.append(name);
+ }
+ }
+
}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/CodeGeneration.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/CodeGeneration.java
index 0be42e5..11e7247 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/CodeGeneration.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/codegeneration/CodeGeneration.java
@@ -122,8 +122,11 @@
final int count = parameters.size();
tags = new String[count];
for (int i = 0; i < count; i++) {
+ final String paramName= parameters.get(i).getName();
tagBuffer.append("@param "); //$NON-NLS-1$
- tagBuffer.append(parameters.get(i).name);
+ if (paramName != null) {
+ tagBuffer.append(paramName);
+ }
tagBuffer.append(" "); //$NON-NLS-1$
tags[i] = tagBuffer.toString();
tagBuffer.setLength(0);
@@ -249,11 +252,11 @@
if (parameters != null) {
final int count = parameters.size();
for (int i = 0; i < count; i++) {
- final var parameter= parameters.get(i);
- if (parameter.className == null || parameter.className.equals("ANY")) { //$NON-NLS-1$
+ final var className= parameters.get(i).getClassName();
+ if (className == null || className.equals("ANY")) { //$NON-NLS-1$
break;
}
- sb.append(parameter.className);
+ sb.append(className);
sb.append(","); //$NON-NLS-1$
}
if (sb.length() > 0) {
@@ -279,8 +282,11 @@
final int count = parameters.size();
paramTags = new String[count];
for (int i = 0; i < count; i++) {
+ final String paramName= parameters.get(i).getName();
sb.append("@param "); //$NON-NLS-1$
- sb.append(parameters.get(i).name);
+ if (paramName != null) {
+ sb.append(paramName);
+ }
sb.append(" "); //$NON-NLS-1$
paramTags[i] = sb.toString();
sb.setLength(0);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/RLabelProvider.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/RLabelProvider.java
index 3d88b87..f6f085c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/RLabelProvider.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/RLabelProvider.java
@@ -779,34 +779,46 @@
}
private void appendParameter(final StyledString text, final Parameter parameter) {
- if (parameter.name != null) {
- text.append(parameter.name, this.defaultStyler);
+ { final String name= parameter.getName();
+ if (name != null) {
+ text.append(name, this.defaultStyler);
+ }
}
}
private void appendParameter(final StringBuilder text, final Parameter parameter) {
- if (parameter.name != null) {
- text.append(parameter.name);
+ { final String name= parameter.getName();
+ if (name != null) {
+ text.append(name);
+ }
}
}
private void appendParameterWithType(final StyledString text, final Parameter parameter) {
- if (parameter.name != null) {
- text.append(parameter.name, this.defaultStyler);
+ { final String name= parameter.getName();
+ if (name != null) {
+ text.append(name, this.defaultStyler);
+ }
}
- if (parameter.className != null) {
- text.append(" : ", StyledString.DECORATIONS_STYLER); //$NON-NLS-1$
- text.append(parameter.className, StyledString.DECORATIONS_STYLER);
+ { final var className= parameter.getClassName();
+ if (className != null) {
+ text.append(" : ", StyledString.DECORATIONS_STYLER); //$NON-NLS-1$
+ text.append(className, StyledString.DECORATIONS_STYLER);
+ }
}
}
private void appendParameterWithType(final StringBuilder text, final Parameter parameter) {
- if (parameter.name != null) {
- text.append(parameter.name);
+ { final String name= parameter.getName();
+ if (name != null) {
+ text.append(name);
+ }
}
- if (parameter.className != null) {
- text.append(" : "); //$NON-NLS-1$
- text.append(parameter.className);
+ { final var className= parameter.getClassName();
+ if (className != null) {
+ text.append(" : "); //$NON-NLS-1$
+ text.append(className);
+ }
}
}
@@ -834,12 +846,16 @@
}
private void appendParameterLong(final StringBuilder sb, final Parameter parameter) {
- if (parameter.name != null) {
- sb.append(parameter.name);
+ { final String name= parameter.getName();
+ if (name != null) {
+ sb.append(name);
+ }
}
- if (parameter.className != null) {
- sb.append(" : "); //$NON-NLS-1$
- sb.append(parameter.className);
+ { final var className= parameter.getClassName();
+ if (className != null) {
+ sb.append(" : "); //$NON-NLS-1$
+ sb.append(className);
+ }
}
}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RElementCompletionComputer.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RElementCompletionComputer.java
index 0a5f977..639d693 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RElementCompletionComputer.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RElementCompletionComputer.java
@@ -660,7 +660,7 @@
}
- protected final boolean isPackageArg(final String name) {
+ protected final boolean isPackageArg(final @Nullable String name) {
return ("package".equals(name));
}
@@ -707,10 +707,10 @@
private boolean isValidNameContext(final Parameters.Parameter parameter) {
if (RElementCompletionComputer.this.inString) {
- return ((parameter.type & Parameters.NAME_AS_STRING) != 0);
+ return ((parameter.getType() & Parameters.NAME_AS_STRING) != 0);
}
else {
- return ((parameter.type & Parameters.NAME_AS_SYMBOL) != 0);
+ return ((parameter.getType() & Parameters.NAME_AS_SYMBOL) != 0);
}
}
@@ -718,22 +718,22 @@
final boolean guess, final int relevance) {
final var parameter= args.getParameterForFCall(argIdx);
if (parameter != null) {
- final boolean typedDef= (parameter.type != 0);
+ final boolean typedDef= (parameter.getType() != 0);
if (RElementCompletionComputer.this.pkgNamePrio == NA_PRIO) {
if (typedDef) {
- if ((parameter.type & Parameters.PACKAGE_NAME) != 0
+ if ((parameter.getType() & Parameters.PACKAGE_NAME) != 0
&& isValidNameContext(parameter) ) {
RElementCompletionComputer.this.pkgNamePrio= ARG_TYPE_PRIO + relevance;
}
}
else if (guess && RElementCompletionComputer.this.inString
- && isPackageArg(parameter.name) ) {
+ && isPackageArg(parameter.getName()) ) {
RElementCompletionComputer.this.pkgNamePrio= ARG_TYPE_PRIO + relevance;
}
}
if (RElementCompletionComputer.this.helpTopicPrio == NA_PRIO) {
if (typedDef) {
- if ((parameter.type & Parameters.HELP_TOPIC_NAME) != 0
+ if ((parameter.getType() & Parameters.HELP_TOPIC_NAME) != 0
&& isValidNameContext(parameter) ) {
RElementCompletionComputer.this.helpTopicPrio= ARG_TYPE_PRIO + relevance;
}
@@ -772,10 +772,11 @@
if (argName) {
for (int i= 0; i < elementParameters.size(); i++) {
final var param= elementParameters.get(i);
- if (param.name != null && param.name.length() > 0 && !param.name.equals("...")) {
- if (parameters.matchesNamePattern(param.name)
- && this.argNames.add(param.name)) {
- final RElementName name= RElementName.create(RElementName.MAIN_DEFAULT, param.name);
+ final String paramName= param.getName();
+ if (paramName != null && !paramName.isEmpty() && !paramName.equals("...")) {
+ if (parameters.matchesNamePattern(paramName)
+ && this.argNames.add(paramName) ) {
+ final RElementName name= RElementName.create(RElementName.MAIN_DEFAULT, param.getName());
parameters.baseRelevance= contextRelevance + ARG_NAME_PRIO;
parameters.replacementName= name;
parameters.element= element;