Bug 570738: [R-Source] Improve RAst
- Remove RAstNode.getChildren (no longer required, inefficient)
- Remove SpecList (no longer required)
- Change Arg lists to ImList for easier access
- Add SubIndexed.Args.separatorOffsets
- Correct return type of SubIndexed.Args.getChild
- Remove abandoned AST node type C_IN
Change-Id: Id4d4a5101bc784d2f1da19552351de28c8f197e4
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
index b58224e..12c1b93 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CForLoop.java
@@ -83,11 +83,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.varSymbol, this.condExpr.node, this.loopExpr.node };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.varSymbol == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
index 4bb2bfd..4d1a762 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CIfElse.java
@@ -94,16 +94,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- if (this.withElse) {
- return new RAstNode[] { this.condExpr.node, this.thenExpr.node, this.elseExpr.node };
- }
- else {
- return new RAstNode[] { this.condExpr.node, this.thenExpr.node };
- }
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.condExpr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CLoopCommand.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CLoopCommand.java
index 9c13316..7b188b1 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CLoopCommand.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CLoopCommand.java
@@ -107,11 +107,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return NO_CHILDREN;
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
return -1;
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
index a6489f8..85cd880 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CRepeatLoop.java
@@ -73,11 +73,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.loopExpr.node };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.loopExpr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
index e9bb0c8..10ff440 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/CWhileLoop.java
@@ -79,11 +79,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.condExpr.node, this.loopExpr.node };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.condExpr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Comment.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Comment.java
index f1ad05a..3a3b553 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Comment.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Comment.java
@@ -62,11 +62,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return NO_CHILDREN;
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
return -1;
}
@@ -118,11 +113,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return NO_CHILDREN;
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
return -1;
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuComment.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuComment.java
index d4d03c9..2dcdc0a 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuComment.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuComment.java
@@ -18,7 +18,6 @@
import java.util.List;
import org.eclipse.statet.jcommons.collections.ImList;
-import org.eclipse.statet.jcommons.lang.NonNull;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -81,13 +80,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- final RAstNode[] children= new @NonNull RAstNode[this.lines.length];
- System.arraycopy(this.lines, 0, children, 0, this.lines.length);
- return children;
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
for (int i= 0; i < this.lines.length; i++) {
if (this.lines[i] == child) {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuTag.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuTag.java
index a7dfbf7..434ee11 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuTag.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuTag.java
@@ -17,7 +17,6 @@
import java.lang.reflect.InvocationTargetException;
import java.util.Objects;
-import org.eclipse.statet.jcommons.lang.NonNull;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -56,13 +55,6 @@
@Override
- public final RAstNode[] getChildren() {
- final RAstNode[] children= new @NonNull RAstNode[this.fragments.length];
- System.arraycopy(this.fragments, 0, children, 0, this.fragments.length);
- return children;
- }
-
- @Override
public final boolean hasChildren() {
return (this.fragments.length > 0);
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuText.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuText.java
index 03bfed1..2874393 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuText.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/DocuText.java
@@ -54,11 +54,6 @@
@Override
- public final RAstNode[] getChildren() {
- return NO_CHILDREN;
- }
-
- @Override
public final boolean hasChildren() {
return false;
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
index 6b3b7f1..184cd24 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Dummy.java
@@ -76,11 +76,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return NO_CHILDREN;
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
return -1;
}
@@ -163,11 +158,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.leftExpr.node, this.rightExpr.node };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.leftExpr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
index d4eafe4..7ffe800 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/ExpressionList.java
@@ -20,7 +20,6 @@
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.statet.jcommons.lang.NonNull;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -48,16 +47,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- final int n= this.expressions.size();
- final RAstNode[] children= new @NonNull RAstNode[n];
- for (int i= 0; i < n; i++) {
- children[i]= this.expressions.get(i).node;
- }
- return children;
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
for (int i= this.expressions.size() - 1; i >= 0; i--) {
if (this.expressions.get(i).node == child) {
@@ -79,7 +68,9 @@
@Override
public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
- acceptChildrenExpr(visitor, this.expressions);
+ for (final Expression expr : this.expressions) {
+ expr.node.acceptInR(visitor);
+ }
}
@Override
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
index f1b238d..1130b80 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FCall.java
@@ -17,12 +17,10 @@
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_EXPR_AS_REF_MISSING;
import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.statet.jcommons.collections.IntArrayList;
-import org.eclipse.statet.jcommons.collections.IntList;
-import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImIntList;
+import org.eclipse.statet.jcommons.collections.ImList;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -41,21 +39,25 @@
public static final class Args extends RAstNode {
- final List<Arg> specs;
- final IntList sepList;
+ private ImList<Arg> args;
+ private ImIntList sepOffsets;
+ @SuppressWarnings("null")
Args(final FCall parent) {
this.rParent= parent;
- this.specs= new ArrayList<>(1);
- this.sepList= new IntArrayList(1);
}
// Args(final List<Arg> args) {
-// rParent= null;
-// specs= args;
+// this.rParent= null;
+// this.args= args;
// }
+ void finish(final RParser.ArgsBuilder<Arg> argsBuilder) {
+ this.args= ImCollections.toList(argsBuilder.args);
+ this.sepOffsets= ImCollections.toIntList(argsBuilder.sepOffsets);
+ }
+
@Override
public final NodeType getNodeType() {
@@ -67,13 +69,8 @@
return null;
}
- public int getSeparatorOffset(final int index) {
- return this.sepList.getAt(index);
- }
-
- @Override
- public final void acceptInR(final RAstVisitor visitor) throws InvocationTargetException {
- visitor.visit(this);
+ public ImIntList getSeparatorOffsets() {
+ return this.sepOffsets;
}
@@ -84,42 +81,48 @@
@Override
public final boolean hasChildren() {
- return (!this.specs.isEmpty());
+ return (!this.args.isEmpty());
}
@Override
public final int getChildCount() {
- return this.specs.size();
+ return this.args.size();
}
@Override
public final Arg getChild(final int index) {
- return this.specs.get(index);
- }
-
- @Override
- public final Arg[] getChildren() {
- return this.specs.toArray(new @NonNull Arg[this.specs.size()]);
+ return this.args.get(index);
}
@Override
public final int getChildIndex(final AstNode child) {
- for (int i= this.specs.size() - 1; i >= 0; i--) {
- if (this.specs.get(i) == child) {
+ for (int i= this.args.size() - 1; i >= 0; i--) {
+ if (this.args.get(i) == child) {
return i;
}
}
return -1;
}
+ public ImList<Arg> getArgChildren() {
+ return this.args;
+ }
+
+ @Override
+ public final void acceptInR(final RAstVisitor visitor) throws InvocationTargetException {
+ visitor.visit(this);
+ }
+
@Override
public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
- acceptChildren(visitor, this.specs);
+ for (final RAstNode arg : this.args) {
+ arg.acceptInR(visitor);
+ }
}
@Override
public final void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
- for (final RAstNode child : this.specs) {
+ for (final RAstNode child : this.args) {
visitor.visit(child);
}
}
@@ -230,11 +233,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.refExpr.node, this.args };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.refExpr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
index ad7684c..91af465 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/FDef.java
@@ -19,10 +19,9 @@
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS3_FDEF;
import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImList;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -79,12 +78,25 @@
public static final class Args extends RAstNode {
- final List<Arg> specs;
+ private ImList<Arg> args;
+// private ImIntList sepOffsets;
+ @SuppressWarnings("null")
Args(final FDef parent) {
this.rParent= parent;
- this.specs= new ArrayList<>(0);
+ }
+
+ void finish(final RParser.ArgsBuilder<Arg> argsBuilder) {
+ this.args= ImCollections.toList(argsBuilder.args);
+// this.sepOffsets= ImCollections.toIntList(argsBuilder.sepOffsets);
+ }
+
+ void finishMissing(final int offset) {
+ this.startOffset= offset;
+ this.endOffset= offset;
+ this.args= ImCollections.emptyList();
+// this.sepOffsets= ImCollections.toIntList(argsBuilder.sepOffsets);
}
@@ -106,34 +118,33 @@
@Override
public final boolean hasChildren() {
- return (!this.specs.isEmpty());
+ return (!this.args.isEmpty());
}
@Override
public final int getChildCount() {
- return this.specs.size();
+ return this.args.size();
}
@Override
public final Arg getChild(final int index) {
- return this.specs.get(index);
- }
-
- @Override
- public final Arg[] getChildren() {
- return this.specs.toArray(new @NonNull Arg[this.specs.size()]);
+ return this.args.get(index);
}
@Override
public final int getChildIndex(final AstNode child) {
- for (int i= this.specs.size() - 1; i >= 0; i--) {
- if (this.specs.get(i) == child) {
+ for (int i= this.args.size() - 1; i >= 0; i--) {
+ if (this.args.get(i) == child) {
return i;
}
}
return -1;
}
+ public ImList<Arg> getArgChildren() {
+ return this.args;
+ }
+
@Override
public final void acceptInR(final RAstVisitor visitor) throws InvocationTargetException {
visitor.visit(this);
@@ -141,12 +152,14 @@
@Override
public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
- acceptChildren(visitor, this.specs);
+ for (final RAstNode arg : this.args) {
+ arg.acceptInR(visitor);
+ }
}
@Override
public final void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
- for (final RAstNode child : this.specs) {
+ for (final RAstNode child : this.args) {
visitor.visit(child);
}
}
@@ -236,16 +249,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- if (this.withDefault) {
- return new RAstNode[] { this.argName, this.defaultExpr.node };
- }
- else {
- return new RAstNode[] { this.argName };
- }
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.argName == child) {
return 0;
@@ -331,7 +334,7 @@
int argsOpenOffset= NA_OFFSET;
- Args args= new Args(this);
+ final Args args= new Args(this);
int argsCloseOffset= NA_OFFSET;
final Expression expr= new Expression();
@@ -374,11 +377,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.args, this.expr.node };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.args == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
index 0614c1f..a0a2fe7 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Group.java
@@ -73,11 +73,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.expr.node };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.expr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
index 0dca0bb..cc26445 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Help.java
@@ -83,15 +83,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- final RAstNode typeNode= this.leftExpr.node;
- if (typeNode != null) {
- return new RAstNode[] { typeNode, this.rightExpr.node };
- }
- return new RAstNode[] { this.rightExpr.node };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.leftExpr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
index 50812f8..2e555a6 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Model.java
@@ -81,15 +81,6 @@
throw new IndexOutOfBoundsException();
}
- @Override
- public final RAstNode[] getChildren() {
- final RAstNode leftNode= this.leftExpr.node;
- if (leftNode != null) {
- return new RAstNode[] { leftNode, this.rightExpr.node };
- }
- return new RAstNode[] { this.rightExpr.node };
- }
-
public final boolean hasLeft() {
return (this.leftExpr.node != null);
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NSGet.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NSGet.java
index 1ee86c8..311a3e8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NSGet.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NSGet.java
@@ -106,11 +106,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.namespace, this.element };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.namespace == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NodeType.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NodeType.java
index c419d02..acc08ec 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NodeType.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NodeType.java
@@ -73,7 +73,6 @@
C_IF ("if", 100001, Assoc.RIGHTSTD), //$NON-NLS-1$
C_FOR ("for", 100002, Assoc.LEFTSTD), //$NON-NLS-1$
- C_IN ("in", 100002, Assoc.LEFTSTD), //$NON-NLS-1$
C_WHILE ("while", 100002, Assoc.LEFTSTD), //$NON-NLS-1$
C_REPEAT ("repeat", 100002, Assoc.LEFTSTD), //$NON-NLS-1$
C_NEXT ("next", 1, Assoc.TERM), //$NON-NLS-1$
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NullConst.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NullConst.java
index 695ae99..7aa44b5 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NullConst.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/NullConst.java
@@ -62,11 +62,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return NO_CHILDREN;
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
return -1;
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
index 107d17f..9b47a1c 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAstNode.java
@@ -17,7 +17,6 @@
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS_OK;
import java.lang.reflect.InvocationTargetException;
-import java.util.List;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -99,7 +98,6 @@
public abstract int getChildCount();
@Override
public abstract RAstNode getChild(int index);
- public abstract RAstNode[] getChildren();
@Override
public abstract int getChildIndex(AstNode child);
@@ -121,9 +119,10 @@
int getEqualsIndex(final RAstNode element) {
- final RAstNode[] children= getChildren();
int index= 0;
- for (final RAstNode child : children) {
+ final int n= getChildCount();
+ for (int i= 0; i < n; i++) {
+ final RAstNode child= getChild(i);
if (child == element) {
return index;
}
@@ -139,18 +138,6 @@
public abstract void acceptInRChildren(RAstVisitor visitor) throws InvocationTargetException;
- protected final void acceptChildren(final RAstVisitor visitor, final List<? extends RAstNode> children) throws InvocationTargetException {
- for (final RAstNode child : children) {
- child.acceptInR(visitor);
- }
- }
-
- protected final void acceptChildrenExpr(final RAstVisitor visitor, final List<Expression> children) throws InvocationTargetException {
- for (final Expression expr : children) {
- expr.node.acceptInR(visitor);
- }
- }
-
abstract @Nullable Expression getExpr(RAstNode child);
abstract @Nullable Expression getLeftExpr();
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
index a1ef0be..857aacc 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RAsts.java
@@ -690,7 +690,6 @@
topdown.add(parent.getChildIndex(node) + 3);
node= parent.getRParent();
continue;
- case C_IN:
case F_CALL_ARGS:
if (parent == baseNode) {
continue;
@@ -771,7 +770,6 @@
// part of parent element
case SUB_INDEXED_ARGS:
- case C_IN:
case F_CALL_ARGS:
case SUB_INDEXED_ARG: // -> ARGS
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RParser.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RParser.java
index 1d9465b..7daada6 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RParser.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/RParser.java
@@ -50,6 +50,8 @@
import java.util.Collections;
import java.util.List;
+import org.eclipse.statet.jcommons.collections.IntArrayList;
+import org.eclipse.statet.jcommons.collections.IntList;
import org.eclipse.statet.jcommons.lang.NonNull;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -83,6 +85,14 @@
public static final int LEXER_CONFIG= RLexer.SKIP_WHITESPACE;
+ static final class ArgsBuilder<T> {
+
+ final ArrayList<T> args= new ArrayList<>(8);
+
+ final IntList sepOffsets= new IntArrayList(8);
+
+ }
+
private static final class ExprContext {
final RAstNode rootNode;
final Expression rootExpr;
@@ -317,6 +327,7 @@
}
private void init() {
+ clearArgsBuilder();
if (this.roxygen != null) {
this.roxygen.init();
}
@@ -1087,7 +1098,7 @@
}
}
else {
- node.args.startOffset= node.args.endOffset= node.endOffset;
+ node.args.finishMissing(node.endOffset);
if ((node.status & STATUSFLAG_REAL_ERROR) == 0) {
node.status= STATUS12_SYNTAX_FDEF_ARGS_MISSING;
}
@@ -1126,6 +1137,7 @@
}
final void scanInFDefArgs(final FDef.Args args) {
+ final var builder= this.<FDef.Arg>getArgsBuilder();
args.startOffset= args.endOffset= args.rParent.endOffset;
ITER_ARGS : while (true) {
final FDef.Arg arg= new FDef.Arg(args);
@@ -1142,8 +1154,8 @@
arg.startOffset= arg.endOffset= this.lexer.getOffset();
break;
default:
- if (args.specs.isEmpty()) {
- return;
+ if (builder.args.isEmpty()) {
+ break ITER_ARGS;
}
arg.startOffset= arg.endOffset= args.endOffset;
break;
@@ -1162,7 +1174,7 @@
arg.endOffset= arg.defaultExpr.node.endOffset;
}
- args.specs.add(arg);
+ builder.args.add(arg);
args.status= POST_VISITOR.checkTerminal(arg);
if (this.nextType == RTerminal.COMMA) {
args.endOffset= this.lexer.getOffset() + 1;
@@ -1171,14 +1183,17 @@
continue ITER_ARGS;
}
else {
- args.startOffset= args.specs.get(0).startOffset;
+ args.startOffset= builder.args.get(0).startOffset;
args.endOffset= arg.endOffset;
- return;
+ break ITER_ARGS;
}
}
+ args.finish(builder);
+ returnArgsBuilder(builder);
}
final void scanInSpecArgs(final FCall.Args args) {
+ final var builder= this.<FCall.Arg>getArgsBuilder();
args.startOffset= args.endOffset= args.rParent.endOffset;
ITER_ARGS : while (true) {
final FCall.Arg arg= new FCall.Arg(args);
@@ -1242,27 +1257,30 @@
}
if (this.nextType == RTerminal.COMMA) {
- args.specs.add(arg);
+ builder.args.add(arg);
args.status= POST_VISITOR.checkTerminal(arg);
- args.sepList.add(this.lexer.getOffset());
+ builder.sepOffsets.add(this.lexer.getOffset());
args.endOffset= this.lexer.getOffset() + 1;
consumeToken();
readLines();
continue ITER_ARGS;
}
- // last arg before )
- if (args.specs.isEmpty() && !arg.hasChildren()) {
- return;
+ else {
+ if (arg.hasChildren() || !builder.args.isEmpty()) {
+ builder.args.add(arg);
+ args.status= POST_VISITOR.checkTerminal(arg);
+ args.startOffset= builder.args.get(0).startOffset;
+ args.endOffset= arg.endOffset;
+ }
+ break ITER_ARGS;
}
- args.specs.add(arg);
- args.status= POST_VISITOR.checkTerminal(arg);
- args.startOffset= args.specs.get(0).startOffset;
- args.endOffset= arg.endOffset;
- return;
}
+ args.finish(builder);
+ returnArgsBuilder(builder);
}
final void scanInSpecArgs(final SubIndexed.Args args) {
+ final var builder= this.<SubIndexed.Arg>getArgsBuilder();
args.startOffset= args.endOffset= args.rParent.endOffset;
ITER_ARGS : while (true) {
final SubIndexed.Arg arg= new SubIndexed.Arg(args);
@@ -1326,23 +1344,26 @@
}
if (this.nextType == RTerminal.COMMA) {
- args.specs.add(arg);
+ builder.args.add(arg);
args.status= POST_VISITOR.checkTerminal(arg);
+ builder.sepOffsets.add(this.lexer.getOffset());
args.endOffset= this.lexer.getOffset() + 1;
consumeToken();
readLines();
continue ITER_ARGS;
}
- // last arg before )
- if (args.specs.isEmpty() && !arg.hasChildren()) {
- return;
+ else {
+ if (arg.hasChildren() || !builder.args.isEmpty()) {
+ builder.args.add(arg);
+ args.status= POST_VISITOR.checkTerminal(arg);
+ args.startOffset= builder.args.get(0).startOffset;
+ args.endOffset= arg.endOffset;
+ }
+ break ITER_ARGS;
}
- args.specs.add(arg);
- args.status= POST_VISITOR.checkTerminal(arg);
- args.startOffset= args.specs.get(0).startOffset;
- args.endOffset= arg.endOffset;
- return;
}
+ args.finish(builder);
+ returnArgsBuilder(builder);
}
final boolean recoverCCont() {
@@ -1830,4 +1851,38 @@
}
}
+
+ private List<ArgsBuilder<?>> argBuilders= new ArrayList<>(16);
+ private int argBuildersIdx;
+
+ private void clearArgsBuilder() {
+ int idx= this.argBuildersIdx;
+ while (idx > 0) {
+ final var builder= this.argBuilders.get(--idx);
+ builder.args.clear();
+ builder.sepOffsets.clear();
+ }
+ this.argBuildersIdx= 0;
+ }
+
+ @SuppressWarnings("unchecked")
+ private <TArg> ArgsBuilder<TArg> getArgsBuilder() {
+ final ArgsBuilder<TArg> builder;
+ if (this.argBuildersIdx < this.argBuilders.size()) {
+ builder= (ArgsBuilder<TArg>)this.argBuilders.get(this.argBuildersIdx);
+ }
+ else {
+ builder= new ArgsBuilder<>();
+ this.argBuilders.add(builder);
+ }
+ this.argBuildersIdx++;
+ return builder;
+ }
+
+ private void returnArgsBuilder(final ArgsBuilder<?> builder) {
+ builder.args.clear();
+ builder.sepOffsets.clear();
+ this.argBuildersIdx--;
+ }
+
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
index 7ffb30f..0975a23 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/Sign.java
@@ -134,11 +134,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.rightExpr.node };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.rightExpr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SingleValue.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SingleValue.java
index 246c6fd..cbe5c51 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SingleValue.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SingleValue.java
@@ -61,11 +61,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return NO_CHILDREN;
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
return -1;
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
index e6a0485..e7ef3a0 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecItem.java
@@ -113,26 +113,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- final RAstNode nameNode= this.argName;
- final RAstNode valueNode= this.valueExpr.node;
- if (nameNode != null) {
- if (valueNode != null) {
- return new RAstNode[] { nameNode, valueNode };
- }
- else {
- return new RAstNode[] { nameNode };
- }
- }
- else if (valueNode != null) {
- return new RAstNode[] { valueNode };
- }
- else {
- return NO_CHILDREN;
- }
- }
-
- @Override
public int getChildIndex(final AstNode child) {
if (this.argName == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecList.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecList.java
deleted file mode 100644
index 6879a22..0000000
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SpecList.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2007, 2021 Stephan Wahlbrink and others.
- #
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- #
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- #
- # Contributors:
- # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.r.core.rsource.ast;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.statet.jcommons.lang.NonNull;
-import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.jcommons.lang.Nullable;
-
-import org.eclipse.statet.ltk.ast.core.AstNode;
-import org.eclipse.statet.ltk.ast.core.AstVisitor;
-import org.eclipse.statet.r.core.rsource.RTerminal;
-
-
-/**
- * Comma separated list
- */
-@NonNullByDefault
-abstract class SpecList extends RAstNode {
-
-
- final List<SpecItem> specs= new ArrayList<>(0);
-
-
- SpecList() {
- }
-
-
- @Override
- public final @Nullable RTerminal getOperator(final int index) {
- return null;
- }
-
-
- @Override
- public final boolean hasChildren() {
- return (!this.specs.isEmpty());
- }
-
- @Override
- public final int getChildCount() {
- return this.specs.size();
- }
-
- @Override
- public final RAstNode getChild(final int index) {
- return this.specs.get(index);
- }
-
- @Override
- public final RAstNode[] getChildren() {
- return this.specs.toArray(new @NonNull RAstNode[this.specs.size()]);
- }
-
- @Override
- public final int getChildIndex(final AstNode child) {
- for (int i= this.specs.size() - 1; i >= 0; i--) {
- if (this.specs.get(i) == child) {
- return i;
- }
- }
- return -1;
- }
-
- @Override
- public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
- acceptChildren(visitor, this.specs);
- }
-
- @Override
- public final void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
- for (final RAstNode child : this.specs) {
- visitor.visit(child);
- }
- }
-
-
- @Override
- final @Nullable Expression getExpr(final RAstNode child) {
- return null;
- }
-
- @Override
- final @Nullable Expression getLeftExpr() {
- return null;
- }
-
- @Override
- final @Nullable Expression getRightExpr() {
- return null;
- }
-
- abstract SpecItem createItem();
-
- void appendItem(final SpecItem item) {
- this.specs.add(item);
- }
-
-
- @Override
- final int getMissingExprStatus(final Expression expr) {
- throw new IllegalArgumentException();
- }
-
-}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
index b2c35da..204562b 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/StdBinary.java
@@ -63,11 +63,6 @@
}
}
- @Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.leftExpr.node, this.rightExpr.node };
- }
-
public final RAstNode getLeftChild() {
return this.leftExpr.node;
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
index c4c478b..49f28c8 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubIndexed.java
@@ -17,10 +17,10 @@
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_EXPR_AS_REF_MISSING;
import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.statet.jcommons.lang.NonNull;
+import org.eclipse.statet.jcommons.collections.ImCollections;
+import org.eclipse.statet.jcommons.collections.ImIntList;
+import org.eclipse.statet.jcommons.collections.ImList;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
@@ -78,14 +78,21 @@
public static final class Args extends RAstNode {
- final List<Arg> specs;
+ private ImList<Arg> args;
+ private ImIntList sepOffsets;
+ @SuppressWarnings("null")
Args(final SubIndexed parent) {
this.rParent= parent;
- this.specs= new ArrayList<>();
}
+ void finish(final RParser.ArgsBuilder<Arg> argsBuilder) {
+ this.args= ImCollections.toList(argsBuilder.args);
+ this.sepOffsets= ImCollections.toIntList(argsBuilder.sepOffsets);
+ }
+
+
@Override
public final NodeType getNodeType() {
return NodeType.SUB_INDEXED_ARGS;
@@ -96,37 +103,40 @@
return null;
}
+ public ImIntList getSeparatorOffsets() {
+ return this.sepOffsets;
+ }
+
@Override
public final boolean hasChildren() {
- return (!this.specs.isEmpty());
+ return (!this.args.isEmpty());
}
@Override
public final int getChildCount() {
- return this.specs.size();
+ return this.args.size();
}
@Override
- public final RAstNode getChild(final int index) {
- return this.specs.get(index);
- }
-
- @Override
- public final RAstNode[] getChildren() {
- return this.specs.toArray(new @NonNull RAstNode[this.specs.size()]);
+ public final Arg getChild(final int index) {
+ return this.args.get(index);
}
@Override
public final int getChildIndex(final AstNode child) {
- for (int i= this.specs.size() - 1; i >= 0; i--) {
- if (this.specs.get(i) == child) {
+ for (int i= this.args.size() - 1; i >= 0; i--) {
+ if (this.args.get(i) == child) {
return i;
}
}
return -1;
}
+ public ImList<Arg> getArgChildren() {
+ return this.args;
+ }
+
@Override
public final void acceptInR(final RAstVisitor visitor) throws InvocationTargetException {
visitor.visit(this);
@@ -134,12 +144,14 @@
@Override
public final void acceptInRChildren(final RAstVisitor visitor) throws InvocationTargetException {
- acceptChildren(visitor, this.specs);
+ for (final RAstNode arg : this.args) {
+ arg.acceptInR(visitor);
+ }
}
@Override
public final void acceptInChildren(final AstVisitor visitor) throws InvocationTargetException {
- for (final RAstNode child : this.specs) {
+ for (final RAstNode child : this.args) {
visitor.visit(child);
}
}
@@ -240,11 +252,6 @@
}
}
- @Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.expr.node, this.sublist };
- }
-
public final RAstNode getRefChild() {
return this.expr.node;
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
index e80fb59..035d7af 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/r/core/rsource/ast/SubNamed.java
@@ -104,11 +104,6 @@
}
@Override
- public final RAstNode[] getChildren() {
- return new RAstNode[] { this.expr.node, this.subname };
- }
-
- @Override
public final int getChildIndex(final AstNode child) {
if (this.expr.node == child) {
return 0;
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
index f4e28d3..3dd9add 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/editors/RContextInformationValidator.java
@@ -192,7 +192,7 @@
return 0;
}
for (int i= 0; i < last; i++) {
- if (offset <= args.getSeparatorOffset(i)) {
+ if (offset <= args.getSeparatorOffsets().getAt(i)) {
return i;
}
}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
index a5ba1bf..0b3f63a 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAssistInvocationContext.java
@@ -137,7 +137,7 @@
return 0;
}
for (int argIdx= 0; argIdx < last; argIdx++) {
- if (args.getSeparatorOffset(argIdx) >= offset) {
+ if (args.getSeparatorOffsets().getAt(argIdx) >= offset) {
return argIdx;
}
}
@@ -150,7 +150,7 @@
}
final int sep= (argIdx == 0) ?
this.node.getArgsOpenOffset() :
- this.node.getArgsChild().getSeparatorOffset(argIdx - 1);
+ this.node.getArgsChild().getSeparatorOffsets().getAt(argIdx - 1);
return sep + 1;
}
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
index 44e16f5..d4cdff7 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/r/ui/sourceediting/RAutoEditStrategy.java
@@ -98,7 +98,20 @@
private static final char[] CURLY_BRACKETS= new char[] { '{', '}' };
- private static final StringParserInput DEFAULT_PARSER_INPUT= new StringParserInput();
+
+ private static final StringParserInput DISPLAY_PARSER_INPUT= new StringParserInput();
+
+ private static final StringParserInput getParserInput(final String text) {
+ return (Display.getCurrent() == Display.getDefault()) ?
+ DISPLAY_PARSER_INPUT.reset(text) : new StringParserInput(text);
+ }
+
+ private static final RParser DISPLAY_R_PARSER= new RParser(AstInfo.LEVEL_MINIMAL);
+
+ private static final RParser getRParser() {
+ return (Display.getCurrent() == Display.getDefault()) ?
+ DISPLAY_R_PARSER : new RParser(AstInfo.LEVEL_MINIMAL);
+ }
private class RealTypeListener implements VerifyKeyListener {
@@ -761,8 +774,7 @@
int dummyCoffset= c.offset-shift;
int dummyCend= dummyCoffset+c.text.length();
final AbstractDocument dummyDoc= new Document(text);
- final TextParserInput parserInput= (Display.getCurrent() == Display.getDefault()) ?
- DEFAULT_PARSER_INPUT.reset(text) : new StringParserInput(text);
+ final TextParserInput parserInput= getParserInput(text);
// Lines to indent
int dummyFirstLine= dummyDoc.getLineOfOffset(dummyCoffset);
@@ -775,7 +787,7 @@
}
// Compute indent
- final RParser rParser= new RParser(AstInfo.LEVEL_MINIMAL);
+ final RParser rParser= getRParser();
final RAstNode rootNode= rParser.scanSourceUnit(parserInput.init());
final RSourceIndenter indenter= getIndenter();
indenter.setup(this.rCoreAccess);
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/AlphaType.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/AlphaType.java
index 92cf18a..e775b3d 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/AlphaType.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/AlphaType.java
@@ -37,7 +37,6 @@
import org.eclipse.statet.ecommons.ui.components.DoubleText;
import org.eclipse.statet.ecommons.ui.components.ObjValueEvent;
-import org.eclipse.statet.ltk.ast.core.AstInfo;
import org.eclipse.statet.r.core.model.RGraphicFunctions;
import org.eclipse.statet.r.core.rsource.ast.RParser;
import org.eclipse.statet.r.ui.graphics.RAlphaChooser;
@@ -87,7 +86,7 @@
Float newValue= null;
try {
if (newExpr != null && newExpr.getTypeKey() == RTypedExpr.R) {
- final RParser rParser= new RParser(AstInfo.LEVEL_MODEL_DEFAULT);
+ final RParser rParser= RExprWidget.getDisplayRParser();
newValue= this.rGraphicFunctions.parseAlpha(rParser.scanExpr(
new StringParserInput(newExpr.getExpr()).init() ));
}
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/ColorType.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/ColorType.java
index 2448b08..c854f7f 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/ColorType.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/ColorType.java
@@ -42,7 +42,6 @@
import org.eclipse.statet.ecommons.ui.components.DoubleText;
import org.eclipse.statet.ecommons.ui.components.ObjValueEvent;
-import org.eclipse.statet.ltk.ast.core.AstInfo;
import org.eclipse.statet.r.core.model.RGraphicFunctions;
import org.eclipse.statet.r.core.rsource.ast.RParser;
import org.eclipse.statet.r.ui.graphics.RAlphaChooser;
@@ -92,7 +91,7 @@
ColorDef newValue= null;
if (newExpr != null && newExpr.getTypeKey() == RTypedExpr.R) {
try {
- final RParser rParser= new RParser(AstInfo.LEVEL_MODEL_DEFAULT);
+ final RParser rParser= RExprWidget.getDisplayRParser();
newValue= this.rGraphicFunctions.parseColorDef(rParser.scanExpr(
new StringParserInput(newExpr.getExpr()).init() ));
}
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/FontFamilyType.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/FontFamilyType.java
index c7f7b34..03be6c6 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/FontFamilyType.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/FontFamilyType.java
@@ -34,7 +34,6 @@
import org.eclipse.statet.ecommons.ui.components.ObjValueEvent;
-import org.eclipse.statet.ltk.ast.core.AstInfo;
import org.eclipse.statet.r.core.model.RGraphicFunctions;
import org.eclipse.statet.r.core.rsource.ast.RParser;
import org.eclipse.statet.r.ui.graphics.RFontFamilyChooser;
@@ -84,7 +83,7 @@
String newValue= null;
try {
if (newExpr != null && newExpr.getTypeKey() == RTypedExpr.R) {
- final RParser rParser= new RParser(AstInfo.LEVEL_MODEL_DEFAULT);
+ final RParser rParser= RExprWidget.getDisplayRParser();
newValue= this.rGraphicFunctions.parseFontFamily(rParser.scanExpr(
new StringParserInput(newExpr.getExpr()).init() ));
}
diff --git a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprWidget.java b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprWidget.java
index 64cb146..ba71ffc 100644
--- a/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprWidget.java
+++ b/rtm/org.eclipse.statet.rtm.base.ui/src/org/eclipse/statet/rtm/base/ui/rexpr/RExprWidget.java
@@ -49,6 +49,8 @@
import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
import org.eclipse.statet.ecommons.ui.util.MenuUtils;
+import org.eclipse.statet.ltk.ast.core.AstInfo;
+import org.eclipse.statet.r.core.rsource.ast.RParser;
import org.eclipse.statet.rtm.base.ui.RtModelUIPlugin;
import org.eclipse.statet.rtm.base.util.RExprType;
import org.eclipse.statet.rtm.base.util.RExprTypes;
@@ -58,6 +60,13 @@
public class RExprWidget extends Composite implements IObjValueWidget<RTypedExpr> {
+ private static final RParser DISPLAY_R_PARSER= new RParser(AstInfo.LEVEL_MODEL_DEFAULT);
+
+ protected static final RParser getDisplayRParser() {
+ return DISPLAY_R_PARSER;
+ }
+
+
public static class TypeDef implements IObjValueListener<RTypedExpr> {