From 71269b96a8cf36dafe3ffd5371511fd08560cc04 Mon Sep 17 00:00:00 2001 From: jkohnlein Date: Thu, 3 Jul 2008 12:17:22 +0000 Subject: [PATCH] partial parsing revisited EContentAdapter for offset und line --- .../ParseErrorHandlingTest.java | 8 +-- .../parser/AbstractPartialParserTest.java | 2 +- .../eclipse/xtext/parser/LookaheadTest.java | 52 --------------- .../parser/PartialParserReplaceTest.java | 6 +- .../parser/PartialParsingPerformanceTest.java | 35 ++++++++-- .../parser/PartialParsingPointerTest.java | 64 +++++++++++++++---- .../xtext/parsetree/LengthOffsetLineTest.java | 50 +++++++-------- .../parsetree/NodeContentAdapterTest.java | 25 ++++++++ .../reconstr/ComplexReconstrTest.java | 2 - .../xtext/reference/LeafNodeBug_234132.java | 6 +- 10 files changed, 141 insertions(+), 109 deletions(-) delete mode 100644 tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/LookaheadTest.java create mode 100644 tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/NodeContentAdapterTest.java diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parseerrorhandling/ParseErrorHandlingTest.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parseerrorhandling/ParseErrorHandlingTest.java index e785ae71f..ce6cfd326 100644 --- a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parseerrorhandling/ParseErrorHandlingTest.java +++ b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parseerrorhandling/ParseErrorHandlingTest.java @@ -31,8 +31,8 @@ public class ParseErrorHandlingTest extends AbstractGeneratorTest { EList errors = NodeUtil.getRootNode(root).allSyntaxErrors(); assertEquals(1,errors.size()); assertEquals("%", ((LeafNode)errors.get(0).getNode()).getText()); - assertEquals(1, errors.get(0).getNode().line()); - assertEquals(15, errors.get(0).getNode().offset()); + assertEquals(1, errors.get(0).getNode().getLine()); + assertEquals(15, errors.get(0).getNode().getOffset()); assertEquals(1, errors.get(0).getNode().length()); assertEquals(1, errors.size()); } @@ -41,8 +41,8 @@ public class ParseErrorHandlingTest extends AbstractGeneratorTest { EObject root = getModel("import 'holla' foo returns x::y::Z : name=ID;"); EList errors = NodeUtil.getRootNode(root).allSyntaxErrors(); assertEquals("::", ((LeafNode)errors.get(0).getNode()).getText()); - assertEquals(1, errors.get(0).getNode().line()); - assertEquals(31, errors.get(0).getNode().offset()); + assertEquals(1, errors.get(0).getNode().getLine()); + assertEquals(31, errors.get(0).getNode().getOffset()); assertEquals(2, errors.get(0).getNode().length()); assertEquals(1, errors.size()); } diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/AbstractPartialParserTest.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/AbstractPartialParserTest.java index ecf73f426..af09b7550 100644 --- a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/AbstractPartialParserTest.java +++ b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/AbstractPartialParserTest.java @@ -19,7 +19,7 @@ import org.eclipse.xtext.util.EmfStructureComparator; */ public abstract class AbstractPartialParserTest extends AbstractGeneratorTest { - protected static final boolean DEBUG = false; + protected static final boolean DEBUG = true; protected EmfStructureComparator comparator; @Override diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/LookaheadTest.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/LookaheadTest.java deleted file mode 100644 index c65e3ff6c..000000000 --- a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/LookaheadTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 itemis AG (http://www.itemis.eu) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - *******************************************************************************/ -package org.eclipse.xtext.parser; - -import static org.eclipse.xtext.parsetree.NodeUtil.dumpCompositeNodes; -import static org.eclipse.xtext.parsetree.NodeUtil.getCompositeChildren; - -import java.util.List; - -import org.eclipse.xtext.parsetree.CompositeNode; -import org.eclipse.xtext.testlanguages.LookaheadLanguageStandaloneSetup; -import org.eclipse.xtext.tests.AbstractGeneratorTest; - -/** - * @author Jan Köhnlein - Initial contribution and API - * - */ -public class LookaheadTest extends AbstractGeneratorTest { - - /* (non-Javadoc) - * @see org.eclipse.xtext.tests.AbstractGeneratorTest#setUp() - */ - @Override - protected void setUp() throws Exception { - super.setUp(); - with(LookaheadLanguageStandaloneSetup.class); - } - - public void testLookahead() throws Exception { - CompositeNode rootNode = getRootNode("bar a foo bar c b d foo bar b c"); - dumpCompositeNodes("", rootNode); - assertEquals(0, rootNode.getLookahead()); - List alts = getCompositeChildren(rootNode); - assertEquals(1, alts.get(0).getLookahead()); - assertEquals(1, alts.get(1).getLookahead()); - assertEquals(1, alts.get(2).getLookahead()); - assertEquals(1, getCompositeChildren(alts.get(0)).get(0).getLookahead()); - CompositeNode lookahead0 = getCompositeChildren(alts.get(1)).get(0); - assertEquals(3, lookahead0.getLookahead()); - assertEquals(0, getCompositeChildren(lookahead0).get(0).getLookahead()); - CompositeNode lookahead3 = getCompositeChildren(alts.get(2)).get(0); - assertEquals(3, lookahead3.getLookahead()); - assertEquals(0, getCompositeChildren(lookahead3).get(0).getLookahead()); - } - -} diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/PartialParserReplaceTest.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/PartialParserReplaceTest.java index fec2ffd8e..b17dbe015 100644 --- a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/PartialParserReplaceTest.java +++ b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/PartialParserReplaceTest.java @@ -25,9 +25,9 @@ public class PartialParserReplaceTest extends AbstractPartialParserTest { public void testExpression() throws Exception { with(SimpleExpressionsStandaloneSetup.class); String model = "(a+b+c)*(c/d)"; - replaceAndReparse(model, 2, 2, "+hugo+egon", "a+hugo+egon+c"); + replaceAndReparse(model, 2, 2, "+hugo+egon", "(a+hugo+egon+c)"); replaceAndReparse(model, 8, 5, "egon", "egon"); - replaceAndReparse(model, 1, 2, "", "b+c"); + replaceAndReparse(model, 1, 2, "", "(b+c)"); replaceAndReparse(model, 6, 3, "*", "(a+b+c*c/d)"); replaceAndReparse(model, 3, 1, "(x+y+z)", "(x+y+z)"); @@ -40,7 +40,7 @@ public class PartialParserReplaceTest extends AbstractPartialParserTest { public void testLookahead() throws Exception { with(LookaheadLanguageStandaloneSetup.class); String model = "foo bar b c"; - replaceAndReparse(model, 10, 1, "d", " d"); + replaceAndReparse(model, 10, 1, "d", "foo bar b d"); replaceAndReparse(model, 8, 1, "b", "foo bar b c"); replaceAndReparse(model, 0, model.length(), "", ""); } diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/PartialParsingPerformanceTest.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/PartialParsingPerformanceTest.java index 60b400a3d..945af90d4 100644 --- a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/PartialParsingPerformanceTest.java +++ b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parser/PartialParsingPerformanceTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008 itemis AG (http://www.itemis.eu) and others. + * Copyright (c) NUM_ELEMENTS8 itemis AG (http://www.itemis.eu) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -18,15 +18,15 @@ import org.eclipse.xtext.testlanguages.SimpleExpressionsStandaloneSetup; */ public class PartialParsingPerformanceTest extends AbstractPartialParserTest { - public void testPerformance() throws Exception { - int magicnumber = 10; + private static final int NUM_ELEMENTS = 10; + public void testExpression() throws Exception { with(SimpleExpressionsStandaloneSetup.class); StringBuffer modelBuffer = new StringBuffer(); - for(int i=0; i) astParentElement.eGet(containmentFeature)).contains(parsingPointers.findASTReplaceElement())); - } else { + if (astParentElement != null) { + EStructuralFeature containmentFeature = astParentElement.eClass().getEStructuralFeature( + containmentFeatureName); + if (containmentFeature.isMany()) { + assertTrue(((List) astParentElement.eGet(containmentFeature)).contains(parsingPointers + .findASTReplaceElement())); + } + else { assertTrue(astParentElement.eGet(containmentFeature).equals(parsingPointers.findASTReplaceElement())); } } diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/LengthOffsetLineTest.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/LengthOffsetLineTest.java index 35db938fd..2b8b45dfd 100644 --- a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/LengthOffsetLineTest.java +++ b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/LengthOffsetLineTest.java @@ -21,23 +21,23 @@ public class LengthOffsetLineTest extends AbstractGeneratorTest { CompositeNode node = (CompositeNode) getRootNode(model); EList leafNodes = node.getLeafNodes(); Iterator iter = leafNodes.iterator(); - assertEquals(0,iter.next().offset()); - assertEquals(7,iter.next().offset()); - assertEquals(8,iter.next().offset()); - assertEquals(11,iter.next().offset()); - assertEquals(12,iter.next().offset()); - assertEquals(13,iter.next().offset()); - assertEquals(20,iter.next().offset()); - assertEquals(21,iter.next().offset()); - assertEquals(24,iter.next().offset()); + assertEquals(0,iter.next().getOffset()); + assertEquals(7,iter.next().getOffset()); + assertEquals(8,iter.next().getOffset()); + assertEquals(11,iter.next().getOffset()); + assertEquals(12,iter.next().getOffset()); + assertEquals(13,iter.next().getOffset()); + assertEquals(20,iter.next().getOffset()); + assertEquals(21,iter.next().getOffset()); + assertEquals(24,iter.next().getOffset()); } public void testOffset2() throws Exception { String model = "element foo;\nelement bar;"; CompositeNode node = (CompositeNode) getRootNode(model); Iterator iter = node.getChildren().iterator(); - assertEquals(0,iter.next().offset()); - assertEquals(12,iter.next().offset()); + assertEquals(0,iter.next().getOffset()); + assertEquals(12,iter.next().getOffset()); assertFalse(iter.hasNext()); } @@ -46,15 +46,15 @@ public class LengthOffsetLineTest extends AbstractGeneratorTest { CompositeNode node = (CompositeNode) getRootNode(model); EList leafNodes = node.getLeafNodes(); Iterator iter = leafNodes.iterator(); - assertEquals(1,iter.next().line()); - assertEquals(1,iter.next().line()); - assertEquals(1,iter.next().line()); - assertEquals(1,iter.next().line()); - assertEquals(1,iter.next().line()); - assertEquals(2,iter.next().line()); - assertEquals(2,iter.next().line()); - assertEquals(2,iter.next().line()); - assertEquals(2,iter.next().line()); + assertEquals(1,iter.next().getLine()); + assertEquals(1,iter.next().getLine()); + assertEquals(1,iter.next().getLine()); + assertEquals(1,iter.next().getLine()); + assertEquals(1,iter.next().getLine()); + assertEquals(2,iter.next().getLine()); + assertEquals(2,iter.next().getLine()); + assertEquals(2,iter.next().getLine()); + assertEquals(2,iter.next().getLine()); assertFalse(iter.hasNext()); } @@ -62,12 +62,12 @@ public class LengthOffsetLineTest extends AbstractGeneratorTest { String model = "element foo;\nelement bar;\nelement bar;\nelement bar;"; CompositeNode node = (CompositeNode) getRootNode(model); Iterator iter = node.getChildren().iterator(); - assertEquals(1,iter.next().line()); + assertEquals(1,iter.next().getLine()); //Note: because preceding whitespace is added to the following node, // the '\n' is always added to the following composite node - assertEquals(1,iter.next().line()); - assertEquals(2,iter.next().line()); - assertEquals(3,iter.next().line()); + assertEquals(1,iter.next().getLine()); + assertEquals(2,iter.next().getLine()); + assertEquals(3,iter.next().getLine()); assertFalse(iter.hasNext()); } @@ -80,7 +80,7 @@ public class LengthOffsetLineTest extends AbstractGeneratorTest { assertEquals(5,nodes.size()); int offset = 0; for (LeafNode leafNode : nodes) { - assertEquals(offset,leafNode.offset()); + assertEquals(offset,leafNode.getOffset()); offset += leafNode.length(); } } diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/NodeContentAdapterTest.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/NodeContentAdapterTest.java new file mode 100644 index 000000000..f34403083 --- /dev/null +++ b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/NodeContentAdapterTest.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2008 itemis AG (http://www.itemis.eu) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + *******************************************************************************/ +package org.eclipse.xtext.parsetree; + +import org.eclipse.xtext.testlanguages.ReferenceGrammarStandaloneSetup; +import org.eclipse.xtext.tests.AbstractGeneratorTest; + +/** + * @author Jan Köhnlein - Initial contribution and API + * + */ +public class NodeContentAdapterTest extends AbstractGeneratorTest{ + + public void testNodeContentAdapter() throws Exception { + with(ReferenceGrammarStandaloneSetup.class); + CompositeNode rootNode = getRootNode("spielplatz 112 'Jajaja' { kind ( Dennis 7) }"); + NodeUtil.dumpCompositeNodes("", rootNode); + } +} diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/reconstr/ComplexReconstrTest.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/reconstr/ComplexReconstrTest.java index cffffae55..9baf83328 100644 --- a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/reconstr/ComplexReconstrTest.java +++ b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/parsetree/reconstr/ComplexReconstrTest.java @@ -9,8 +9,6 @@ package org.eclipse.xtext.parsetree.reconstr; import org.eclipse.emf.ecore.EObject; -import org.eclipse.xtext.RuleCall; -import org.eclipse.xtext.parsetree.CompositeNode; import org.eclipse.xtext.parsetree.IParseTreeConstructor; import org.eclipse.xtext.parsetree.NodeUtil; import org.eclipse.xtext.tests.AbstractGeneratorTest; diff --git a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/reference/LeafNodeBug_234132.java b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/reference/LeafNodeBug_234132.java index cc749a55e..61b52991c 100644 --- a/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/reference/LeafNodeBug_234132.java +++ b/tests/org.eclipse.xtext.generator.tests/src/org/eclipse/xtext/reference/LeafNodeBug_234132.java @@ -30,9 +30,9 @@ public class LeafNodeBug_234132 extends AbstractGeneratorTest { System.out.println("Model length=" + model.length()); for (LeafNode leafNode : leafNodes) { String text = leafNode.getText(); - System.out.println("Leaf node" + leafNode.toString() + " offset=" + leafNode.offset() + " length=" + leafNode.length() + " text=" + ((text != null)? text : "")); - assertTrue(leafNode.length() + leafNode.offset() <= model.length()); - assertEquals(model.substring(leafNode.offset(), leafNode.offset() + leafNode.length()), leafNode.getText()); + System.out.println("Leaf node" + leafNode.toString() + " offset=" + leafNode.getOffset() + " length=" + leafNode.length() + " text=" + ((text != null)? text : "")); + assertTrue(leafNode.length() + leafNode.getOffset() <= model.length()); + assertEquals(model.substring(leafNode.getOffset(), leafNode.getOffset() + leafNode.length()), leafNode.getText()); } } }