From 5a6394afbcb37d8d34a2589970c1a14ab5be9df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Tue, 10 Jan 2017 14:39:07 +0100 Subject: [PATCH 01/14] Added null / proxy check to GrammarElementTitleSwitch --- .../grammaranalysis/impl/GrammarElementTitleSwitch.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/grammaranalysis/impl/GrammarElementTitleSwitch.java b/org.eclipse.xtext/src/org/eclipse/xtext/grammaranalysis/impl/GrammarElementTitleSwitch.java index da29767d4..057e2700e 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/grammaranalysis/impl/GrammarElementTitleSwitch.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/grammaranalysis/impl/GrammarElementTitleSwitch.java @@ -211,7 +211,13 @@ public class GrammarElementTitleSwitch extends XtextSwitch implements Fu @Override public String caseRuleCall(RuleCall object) { - return addCrossRefOrAssignemnt(object.getRule().getName(), object) + card(object); + AbstractRule rule = object.getRule(); + String ruleName; + if (rule != null && !rule.eIsProxy()) + ruleName = rule.getName(); + else + ruleName = "unresolved_rule"; + return addCrossRefOrAssignemnt(ruleName, object) + card(object); } @Override From e968946b4fc20cf6fb3dc9f130f3f2b9793a576f Mon Sep 17 00:00:00 2001 From: Moritz Eysholdt Date: Tue, 10 Jan 2017 17:27:16 +0100 Subject: [PATCH 02/14] [formatter/performance] Don't create stack traces This change: - introduces a flag that by default disables creation of stack traces - lets the formatter do a second pass on conflict with that flag enabled This combines the benefits of both worlds: - performance without the need for tweaking - debug information without the need to enable some magic config see https://bugs.eclipse.org/bugs/show_bug.cgi?id=508894 https://bugs.eclipse.org/bugs/show_bug.cgi?id=507174 https://github.com/eclipse/xtext-core/pull/195 Signed-off-by: Moritz Eysholdt --- .../formatter/FormatterTestHelper.java | 8 +- .../internal/FormattingConflictTest.xtend | 73 +++++++++++ .../formatting2/internal/RegionSetTest.xtend | 2 +- .../internal/FormattingConflictTest.java | 124 ++++++++++++++++++ .../formatting2/internal/RegionSetTest.java | 2 +- .../xtext/formatting2/AbstractFormatter2.java | 20 ++- .../xtext/formatting2/FormatterRequest.java | 23 ++++ .../internal/ArrayListTextSegmentSet.java | 26 ++-- .../internal/FormattableDocument.java | 22 ++-- .../internal/RegionTraceMissingException.java | 21 +++ .../internal/TextReplacerContext.java | 3 +- .../formatting2/internal/TextSegmentSet.java | 23 +++- 12 files changed, 319 insertions(+), 28 deletions(-) create mode 100644 org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/internal/FormattingConflictTest.xtend create mode 100644 org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/internal/FormattingConflictTest.java create mode 100644 org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/RegionTraceMissingException.java diff --git a/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/formatter/FormatterTestHelper.java b/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/formatter/FormatterTestHelper.java index 31093c52d..7d9689333 100644 --- a/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/formatter/FormatterTestHelper.java +++ b/org.eclipse.xtext.testing/src/org/eclipse/xtext/testing/formatter/FormatterTestHelper.java @@ -92,10 +92,14 @@ public class FormatterTestHelper { String document = req.getToBeFormatted().toString(); XtextResource parsed = parse(document); if (req.isAllowSyntaxErrors()) { - request.setExceptionHandler(ExceptionAcceptor.IGNORING); + if (request.getExplicitExceptionHandler() == null) { + request.setExceptionHandler(ExceptionAcceptor.IGNORING); + } } else { assertNoSyntaxErrors(parsed); - request.setExceptionHandler(ExceptionAcceptor.THROWING); + if (request.getExplicitExceptionHandler() == null) { + request.setExceptionHandler(ExceptionAcceptor.THROWING); + } } request.setTextRegionAccess(createRegionAccess(parsed, req)); if (request.getPreferences() == null) diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/internal/FormattingConflictTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/internal/FormattingConflictTest.xtend new file mode 100644 index 000000000..5718019d0 --- /dev/null +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/internal/FormattingConflictTest.xtend @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.formatting2.internal + +import com.google.inject.Inject +import org.eclipse.xtext.formatting2.internal.formattertestlanguage.IDList +import org.eclipse.xtext.formatting2.internal.tests.FormatterTestLanguageInjectorProvider +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.testing.XtextRunner +import org.eclipse.xtext.util.Wrapper +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith + +/** + * @author Moritz Eysholdt - Initial contribution and API + */ +@RunWith(XtextRunner) +@InjectWith(FormatterTestLanguageInjectorProvider) +class FormattingConflictTest { + @Inject extension GenericFormatterTester + + // @Inject extension FormatterTestLanguageGrammarAccess + @Test def void enableDebugTracingTrue() { + val wrapper = new Wrapper + val execution = new Wrapper(0) + assertFormatted[ + toBeFormatted = ''' + idlist a + ''' + formatter = [ IDList model, extension regions, extension document | + execution.set(execution.get + 1) + model.regionFor.keyword("idlist").append[space = " "] + model.regionFor.keyword("idlist").append[space = "\t"] + ] + request.enableDebugTracing = true + request.exceptionHandler = [ e | + wrapper.set(e) + ] + ] + val exception = wrapper.get as ConflictingRegionsException + Assert.assertEquals(1, execution.get) + Assert.assertEquals(2, exception.traces.size) + } + + @Test def void enableDebugTracingFalse() { + val wrapper = new Wrapper + val execution = new Wrapper(0) + assertFormatted[ + toBeFormatted = ''' + idlist a + ''' + formatter = [ IDList model, extension regions, extension document | + execution.set(execution.get + 1) + model.regionFor.keyword("idlist").append[space = " "] + model.regionFor.keyword("idlist").append[space = "\t"] + ] + request.enableDebugTracing = false + request.exceptionHandler = [ e | + wrapper.set(e) + ] + ] + val exception = wrapper.get as ConflictingRegionsException + Assert.assertEquals(2, execution.get) + Assert.assertEquals(2, exception.traces.size) + } + +} diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/internal/RegionSetTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/internal/RegionSetTest.xtend index b99c42f07..29fd0407e 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/internal/RegionSetTest.xtend +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/internal/RegionSetTest.xtend @@ -22,7 +22,7 @@ import static org.junit.Assert.* class RegionSetTest { def private void test(CharSequence expectation, (TestableTextSegmentSet)=>void test) { - val set = new TestableTextSegmentSet(new ArrayListTextSegmentSet(Functions.identity, Functions.toStringFunction)) + val set = new TestableTextSegmentSet(new ArrayListTextSegmentSet(Functions.identity, Functions.toStringFunction, true)) try { test.apply(set) } catch (Throwable t) { diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/internal/FormattingConflictTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/internal/FormattingConflictTest.java new file mode 100644 index 000000000..b1d6a5c86 --- /dev/null +++ b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/internal/FormattingConflictTest.java @@ -0,0 +1,124 @@ +/** + * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.formatting2.internal; + +import com.google.inject.Inject; +import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.formatting2.FormatterRequest; +import org.eclipse.xtext.formatting2.IFormattableDocument; +import org.eclipse.xtext.formatting2.IHiddenRegionFormatter; +import org.eclipse.xtext.formatting2.internal.ConflictingRegionsException; +import org.eclipse.xtext.formatting2.internal.GenericFormatter; +import org.eclipse.xtext.formatting2.internal.GenericFormatterTestRequest; +import org.eclipse.xtext.formatting2.internal.GenericFormatterTester; +import org.eclipse.xtext.formatting2.internal.formattertestlanguage.IDList; +import org.eclipse.xtext.formatting2.internal.tests.FormatterTestLanguageInjectorProvider; +import org.eclipse.xtext.formatting2.regionaccess.ITextRegionExtensions; +import org.eclipse.xtext.testing.InjectWith; +import org.eclipse.xtext.testing.XtextRunner; +import org.eclipse.xtext.util.IAcceptor; +import org.eclipse.xtext.util.Wrapper; +import org.eclipse.xtext.xbase.lib.Extension; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * @author Moritz Eysholdt - Initial contribution and API + */ +@RunWith(XtextRunner.class) +@InjectWith(FormatterTestLanguageInjectorProvider.class) +@SuppressWarnings("all") +public class FormattingConflictTest { + @Inject + @Extension + private GenericFormatterTester _genericFormatterTester; + + @Test + public void enableDebugTracingTrue() { + final Wrapper wrapper = new Wrapper(); + final Wrapper execution = new Wrapper(Integer.valueOf(0)); + final Procedure1 _function = (GenericFormatterTestRequest it) -> { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("idlist a"); + _builder.newLine(); + it.setToBeFormatted(_builder); + final GenericFormatter _function_1 = new GenericFormatter() { + @Override + protected void format(final IDList model, @Extension final ITextRegionExtensions regions, @Extension final IFormattableDocument document) { + Integer _get = execution.get(); + int _plus = ((_get).intValue() + 1); + execution.set(Integer.valueOf(_plus)); + final Procedure1 _function = (IHiddenRegionFormatter it_1) -> { + it_1.setSpace(" "); + }; + document.append(regions.regionFor(model).keyword("idlist"), _function); + final Procedure1 _function_1 = (IHiddenRegionFormatter it_1) -> { + it_1.setSpace("\t"); + }; + document.append(regions.regionFor(model).keyword("idlist"), _function_1); + } + }; + it.setFormatter(_function_1); + FormatterRequest _request = it.getRequest(); + _request.setEnableDebugTracing(true); + FormatterRequest _request_1 = it.getRequest(); + final IAcceptor _function_2 = (Exception e) -> { + wrapper.set(e); + }; + _request_1.setExceptionHandler(_function_2); + }; + this._genericFormatterTester.assertFormatted(_function); + Throwable _get = wrapper.get(); + final ConflictingRegionsException exception = ((ConflictingRegionsException) _get); + Assert.assertEquals(1, (execution.get()).intValue()); + Assert.assertEquals(2, exception.getTraces().size()); + } + + @Test + public void enableDebugTracingFalse() { + final Wrapper wrapper = new Wrapper(); + final Wrapper execution = new Wrapper(Integer.valueOf(0)); + final Procedure1 _function = (GenericFormatterTestRequest it) -> { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("idlist a"); + _builder.newLine(); + it.setToBeFormatted(_builder); + final GenericFormatter _function_1 = new GenericFormatter() { + @Override + protected void format(final IDList model, @Extension final ITextRegionExtensions regions, @Extension final IFormattableDocument document) { + Integer _get = execution.get(); + int _plus = ((_get).intValue() + 1); + execution.set(Integer.valueOf(_plus)); + final Procedure1 _function = (IHiddenRegionFormatter it_1) -> { + it_1.setSpace(" "); + }; + document.append(regions.regionFor(model).keyword("idlist"), _function); + final Procedure1 _function_1 = (IHiddenRegionFormatter it_1) -> { + it_1.setSpace("\t"); + }; + document.append(regions.regionFor(model).keyword("idlist"), _function_1); + } + }; + it.setFormatter(_function_1); + FormatterRequest _request = it.getRequest(); + _request.setEnableDebugTracing(false); + FormatterRequest _request_1 = it.getRequest(); + final IAcceptor _function_2 = (Exception e) -> { + wrapper.set(e); + }; + _request_1.setExceptionHandler(_function_2); + }; + this._genericFormatterTester.assertFormatted(_function); + Throwable _get = wrapper.get(); + final ConflictingRegionsException exception = ((ConflictingRegionsException) _get); + Assert.assertEquals(2, (execution.get()).intValue()); + Assert.assertEquals(2, exception.getTraces().size()); + } +} diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/internal/RegionSetTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/internal/RegionSetTest.java index 686e8d9e8..a74d0471c 100644 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/internal/RegionSetTest.java +++ b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/internal/RegionSetTest.java @@ -27,7 +27,7 @@ public class RegionSetTest { private void test(final CharSequence expectation, final Procedure1 test) { Function _identity = Functions.identity(); Function _stringFunction = Functions.toStringFunction(); - ArrayListTextSegmentSet _arrayListTextSegmentSet = new ArrayListTextSegmentSet(_identity, _stringFunction); + ArrayListTextSegmentSet _arrayListTextSegmentSet = new ArrayListTextSegmentSet(_identity, _stringFunction, true); final TestableTextSegmentSet set = new TestableTextSegmentSet(_arrayListTextSegmentSet); try { test.apply(set); diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/AbstractFormatter2.java b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/AbstractFormatter2.java index 8af98693d..308ec238d 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/AbstractFormatter2.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/AbstractFormatter2.java @@ -21,6 +21,7 @@ import org.eclipse.xtext.formatting2.internal.HiddenRegionFormatting; import org.eclipse.xtext.formatting2.internal.HiddenRegionFormattingMerger; import org.eclipse.xtext.formatting2.internal.HiddenRegionReplacer; import org.eclipse.xtext.formatting2.internal.MultilineCommentReplacer; +import org.eclipse.xtext.formatting2.internal.RegionTraceMissingException; import org.eclipse.xtext.formatting2.internal.RootDocument; import org.eclipse.xtext.formatting2.internal.SingleHiddenRegionFormatter; import org.eclipse.xtext.formatting2.internal.SinglelineCodeCommentReplacer; @@ -264,9 +265,13 @@ public abstract class AbstractFormatter2 implements IFormatter2 { public final List format(FormatterRequest request) { try { initialize(request); - IFormattableDocument document = createFormattableRootDocument(); XtextResource xtextResource = request.getTextRegionAccess().getResource(); - format(xtextResource, document); + IFormattableDocument document = createFormattableRootDocument(); + try { + format(xtextResource, document); + } catch (RegionTraceMissingException e) { + document = handleTraceMissing(document, e); + } List rendered = document.renderToTextReplacements(); List postprocessed = postProcess(document, rendered); return postprocessed; @@ -275,6 +280,17 @@ public abstract class AbstractFormatter2 implements IFormatter2 { } } + protected IFormattableDocument handleTraceMissing(IFormattableDocument problematic, RegionTraceMissingException e) { + if (request.isEnableDebugTracing()) { + return problematic; + } + request.setEnableDebugTracing(true); + XtextResource xtextResource = request.getTextRegionAccess().getResource(); + IFormattableDocument document = createFormattableRootDocument(); + format(xtextResource, document); + return document; + } + /** * Implement this method to create a language-specific formatter. * diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/FormatterRequest.java b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/FormatterRequest.java index 80e335457..f9bc51e3a 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/FormatterRequest.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/FormatterRequest.java @@ -206,6 +206,10 @@ public class FormatterRequest { return ExceptionAcceptor.LOGGING; return exceptionHandler; } + + public IAcceptor getExplicitExceptionHandler() { + return exceptionHandler; + } /** * @see #exceptionHandler @@ -214,4 +218,23 @@ public class FormatterRequest { this.exceptionHandler = problemHandler; return this; } + + /** + * Enable creation of Java stack traces to diagnose conflicting formatting + * instructions. + * + * This option is disabled for performance reasons. It is safe to leave it + * disabled, because in case a conflict happens, the formatter will + * automatically enable this flag and format again. The second pass of the + * formatter will then lead to the desired debug information. + **/ + private boolean enableDebugTracing = false; + + public boolean isEnableDebugTracing() { + return enableDebugTracing; + } + + public void setEnableDebugTracing(boolean enableDebugTracing) { + this.enableDebugTracing = enableDebugTracing; + } } diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/ArrayListTextSegmentSet.java b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/ArrayListTextSegmentSet.java index 9e2cbab38..3976aff62 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/ArrayListTextSegmentSet.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/ArrayListTextSegmentSet.java @@ -27,14 +27,20 @@ public class ArrayListTextSegmentSet extends TextSegmentSet { private final List contents = Lists.newArrayList(); - public ArrayListTextSegmentSet(Function region, Function title) { + public ArrayListTextSegmentSet(Function region, + Function title) { super(region, title); } + public ArrayListTextSegmentSet(Function region, + Function title, boolean trace) { + super(region, title, trace); + } + @Override - public void add(T segment, IMerger merger) throws ConflictingRegionsException { + public void add(T segment, IMerger merger) throws ConflictingRegionsException, RegionTraceMissingException { Preconditions.checkNotNull(segment); - getTraces().put(segment, new RegionTrace(getTitle(segment), getRegion(segment))); + trace(segment); if (contents.isEmpty()) { contents.add(segment); } else { @@ -52,7 +58,8 @@ public class ArrayListTextSegmentSet extends TextSegmentSet { return searchResult >= 0 ? contents.get(searchResult) : null; } - protected void insertAtIndex(T segment, int newIndex, IMerger merger) throws ConflictingRegionsException { + protected void insertAtIndex(T segment, int newIndex, IMerger merger) + throws ConflictingRegionsException, RegionTraceMissingException { List conflicting = null; int low = newIndex; while (--low >= 0) { @@ -75,7 +82,7 @@ public class ArrayListTextSegmentSet extends TextSegmentSet { break; } if (conflicting == null) { - getTraces().put(segment, new RegionTrace(getTitle(segment), getRegion(segment))); + trace(segment); contents.add(newIndex, segment); } else { conflicting.add(0, segment); @@ -84,7 +91,7 @@ public class ArrayListTextSegmentSet extends TextSegmentSet { if (merged != null) { for (int i = high - 1; i > low; i--) contents.remove(i); - getTraces().put(merged, new RegionTrace(getTitle(merged), getRegion(merged))); + trace(merged); contents.add(low + 1, merged); } else { int segmentLengh = getRegion(segment).getLength(); @@ -95,7 +102,7 @@ public class ArrayListTextSegmentSet extends TextSegmentSet { for (int i = high - 1; i > low; i--) contents.remove(i); if (segmentLengh > totalLength) { - getTraces().put(segment, new RegionTrace(getTitle(segment), getRegion(segment))); + trace(segment); contents.add(low + 1, segment); } handleConflict(conflicting, null); @@ -113,13 +120,14 @@ public class ArrayListTextSegmentSet extends TextSegmentSet { return Iterables.unmodifiableIterable(contents).iterator(); } - protected void replaceExistingEntry(T segment, int index, IMerger merger) throws ConflictingRegionsException { + protected void replaceExistingEntry(T segment, int index, IMerger merger) + throws ConflictingRegionsException, RegionTraceMissingException { T existing = contents.get(index); List conflicting = ImmutableList.of(segment, existing); try { T merged = merger != null ? merger.merge(conflicting) : null; if (merged != null) { - getTraces().put(merged, new RegionTrace(getTitle(merged), getRegion(merged))); + trace(merged); contents.set(index, merged); } else { contents.remove(index); diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/FormattableDocument.java b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/FormattableDocument.java index a12b59dbb..c31051496 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/FormattableDocument.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/FormattableDocument.java @@ -49,11 +49,16 @@ import com.google.common.collect.Sets; */ public abstract class FormattableDocument implements IFormattableDocument { - private final TextSegmentSet replacers; + private TextSegmentSet replacers = null; protected FormattableDocument() { super(); - this.replacers = createTextReplacerSet(); + } + + protected TextSegmentSet getReplacers() { + if (replacers == null) + replacers = createTextReplacerSet(); + return replacers; } @Override @@ -63,14 +68,13 @@ public abstract class FormattableDocument implements IFormattableDocument { ITextSegment frameRegion = getRegion(); String replacerTitle = replacer.getClass().getSimpleName(); ITextSegment replacerRegion = replacer.getRegion(); - @SuppressWarnings("unchecked") RegionsOutsideFrameException exception = new RegionsOutsideFrameException(frameTitle, frameRegion, Tuples.create(replacerTitle, replacerRegion)); getRequest().getExceptionHandler().accept(exception); return; } try { - replacers.add(replacer, getFormatter().createTextReplacerMerger()); + getReplacers().add(replacer, getFormatter().createTextReplacerMerger()); } catch (ConflictingRegionsException e) { getRequest().getExceptionHandler().accept(e); } @@ -122,7 +126,7 @@ public abstract class FormattableDocument implements IFormattableDocument { ITextReplacerContext wrappable = null; Set wrapped = Sets.newHashSet(); LinkedList queue = new LinkedList(); - for (ITextReplacer replacer : replacers) { + for (ITextReplacer replacer : getReplacers()) { queue.add(replacer); } while (!queue.isEmpty()) { @@ -136,7 +140,7 @@ public abstract class FormattableDocument implements IFormattableDocument { // then doesn't while (context != wrappable) { ITextReplacer r = context.getReplacer(); - if (r != null && replacers.get(r) == r) { + if (r != null && getReplacers().get(r) == r) { queue.addFirst(r); } context = context.getPreviousContext(); @@ -179,7 +183,7 @@ public abstract class FormattableDocument implements IFormattableDocument { .apply(((HiddenRegionReplacer) input).getFormatting()); return input.getClass().getSimpleName(); } - }); + }, getRequest().isEnableDebugTracing()); } @Override @@ -188,6 +192,8 @@ public abstract class FormattableDocument implements IFormattableDocument { if (formatter.shouldFormat(obj, this)) { try { formatter.format(obj, this); + } catch (RegionTraceMissingException e) { + throw e; } catch (Exception e) { IAcceptor handler = getRequest().getExceptionHandler(); handler.accept(e); @@ -350,7 +356,7 @@ public abstract class FormattableDocument implements IFormattableDocument { TextRegionsToString toString = new TextRegionsToString(); toString.setFrame(this.getRegion()); toString.setTitle(getClass().getSimpleName() + " with ITextReplacers"); - for (ITextReplacer repl : replacers) + for (ITextReplacer repl : getReplacers()) toString.add(repl.getRegion(), repl.getClass().getSimpleName() + ": " + repl.toString()); return toString.toString(); } diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/RegionTraceMissingException.java b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/RegionTraceMissingException.java new file mode 100644 index 000000000..578cd4965 --- /dev/null +++ b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/RegionTraceMissingException.java @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2017 TypeFox GmbH (http://www.typefox.io) 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.formatting2.internal; + +/** + * @author Moritz Eysholdt - Initial contribution and API + */ +public class RegionTraceMissingException extends RuntimeException { + + private static final long serialVersionUID = -1151660462702454003L; + + public RegionTraceMissingException(Throwable cause) { + super(cause); + } + +} diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/TextReplacerContext.java b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/TextReplacerContext.java index 612e253e8..239f05fe8 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/TextReplacerContext.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/TextReplacerContext.java @@ -66,7 +66,7 @@ public class TextReplacerContext implements ITextReplacerContext { public String apply(ITextReplacement input) { return input.getReplacementText(); } - }); + }, getDocument().getRequest().isEnableDebugTracing()); } @Override @@ -223,7 +223,6 @@ public class TextReplacerContext implements ITextReplacerContext { String frameTitle = replacer.getClass().getSimpleName(); ITextSegment frameRegion = replacer.getRegion(); String replacerTitle = replacement.getReplacementText(); - @SuppressWarnings("unchecked") RegionsOutsideFrameException exception = new RegionsOutsideFrameException(frameTitle, frameRegion, Tuples.create(replacerTitle, (ITextSegment) replacement)); request.getExceptionHandler().accept(exception); diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/TextSegmentSet.java b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/TextSegmentSet.java index 777175fb6..17b85ff5c 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/TextSegmentSet.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/internal/TextSegmentSet.java @@ -24,15 +24,21 @@ public abstract class TextSegmentSet implements Iterable { private final Function regionGetter; private final Function titleGetter; - private final IdentityHashMap traces = new IdentityHashMap(); + private final IdentityHashMap traces; public TextSegmentSet(Function region, Function title) { + this(region, title, true); + } + + public TextSegmentSet(Function region, Function title, + boolean trace) { super(); this.regionGetter = region; this.titleGetter = title; + this.traces = trace ? new IdentityHashMap() : null; } - public void add(T segment) throws ConflictingRegionsException { + public void add(T segment) throws ConflictingRegionsException, RegionTraceMissingException { add(segment, null); } @@ -52,11 +58,22 @@ public abstract class TextSegmentSet implements Iterable { return titleGetter.apply(t); } + @Deprecated public IdentityHashMap getTraces() { return traces; } - protected void handleConflict(List conflicts, Exception cause) throws ConflictingRegionsException { + protected void trace(T segment) { + if (traces != null) { + traces.put(segment, new RegionTrace(getTitle(segment), getRegion(segment))); + } + } + + protected void handleConflict(List conflicts, Exception cause) + throws ConflictingRegionsException, RegionTraceMissingException { + if (traces == null) { + throw new RegionTraceMissingException(cause); + } List causes = Lists.newArrayList(); for (T t : conflicts) { RegionTrace exception = traces.get(t); From 066e22f5079592517a4c67cce50c0fb6cc96a560 Mon Sep 17 00:00:00 2001 From: Moritz Eysholdt Date: Wed, 11 Jan 2017 10:27:08 +0100 Subject: [PATCH 03/14] fixed #12: [formatter] IllegalArgumentException in NodeRegion.toString() see https://github.com/eclipse/xtext-core/issues/12 Signed-off-by: Moritz Eysholdt --- .../internal/RegionAccessBuilderTest.xtend | 22 +++++++++++++++ .../internal/RegionAccessBuilderTest.java | 27 +++++++++++++++++++ .../debug/TextRegionAccessToString.java | 22 ++++++++++++--- 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/RegionAccessBuilderTest.xtend b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/RegionAccessBuilderTest.xtend index dd0030014..202fa916a 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/RegionAccessBuilderTest.xtend +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/formatting2/regionaccess/internal/RegionAccessBuilderTest.xtend @@ -23,6 +23,10 @@ import org.eclipse.xtext.testing.validation.ValidationTestHelper import org.junit.Assert import org.junit.Test import org.junit.runner.RunWith +import org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess +import org.eclipse.xtext.formatting2.regionaccess.IHiddenRegion +import org.eclipse.xtext.formatting2.regionaccess.ISequentialRegion +import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion /** * @author Moritz Eysholdt - Initial contribution and API @@ -661,10 +665,28 @@ class RegionAccessBuilderTest { validationTestHelper.assertNoErrors(obj) val access1 = obj.createFromNodeModel val access2 = obj.serializeToRegions + assertToStringDoesNotCrash(access1) + assertToStringDoesNotCrash(access2) Assert.assertEquals(exp, new TextRegionAccessToString().withRegionAccess(access1).cfg() + "\n") Assert.assertEquals(exp, new TextRegionAccessToString().withRegionAccess(access2).cfg() + "\n") } + private def assertToStringDoesNotCrash(ITextRegionAccess access) { + var current = access.regionForRootEObject.previousHiddenRegion as ISequentialRegion + while (current !== null) { + Assert.assertNotNull(current.toString) + switch current { + IHiddenRegion: { + current = current.nextSemanticRegion + } + ISemanticRegion: { + Assert.assertNotNull(current.EObjectRegion.toString) + current = current.nextHiddenRegion + } + } + } + } + private def TextRegionAccessToString cfg(TextRegionAccessToString toStr) { toStr.hideColumnExplanation().withTextWidth(10) } diff --git a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/regionaccess/internal/RegionAccessBuilderTest.java b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/regionaccess/internal/RegionAccessBuilderTest.java index 61a687400..79a476774 100644 --- a/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/regionaccess/internal/RegionAccessBuilderTest.java +++ b/org.eclipse.xtext.tests/xtend-gen/org/eclipse/xtext/formatting2/regionaccess/internal/RegionAccessBuilderTest.java @@ -13,6 +13,9 @@ import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.formatting2.debug.TextRegionAccessToString; +import org.eclipse.xtext.formatting2.regionaccess.IHiddenRegion; +import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion; +import org.eclipse.xtext.formatting2.regionaccess.ISequentialRegion; import org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess; import org.eclipse.xtext.formatting2.regionaccess.TextRegionAccessBuilder; import org.eclipse.xtext.formatting2.regionaccess.internal.regionaccesstestlanguage.Root; @@ -1433,6 +1436,8 @@ public class RegionAccessBuilderTest { this.validationTestHelper.assertNoErrors(obj); final ITextRegionAccess access1 = this.createFromNodeModel(obj); final ITextRegionAccess access2 = this.serializer.serializeToRegions(obj); + this.assertToStringDoesNotCrash(access1); + this.assertToStringDoesNotCrash(access2); TextRegionAccessToString _cfg = this.cfg(new TextRegionAccessToString().withRegionAccess(access1)); String _plus = (_cfg + "\n"); Assert.assertEquals(exp, _plus); @@ -1444,6 +1449,28 @@ public class RegionAccessBuilderTest { } } + private void assertToStringDoesNotCrash(final ITextRegionAccess access) { + IHiddenRegion _previousHiddenRegion = access.regionForRootEObject().getPreviousHiddenRegion(); + ISequentialRegion current = ((ISequentialRegion) _previousHiddenRegion); + while ((current != null)) { + { + Assert.assertNotNull(current.toString()); + boolean _matched = false; + if (current instanceof IHiddenRegion) { + _matched=true; + current = ((IHiddenRegion)current).getNextSemanticRegion(); + } + if (!_matched) { + if (current instanceof ISemanticRegion) { + _matched=true; + Assert.assertNotNull(((ISemanticRegion)current).getEObjectRegion().toString()); + current = ((ISemanticRegion)current).getNextHiddenRegion(); + } + } + } + } + } + private TextRegionAccessToString cfg(final TextRegionAccessToString toStr) { return toStr.hideColumnExplanation().withTextWidth(10); } diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/debug/TextRegionAccessToString.java b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/debug/TextRegionAccessToString.java index 43c159e9e..78a8182f1 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/debug/TextRegionAccessToString.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/formatting2/debug/TextRegionAccessToString.java @@ -79,8 +79,8 @@ public class TextRegionAccessToString { private static final String HIDDEN_PADDED = Strings.padEnd(HIDDEN, TITLE_WIDTH, ' '); private static final String SEMANTIC_PADDED = Strings.padEnd("S", TITLE_WIDTH, ' '); - private Function grammarToString = new GrammarElementTitleSwitch().showRule().showAssignments() - .showQualified(); + private Function grammarToString = new GrammarElementTitleSwitch().showRule() + .showAssignments().showQualified(); private boolean hideColumnExplanation = false; @@ -180,7 +180,23 @@ public class TextRegionAccessToString { } for (String error : errors) result.add(error, false); - int indentation = 0; + int indentation = 0, min = 0; + for (ITextSegment region : list) { + if (region instanceof IHiddenRegion) { + Collection found = hiddens.get((IHiddenRegion) region); + for (IEObjectRegion obj : found) { + boolean p = obj.getNextHiddenRegion().equals(region); + boolean n = obj.getPreviousHiddenRegion().equals(region); + if (p) + indentation--; + else if (n) + indentation++; + if (indentation < min) + min = indentation; + } + } + } + indentation = min < 0 ? min * -1 : 0; for (ITextSegment region : list) { List previous = Lists.newArrayList(); List next = Lists.newArrayList(); From 3697c55f6515f852203483c258621e3f243b8957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Wed, 11 Jan 2017 13:43:25 +0100 Subject: [PATCH 04/14] [build] Include test sources for test projects --- gradle/eclipse-project-layout.gradle | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gradle/eclipse-project-layout.gradle b/gradle/eclipse-project-layout.gradle index aa629c037..f42be1eae 100644 --- a/gradle/eclipse-project-layout.gradle +++ b/gradle/eclipse-project-layout.gradle @@ -32,14 +32,18 @@ jar { from ('.') { include 'about*.*', 'plugin.xml', 'schema/**', 'model/**', 'plugin.properties' } - if (isTestProject) - from(sourceSets.test.output) + if (isTestProject) { + from sourceSets.test.output + } } sourcesJar { from ('.') { include 'about*.*' } + if (isTestProject) { + from sourceSets.test.allSource + } } if (isTestProject || name.contains('testlanguage')) { From 7d2675ba40b145aaffcbe32dc59c82b050aa51f9 Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini Date: Wed, 11 Jan 2017 14:11:16 +0100 Subject: [PATCH 05/14] 479196: AntlrToolFacade always downloads antlr-generator in Maven build Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=479196 Signed-off-by: Lorenzo Bettini --- .../org.xtext.example.full/pom.xml | 5 +++++ .../org.xtext.example.mavenTycho/pom.xml | 5 +++++ .../org.xtext.example.mavenTychoP2/pom.xml | 5 +++++ .../wizard/RuntimeProjectDescriptor.xtend | 5 +++++ .../wizard/RuntimeProjectDescriptor.java | 20 +++++++++++++++++++ 5 files changed, 40 insertions(+) diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/pom.xml b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/pom.xml index 5d92422c5..b4793ebca 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/pom.xml +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/pom.xml @@ -56,6 +56,11 @@ org.eclipse.xtext.xbase ${xtextVersion} + + org.eclipse.xtext + xtext-antlr-generator + [2.1.1, 3.0) + diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTycho/org.xtext.example.mavenTycho.parent/org.xtext.example.mavenTycho/pom.xml b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTycho/org.xtext.example.mavenTycho.parent/org.xtext.example.mavenTycho/pom.xml index 69b3e4aff..ab292b10a 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTycho/org.xtext.example.mavenTycho.parent/org.xtext.example.mavenTycho/pom.xml +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTycho/org.xtext.example.mavenTycho.parent/org.xtext.example.mavenTycho/pom.xml @@ -56,6 +56,11 @@ org.eclipse.xtext.xbase ${xtextVersion} + + org.eclipse.xtext + xtext-antlr-generator + [2.1.1, 3.0) + diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTychoP2/org.xtext.example.mavenTychoP2.parent/org.xtext.example.mavenTychoP2/pom.xml b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTychoP2/org.xtext.example.mavenTychoP2.parent/org.xtext.example.mavenTychoP2/pom.xml index 5ec3a02f2..a9af94780 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTychoP2/org.xtext.example.mavenTychoP2.parent/org.xtext.example.mavenTychoP2/pom.xml +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTychoP2/org.xtext.example.mavenTychoP2.parent/org.xtext.example.mavenTychoP2/pom.xml @@ -56,6 +56,11 @@ org.eclipse.xtext.xbase ${xtextVersion} + + org.eclipse.xtext + xtext-antlr-generator + [2.1.1, 3.0) + diff --git a/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend b/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend index fd002e2da..5253f652b 100644 --- a/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend +++ b/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend @@ -375,6 +375,11 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor { org.eclipse.xtext.xbase ${xtextVersion} + + org.eclipse.xtext + xtext-antlr-generator + [2.1.1, 3.0) + «ENDIF» diff --git a/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java b/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java index 8b67614c8..f838c131d 100644 --- a/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java +++ b/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java @@ -915,6 +915,26 @@ public class RuntimeProjectDescriptor extends TestedProjectDescriptor { _builder.append(""); _builder.newLine(); _builder.append("\t\t\t"); + _builder.append("\t"); + _builder.append(""); + _builder.newLine(); + _builder.append("\t\t\t"); + _builder.append("\t\t"); + _builder.append("org.eclipse.xtext"); + _builder.newLine(); + _builder.append("\t\t\t"); + _builder.append("\t\t"); + _builder.append("xtext-antlr-generator"); + _builder.newLine(); + _builder.append("\t\t\t"); + _builder.append("\t\t"); + _builder.append("[2.1.1, 3.0)"); + _builder.newLine(); + _builder.append("\t\t\t"); + _builder.append("\t"); + _builder.append(""); + _builder.newLine(); + _builder.append("\t\t\t"); _builder.append(""); _builder.newLine(); } From eca73e86a525bacbcec98ef8623b4de9dc08dbfd Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini Date: Wed, 11 Jan 2017 14:54:27 +0100 Subject: [PATCH 06/14] generated Xtend servlet class should use !== instead of != Since now Xtend issues a warning if you use != with null. Signed-off-by: Lorenzo Bettini --- .../xtext/xtext/generator/web/WebIntegrationFragment.xtend | 2 +- .../xtext/xtext/generator/web/WebIntegrationFragment.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/web/WebIntegrationFragment.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/web/WebIntegrationFragment.xtend index e0887bb3d..a84143701 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/web/WebIntegrationFragment.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/web/WebIntegrationFragment.xtend @@ -737,7 +737,7 @@ class WebIntegrationFragment extends AbstractXtextGeneratorFragment { } override destroy() { - if (disposableRegistry != null) { + if (disposableRegistry !== null) { disposableRegistry.dispose() disposableRegistry = null } diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/web/WebIntegrationFragment.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/web/WebIntegrationFragment.java index 88006eda9..476662a3a 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/web/WebIntegrationFragment.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/web/WebIntegrationFragment.java @@ -1749,7 +1749,7 @@ public class WebIntegrationFragment extends AbstractXtextGeneratorFragment { _builder.append("override destroy() {"); _builder.newLine(); _builder.append("\t\t"); - _builder.append("if (disposableRegistry != null) {"); + _builder.append("if (disposableRegistry !== null) {"); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("disposableRegistry.dispose()"); From 6761c499cc651d1a4a2150e1c50151d6c5f9bdd6 Mon Sep 17 00:00:00 2001 From: Sven Efftinge Date: Wed, 11 Jan 2017 15:15:59 +0100 Subject: [PATCH 07/14] [lsp] ensure resources are initialized --- .../src/org/eclipse/xtext/ide/server/ProjectManager.xtend | 5 ++++- .../org/eclipse/xtext/ide/server/ProjectManager.java | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/ProjectManager.xtend b/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/ProjectManager.xtend index b97107271..f1823fe1b 100644 --- a/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/ProjectManager.xtend +++ b/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/ProjectManager.xtend @@ -115,7 +115,10 @@ class ProjectManager { } def Resource getResource(URI uri) { - resourceSet.getResource(uri, true) + val resource = resourceSet.getResource(uri, true) + // initialize + resource.contents + return resource } def void reportProjectIssue(String message, String code, Severity severity) { diff --git a/org.eclipse.xtext.ide/xtend-gen/org/eclipse/xtext/ide/server/ProjectManager.java b/org.eclipse.xtext.ide/xtend-gen/org/eclipse/xtext/ide/server/ProjectManager.java index aa328c915..870c21351 100644 --- a/org.eclipse.xtext.ide/xtend-gen/org/eclipse/xtext/ide/server/ProjectManager.java +++ b/org.eclipse.xtext.ide/xtend-gen/org/eclipse/xtext/ide/server/ProjectManager.java @@ -152,7 +152,9 @@ public class ProjectManager { } public Resource getResource(final URI uri) { - return this.resourceSet.getResource(uri, true); + final Resource resource = this.resourceSet.getResource(uri, true); + resource.getContents(); + return resource; } public void reportProjectIssue(final String message, final String code, final Severity severity) { From 8fca65f7eec32699270f5146ca40576c8babac0a Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini Date: Wed, 11 Jan 2017 15:22:16 +0100 Subject: [PATCH 08/14] 479196: added xtext-antlr-generator also in the build.gradle Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=479196 Signed-off-by: Lorenzo Bettini --- .../org.xtext.example.full/build.gradle | 1 + .../org.xtext.example.gradle/build.gradle | 1 + .../eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend | 1 + .../eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java | 3 +++ 4 files changed, 6 insertions(+) diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/build.gradle b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/build.gradle index 12f4185df..991e3f103 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/build.gradle +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/build.gradle @@ -12,6 +12,7 @@ dependencies { mwe2 "org.eclipse.emf:org.eclipse.emf.mwe2.launch:2.9.0.201605261059" mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}" mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}" + mwe2 "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3.0)" } task generateXtextLanguage(type: JavaExec) { diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.gradle/org.xtext.example.gradle.parent/org.xtext.example.gradle/build.gradle b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.gradle/org.xtext.example.gradle.parent/org.xtext.example.gradle/build.gradle index 07e85a8da..4fdd46288 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.gradle/org.xtext.example.gradle.parent/org.xtext.example.gradle/build.gradle +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.gradle/org.xtext.example.gradle.parent/org.xtext.example.gradle/build.gradle @@ -15,6 +15,7 @@ dependencies { mwe2 "org.eclipse.emf:org.eclipse.emf.mwe2.launch:2.9.0.201605261059" mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}" mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}" + mwe2 "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3.0)" } task generateXtextLanguage(type: JavaExec) { diff --git a/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend b/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend index 5253f652b..11dc1cbd7 100644 --- a/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend +++ b/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend @@ -284,6 +284,7 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor { mwe2 "org.eclipse.emf:org.eclipse.emf.mwe2.launch:«config.xtextVersion.mweVersion»" mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}" mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}" + mwe2 "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3.0)" «IF fromExistingEcoreModels» mwe2 "org.eclipse.xtext:org.eclipse.xtext.generator:${xtextVersion}" mwe2 "org.eclipse.xpand:org.eclipse.xpand:2.0.0" diff --git a/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java b/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java index f838c131d..9e0492702 100644 --- a/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java +++ b/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java @@ -596,6 +596,9 @@ public class RuntimeProjectDescriptor extends TestedProjectDescriptor { _builder.append("\t"); _builder.append("mwe2 \"org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}\""); _builder.newLine(); + _builder.append("\t"); + _builder.append("mwe2 \"org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3.0)\""); + _builder.newLine(); { boolean _isFromExistingEcoreModels = this.isFromExistingEcoreModels(); if (_isFromExistingEcoreModels) { From 9eb9ad3345080a8ad10209d80bf2369bf5ba1f53 Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini Date: Wed, 11 Jan 2017 15:24:46 +0100 Subject: [PATCH 09/14] 479196: get antlr-generator version using a method Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=479196 Signed-off-by: Lorenzo Bettini --- .../src/org/eclipse/xtext/util/XtextVersion.xtend | 4 ++++ .../org/eclipse/xtext/util/XtextVersion.java | 4 ++++ .../xtext/wizard/RuntimeProjectDescriptor.xtend | 4 ++-- .../xtext/wizard/RuntimeProjectDescriptor.java | 14 ++++++++++---- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/org.eclipse.xtext.util/src/org/eclipse/xtext/util/XtextVersion.xtend b/org.eclipse.xtext.util/src/org/eclipse/xtext/util/XtextVersion.xtend index 33c13671d..1f43fafec 100644 --- a/org.eclipse.xtext.util/src/org/eclipse/xtext/util/XtextVersion.xtend +++ b/org.eclipse.xtext.util/src/org/eclipse/xtext/util/XtextVersion.xtend @@ -30,6 +30,10 @@ class XtextVersion { '2.9.0.201605261059' } + def getAntlrGeneratorVersion() { + '[2.1.1, 3.0)' + } + def getXtendGradlePluginVersion() { xtextGradlePluginVersion } diff --git a/org.eclipse.xtext.util/xtend-gen/org/eclipse/xtext/util/XtextVersion.java b/org.eclipse.xtext.util/xtend-gen/org/eclipse/xtext/util/XtextVersion.java index 46a5fed99..d837035d0 100644 --- a/org.eclipse.xtext.util/xtend-gen/org/eclipse/xtext/util/XtextVersion.java +++ b/org.eclipse.xtext.util/xtend-gen/org/eclipse/xtext/util/XtextVersion.java @@ -53,6 +53,10 @@ public class XtextVersion { return "2.9.0.201605261059"; } + public String getAntlrGeneratorVersion() { + return "[2.1.1, 3.0)"; + } + public String getXtendGradlePluginVersion() { return this.getXtextGradlePluginVersion(); } diff --git a/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend b/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend index 11dc1cbd7..054f54b47 100644 --- a/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend +++ b/org.eclipse.xtext.xtext.wizard/src/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.xtend @@ -284,7 +284,7 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor { mwe2 "org.eclipse.emf:org.eclipse.emf.mwe2.launch:«config.xtextVersion.mweVersion»" mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}" mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}" - mwe2 "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3.0)" + mwe2 "org.eclipse.xtext:xtext-antlr-generator:«config.xtextVersion.antlrGeneratorVersion»" «IF fromExistingEcoreModels» mwe2 "org.eclipse.xtext:org.eclipse.xtext.generator:${xtextVersion}" mwe2 "org.eclipse.xpand:org.eclipse.xpand:2.0.0" @@ -379,7 +379,7 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor { org.eclipse.xtext xtext-antlr-generator - [2.1.1, 3.0) + «config.xtextVersion.antlrGeneratorVersion» «ENDIF» diff --git a/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java b/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java index 9e0492702..0e774ba25 100644 --- a/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java +++ b/org.eclipse.xtext.xtext.wizard/xtend-gen/org/eclipse/xtext/xtext/wizard/RuntimeProjectDescriptor.java @@ -597,8 +597,11 @@ public class RuntimeProjectDescriptor extends TestedProjectDescriptor { _builder.append("mwe2 \"org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}\""); _builder.newLine(); _builder.append("\t"); - _builder.append("mwe2 \"org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3.0)\""); - _builder.newLine(); + _builder.append("mwe2 \"org.eclipse.xtext:xtext-antlr-generator:"); + String _antlrGeneratorVersion = this.getConfig().getXtextVersion().getAntlrGeneratorVersion(); + _builder.append(_antlrGeneratorVersion, "\t"); + _builder.append("\""); + _builder.newLineIfNotEmpty(); { boolean _isFromExistingEcoreModels = this.isFromExistingEcoreModels(); if (_isFromExistingEcoreModels) { @@ -931,8 +934,11 @@ public class RuntimeProjectDescriptor extends TestedProjectDescriptor { _builder.newLine(); _builder.append("\t\t\t"); _builder.append("\t\t"); - _builder.append("[2.1.1, 3.0)"); - _builder.newLine(); + _builder.append(""); + String _antlrGeneratorVersion = this.getConfig().getXtextVersion().getAntlrGeneratorVersion(); + _builder.append(_antlrGeneratorVersion, "\t\t\t\t\t"); + _builder.append(""); + _builder.newLineIfNotEmpty(); _builder.append("\t\t\t"); _builder.append("\t"); _builder.append(""); From 00a949a153ea7a935608e52ccf79470536caf917 Mon Sep 17 00:00:00 2001 From: Lorenzo Bettini Date: Wed, 11 Jan 2017 15:40:49 +0100 Subject: [PATCH 10/14] 479196: use version range [2.1.1,3) see https://github.com/eclipse/xtext-core/pull/235#issuecomment-271882660 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=479196 Signed-off-by: Lorenzo Bettini --- .../org.xtext.example.full/build.gradle | 2 +- .../org.xtext.example.full/pom.xml | 2 +- .../org.xtext.example.gradle/build.gradle | 2 +- .../org.xtext.example.mavenTycho/pom.xml | 2 +- .../org.xtext.example.mavenTychoP2/pom.xml | 2 +- .../src/org/eclipse/xtext/util/XtextVersion.xtend | 2 +- .../xtend-gen/org/eclipse/xtext/util/XtextVersion.java | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/build.gradle b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/build.gradle index 991e3f103..458a2bf8a 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/build.gradle +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/build.gradle @@ -12,7 +12,7 @@ dependencies { mwe2 "org.eclipse.emf:org.eclipse.emf.mwe2.launch:2.9.0.201605261059" mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}" mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}" - mwe2 "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3.0)" + mwe2 "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3)" } task generateXtextLanguage(type: JavaExec) { diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/pom.xml b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/pom.xml index b4793ebca..2be6cb07a 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/pom.xml +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.full/org.xtext.example.full.parent/org.xtext.example.full/pom.xml @@ -59,7 +59,7 @@ org.eclipse.xtext xtext-antlr-generator - [2.1.1, 3.0) + [2.1.1, 3) diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.gradle/org.xtext.example.gradle.parent/org.xtext.example.gradle/build.gradle b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.gradle/org.xtext.example.gradle.parent/org.xtext.example.gradle/build.gradle index 4fdd46288..3a3c4bcff 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.gradle/org.xtext.example.gradle.parent/org.xtext.example.gradle/build.gradle +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.gradle/org.xtext.example.gradle.parent/org.xtext.example.gradle/build.gradle @@ -15,7 +15,7 @@ dependencies { mwe2 "org.eclipse.emf:org.eclipse.emf.mwe2.launch:2.9.0.201605261059" mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}" mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}" - mwe2 "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3.0)" + mwe2 "org.eclipse.xtext:xtext-antlr-generator:[2.1.1, 3)" } task generateXtextLanguage(type: JavaExec) { diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTycho/org.xtext.example.mavenTycho.parent/org.xtext.example.mavenTycho/pom.xml b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTycho/org.xtext.example.mavenTycho.parent/org.xtext.example.mavenTycho/pom.xml index ab292b10a..5e595bfbd 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTycho/org.xtext.example.mavenTycho.parent/org.xtext.example.mavenTycho/pom.xml +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTycho/org.xtext.example.mavenTycho.parent/org.xtext.example.mavenTycho/pom.xml @@ -59,7 +59,7 @@ org.eclipse.xtext xtext-antlr-generator - [2.1.1, 3.0) + [2.1.1, 3) diff --git a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTychoP2/org.xtext.example.mavenTychoP2.parent/org.xtext.example.mavenTychoP2/pom.xml b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTychoP2/org.xtext.example.mavenTychoP2.parent/org.xtext.example.mavenTychoP2/pom.xml index a9af94780..098f5fd15 100644 --- a/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTychoP2/org.xtext.example.mavenTychoP2.parent/org.xtext.example.mavenTychoP2/pom.xml +++ b/org.eclipse.xtext.tests/testdata/wizard-expectations/org.xtext.example.mavenTychoP2/org.xtext.example.mavenTychoP2.parent/org.xtext.example.mavenTychoP2/pom.xml @@ -59,7 +59,7 @@ org.eclipse.xtext xtext-antlr-generator - [2.1.1, 3.0) + [2.1.1, 3) diff --git a/org.eclipse.xtext.util/src/org/eclipse/xtext/util/XtextVersion.xtend b/org.eclipse.xtext.util/src/org/eclipse/xtext/util/XtextVersion.xtend index 1f43fafec..02942b6fa 100644 --- a/org.eclipse.xtext.util/src/org/eclipse/xtext/util/XtextVersion.xtend +++ b/org.eclipse.xtext.util/src/org/eclipse/xtext/util/XtextVersion.xtend @@ -31,7 +31,7 @@ class XtextVersion { } def getAntlrGeneratorVersion() { - '[2.1.1, 3.0)' + '[2.1.1, 3)' } def getXtendGradlePluginVersion() { diff --git a/org.eclipse.xtext.util/xtend-gen/org/eclipse/xtext/util/XtextVersion.java b/org.eclipse.xtext.util/xtend-gen/org/eclipse/xtext/util/XtextVersion.java index d837035d0..6ad9808ec 100644 --- a/org.eclipse.xtext.util/xtend-gen/org/eclipse/xtext/util/XtextVersion.java +++ b/org.eclipse.xtext.util/xtend-gen/org/eclipse/xtext/util/XtextVersion.java @@ -54,7 +54,7 @@ public class XtextVersion { } public String getAntlrGeneratorVersion() { - return "[2.1.1, 3.0)"; + return "[2.1.1, 3)"; } public String getXtendGradlePluginVersion() { From c65b348e92152b4719b9e9f2e6e05cda10695852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Wed, 11 Jan 2017 15:53:40 +0100 Subject: [PATCH 11/14] [build] Fixed trace file inclusion, updated Xtend plugin to 1.0.15 --- build.gradle | 2 +- gradle/bootstrap-setup.gradle | 2 +- gradle/versions.gradle | 2 +- gradle/xtend-compiler-settings.gradle | 15 +++++++++------ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index c10883ee5..f2882c269 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { apply from: "${rootDir}/gradle/versions.gradle" repositories.jcenter() dependencies { - classpath "org.xtext:xtext-gradle-plugin:$versions.xtend_plugin" + classpath "org.xtext:xtext-gradle-plugin:$versions.xtext_gradle_plugin" classpath "io.typefox.gradle:gradle-p2gen:$versions.gradle_plugins" } } diff --git a/gradle/bootstrap-setup.gradle b/gradle/bootstrap-setup.gradle index 410575373..daf065a94 100644 --- a/gradle/bootstrap-setup.gradle +++ b/gradle/bootstrap-setup.gradle @@ -32,5 +32,5 @@ configurations { dependencies { xtendCompiler "org.eclipse.xtend:org.eclipse.xtend.core:$bootstrapXtendVersion" xtendCompiler "org.eclipse.xtext:org.eclipse.xtext.smap:$bootstrapXtendVersion" - xtendCompiler "org.xtext:xtext-gradle-builder:$versions.xtend_plugin" + xtendCompiler "org.xtext:xtext-gradle-builder:$versions.xtext_gradle_plugin" } diff --git a/gradle/versions.gradle b/gradle/versions.gradle index 5a8616844..7a72dc0b5 100644 --- a/gradle/versions.gradle +++ b/gradle/versions.gradle @@ -8,7 +8,7 @@ ext.versions = [ 'xtext': version, 'xtext_bootstrap': '2.11.0.beta2', 'gradle_plugins': '0.1.0', - 'xtend_plugin': '1.0.14', + 'xtext_gradle_plugin': '1.0.15', 'lsp4j': '0.1.0-SNAPSHOT', 'log4j': '1.2.16', 'equinoxCommon' : '3.8.0', diff --git a/gradle/xtend-compiler-settings.gradle b/gradle/xtend-compiler-settings.gradle index 37a199a3d..37256421f 100644 --- a/gradle/xtend-compiler-settings.gradle +++ b/gradle/xtend-compiler-settings.gradle @@ -7,14 +7,17 @@ if (findProperty('compileXtend') == 'true') { gen.xtextClasspath = rootProject.configurations.getByName('xtendCompiler') } - sourcesJar { - from (sourceSets.main.xtendOutputDir) { - include '**/*._trace' - } - if (name.endsWith('tests')) { - from (sourceSets.test.xtendOutputDir) { + // Defer the sources jar configuration to later when the source sets are set up completely + afterEvaluate { + sourcesJar { + from (sourceSets.main.xtendOutputDir) { include '**/*._trace' } + if (name.endsWith('tests')) { + from (sourceSets.test.xtendOutputDir) { + include '**/*._trace' + } + } } } } From 02d37879040dea66ddb3dd9cdb0be3c5ec62d7dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Wed, 11 Jan 2017 13:34:05 +0100 Subject: [PATCH 12/14] Added common configuration file mwe2-workflows.gradle for generating Xtext languages from Gradle --- gradle/eclipse-project-layout.gradle | 1 - gradle/java-compiler-settings.gradle | 6 --- gradle/mwe2-workflows.gradle | 37 ++++++++++++++++++ org.eclipse.xtext.ide.tests/build.gradle | 22 ++++------- .../PartialContentAssistTestLanguage.genmodel | 2 +- .../model/generated/TestLanguage.genmodel | 2 +- org.eclipse.xtext.testlanguages/build.gradle | 13 +++++-- org.eclipse.xtext.tests/build.gradle | 38 ++++++++++++------- .../impl/EcorePerNsURIPackageImpl.java | 10 ----- .../EcorePerPlatformPluginPackageImpl.java | 10 ----- .../EcorePerPlatformResourcePackageImpl.java | 10 ----- org.eclipse.xtext.tests/plugin.xml | 23 +++++++++++ ...dGroupsTestLanguageSyntacticSequencer.java | 12 +++--- ...dGroupsTestLanguageSyntacticSequencer.java | 12 +++--- org.eclipse.xtext.xtext.bootstrap/.gitignore | 1 + .../build.gradle | 37 +++++++++--------- 16 files changed, 135 insertions(+), 101 deletions(-) create mode 100644 gradle/mwe2-workflows.gradle create mode 100644 org.eclipse.xtext.xtext.bootstrap/.gitignore diff --git a/gradle/eclipse-project-layout.gradle b/gradle/eclipse-project-layout.gradle index f42be1eae..ee158c801 100644 --- a/gradle/eclipse-project-layout.gradle +++ b/gradle/eclipse-project-layout.gradle @@ -60,7 +60,6 @@ if (isTestProject || name.contains('testlanguage')) { eclipse { classpath { plusConfigurations += [configurations.optional] - plusConfigurations += [configurations.mwe2Runtime] file.whenMerged { entries.each { source -> if (source.kind == 'src' && source.path.endsWith('-gen') && !source.path.equals('xtend-gen') ) { diff --git a/gradle/java-compiler-settings.gradle b/gradle/java-compiler-settings.gradle index 33017bcea..4e3759004 100644 --- a/gradle/java-compiler-settings.gradle +++ b/gradle/java-compiler-settings.gradle @@ -32,17 +32,11 @@ task javadocJar(type: Jar, dependsOn: javadoc) { from javadoc.destinationDir } -sourceSets { - mwe2 {} -} - configurations { optional { description 'Dependencies required at build time, but not exported into meta data' extendsFrom compile } - mwe2Compile.extendsFrom mainCompile - mwe2Runtime.extendsFrom mainRuntime // Put any unwanted transitive dependencies here, they will be excluded from all projects. all { diff --git a/gradle/mwe2-workflows.gradle b/gradle/mwe2-workflows.gradle new file mode 100644 index 000000000..d9748661e --- /dev/null +++ b/gradle/mwe2-workflows.gradle @@ -0,0 +1,37 @@ +/* + * Configuration of source sets, dependencies, and tasks for running MWE2 workflows. + */ + +sourceSets { + mwe2 {} +} + +eclipse.classpath.plusConfigurations += [configurations.mwe2Runtime] + +dependencies { + if (!name.endsWith('bootstrap')) { + mwe2Compile project(':org.eclipse.xtext.xtext.generator') + } + mwe2Runtime "org.eclipse.emf:org.eclipse.emf.mwe2.launch:$versions.emfMwe2" + mwe2Runtime "org.eclipse.xtext:org.eclipse.xtext.common.types:$versions.xtext_bootstrap" + mwe2Runtime "org.eclipse.xtext:org.eclipse.xtext.ecore:$versions.xtext_bootstrap" +} + +if (findProperty('compileXtend') == 'true') { + generateMwe2Xtext.xtextClasspath = rootProject.configurations.getByName('xtendCompiler') +} + +class XtextGeneratorTask extends JavaExec { + XtextGeneratorTask() { + group = 'Build' + main = 'org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher' + classpath = project.sourceSets.mwe2.runtimeClasspath + } + def setWorkflow(File workflowFile) { + args = [workflowFile.path, "-p", "rootPath=${project.rootDir}"] + inputs.file workflowFile + description "Execute the MWE2 workflow ${workflowFile.name}" + } +} + +ext.XtextGeneratorTask = XtextGeneratorTask diff --git a/org.eclipse.xtext.ide.tests/build.gradle b/org.eclipse.xtext.ide.tests/build.gradle index 0ee4a6034..0b351bcf5 100644 --- a/org.eclipse.xtext.ide.tests/build.gradle +++ b/org.eclipse.xtext.ide.tests/build.gradle @@ -1,3 +1,5 @@ +apply from: "${rootDir}/gradle/mwe2-workflows.gradle" + dependencies { compile project(':org.eclipse.xtext.ide') compile project(':org.eclipse.xtext.testing') @@ -5,20 +7,6 @@ dependencies { compile project(':org.eclipse.xtext.testlanguages.ide') compile "junit:junit:$versions.junit" compile "org.eclipse.lsp4j:org.eclipse.lsp4j:$versions.lsp4j" - mwe2Compile project(':org.eclipse.xtext.xtext.generator') - mwe2Compile "org.eclipse.xtext:org.eclipse.xtext.common.types:$versions.xtext_bootstrap" - mwe2Runtime "org.eclipse.emf:org.eclipse.emf.mwe2.launch:$versions.emfMwe2" -} - -task generateXtextLanguage(type: JavaExec) { - main = 'org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher' - classpath = configurations.mwe2Runtime - inputs.file "testlang-src/org/eclipse/xtext/ide/tests/testlanguage/GenerateTestLanguage.mwe2" - inputs.file "testlang-src/org/eclipse/xtext/ide/tests/testlanguage/TestLanguage.xtext" - outputs.dir "testlang-src-gen" - args += "testlang-src/org/eclipse/xtext/ide/tests/testlanguage/GenerateTestLanguage.mwe2" - args += "-p" - args += "rootPath=/${projectDir}/.." } sourceSets.test.java { @@ -29,3 +17,9 @@ sourceSets.test.resources { srcDir 'testlang-src' srcDir 'testlang-src-gen' } + +task generateTestLanguages(type: XtextGeneratorTask) { + workflow = file('testlang-src/org/eclipse/xtext/ide/tests/testlanguage/GenerateTestLanguage.mwe2') + inputs.file 'testlang-src/org/eclipse/xtext/ide/tests/testlanguage/TestLanguage.xtext' + outputs.dir 'testlang-src-gen' +} diff --git a/org.eclipse.xtext.ide.tests/model/generated/PartialContentAssistTestLanguage.genmodel b/org.eclipse.xtext.ide.tests/model/generated/PartialContentAssistTestLanguage.genmodel index 439677fc0..3d0dea5cd 100644 --- a/org.eclipse.xtext.ide.tests/model/generated/PartialContentAssistTestLanguage.genmodel +++ b/org.eclipse.xtext.ide.tests/model/generated/PartialContentAssistTestLanguage.genmodel @@ -4,7 +4,7 @@ modelDirectory="/org.eclipse.xtext.ide.tests/testlang-src-gen" modelPluginID="org.eclipse.xtext.ide.tests" forceOverwrite="true" modelName="PartialContentAssistTestLanguage" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" complianceLevel="6.0" - copyrightFields="false" runtimeVersion="2.11"> + copyrightFields="false" runtimeVersion="2.12"> diff --git a/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.genmodel b/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.genmodel index 00e266c31..70d0bf6a9 100644 --- a/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.genmodel +++ b/org.eclipse.xtext.ide.tests/model/generated/TestLanguage.genmodel @@ -3,7 +3,7 @@ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2016 TypeFox GmbH (http://www.typefox.io) 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" modelDirectory="/org.eclipse.xtext.ide.tests/testlang-src-gen" modelPluginID="org.eclipse.xtext.ide.tests" forceOverwrite="true" modelName="TestLanguage" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" - complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.11"> + complianceLevel="6.0" copyrightFields="false" runtimeVersion="2.12"> diff --git a/org.eclipse.xtext.testlanguages/build.gradle b/org.eclipse.xtext.testlanguages/build.gradle index 21b8942cb..8aad6e55b 100644 --- a/org.eclipse.xtext.testlanguages/build.gradle +++ b/org.eclipse.xtext.testlanguages/build.gradle @@ -1,10 +1,15 @@ +apply from: "${rootDir}/gradle/mwe2-workflows.gradle" + dependencies { compile project(':org.eclipse.xtext') compile project(':org.eclipse.xtext.testing') compile "org.eclipse.platform:org.eclipse.core.runtime:$versions.eclipseCore" - mwe2Compile project(':org.eclipse.xtext.xtext.generator') - mwe2Runtime "org.eclipse.xtext:org.eclipse.xtext.common.types:$versions.xtext_bootstrap" - mwe2Runtime "org.eclipse.emf:org.eclipse.emf.mwe2.launch:$versions.emfMwe2" } -uploadArchives.enabled = false +// Include the mwe2 and xtext files from the main source set when executing the workflow +sourceSets.mwe2.runtimeClasspath += processResources.outputs.files + +task generateTestLanguages(type: XtextGeneratorTask) { + workflow = file('src/org/eclipse/xtext/testlanguages/GenerateTestLanguages.mwe2') + outputs.dir 'src-gen' +} diff --git a/org.eclipse.xtext.tests/build.gradle b/org.eclipse.xtext.tests/build.gradle index 252ce7ae6..b8576c55a 100644 --- a/org.eclipse.xtext.tests/build.gradle +++ b/org.eclipse.xtext.tests/build.gradle @@ -1,8 +1,4 @@ -repositories { - flatDir { - dirs 'lib' - } -} +apply from: "${rootDir}/gradle/mwe2-workflows.gradle" dependencies { compile project(':org.eclipse.xtext.testing') @@ -12,19 +8,33 @@ dependencies { compile "junit:junit:$versions.junit" compile "org.eclipse.emf:org.eclipse.emf.common:$versions.emfCommon" compile "org.eclipse.emf:org.eclipse.emf.ecore.xmi:$versions.emfEcore" - // From the 'lib' folder - optional name: 'simple' - mwe2Runtime "org.eclipse.xtext:org.eclipse.xtext.common.types:$versions.xtext_bootstrap" - mwe2Runtime "org.eclipse.emf:org.eclipse.emf.mwe2.launch:$versions.emfMwe2" + optional files('lib/simple.jar') + // The MWE2 workflow depends on emf-gen, so we have to include it in the test dependencies + testCompile sourceSets.mwe2.output } -sourceSets.test.java { - srcDir 'suites' +sourceSets.test { + java.srcDirs = ['src', 'src-gen', 'suites'] + if (findProperty('compileXtend') != 'true') { + java.srcDir 'xtend-gen' + } } -sourceSets.mwe2.java { - srcDir 'generator/src' - srcDir 'generator/xtend-gen' +sourceSets.mwe2 { + java.srcDirs = ['generator/src', 'emf-gen'] + if (findProperty('compileXtend') == 'true') { + xtendOutputDir = 'generator/xtend-gen' + } else { + java.srcDir 'generator/xtend-gen' + } + runtimeClasspath += processTestResources.outputs.files +} +jar.from sourceSets.mwe2.output +sourcesJar.from sourceSets.mwe2.allSource + +task generateTestLanguages(type: XtextGeneratorTask) { + workflow = file('src/org/eclipse/xtext/GenerateAllTestLanguages.mwe2') + outputs.dir 'src-gen' } test { diff --git a/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerNsURI/impl/EcorePerNsURIPackageImpl.java b/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerNsURI/impl/EcorePerNsURIPackageImpl.java index 2e976d05b..33fa4cbe7 100644 --- a/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerNsURI/impl/EcorePerNsURIPackageImpl.java +++ b/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerNsURI/impl/EcorePerNsURIPackageImpl.java @@ -11,25 +11,15 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EcorePackage; - import org.eclipse.emf.ecore.impl.EPackageImpl; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerNsURI.EcorePerNsURIFactory; import org.eclipse.xtext.metamodelreferencing.tests.ecorePerNsURI.EcorePerNsURIPackage; import org.eclipse.xtext.metamodelreferencing.tests.ecorePerNsURI.ExtendsNsURIEObject; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformPlugin.EcorePerPlatformPluginPackage; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformPlugin.impl.EcorePerPlatformPluginPackageImpl; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformResource.EcorePerPlatformResourcePackage; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformResource.impl.EcorePerPlatformResourcePackageImpl; -import org.eclipse.xtext.metamodelreferencing.tests.ecoreReference.EcoreReferencePackage; - -import org.eclipse.xtext.metamodelreferencing.tests.ecoreReference.impl.EcoreReferencePackageImpl; - /** * * An implementation of the model Package. diff --git a/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerPlatformPlugin/impl/EcorePerPlatformPluginPackageImpl.java b/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerPlatformPlugin/impl/EcorePerPlatformPluginPackageImpl.java index 48a639062..621e333b3 100644 --- a/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerPlatformPlugin/impl/EcorePerPlatformPluginPackageImpl.java +++ b/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerPlatformPlugin/impl/EcorePerPlatformPluginPackageImpl.java @@ -11,26 +11,16 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EcorePackage; - import org.eclipse.emf.ecore.impl.EPackageImpl; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerNsURI.EcorePerNsURIPackage; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerNsURI.impl.EcorePerNsURIPackageImpl; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformPlugin.EcorePerPlatformPluginFactory; import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformPlugin.EcorePerPlatformPluginPackage; import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformPlugin.ExtendsEAttribute; import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformPlugin.ExtendsPluginEObject; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformResource.EcorePerPlatformResourcePackage; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformResource.impl.EcorePerPlatformResourcePackageImpl; -import org.eclipse.xtext.metamodelreferencing.tests.ecoreReference.EcoreReferencePackage; - -import org.eclipse.xtext.metamodelreferencing.tests.ecoreReference.impl.EcoreReferencePackageImpl; - /** * * An implementation of the model Package. diff --git a/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerPlatformResource/impl/EcorePerPlatformResourcePackageImpl.java b/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerPlatformResource/impl/EcorePerPlatformResourcePackageImpl.java index 186c6609e..729f4ee30 100644 --- a/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerPlatformResource/impl/EcorePerPlatformResourcePackageImpl.java +++ b/org.eclipse.xtext.tests/emf-gen/org/eclipse/xtext/metamodelreferencing/tests/ecorePerPlatformResource/impl/EcorePerPlatformResourcePackageImpl.java @@ -11,25 +11,15 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EcorePackage; - import org.eclipse.emf.ecore.impl.EPackageImpl; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerNsURI.EcorePerNsURIPackage; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerNsURI.impl.EcorePerNsURIPackageImpl; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformPlugin.EcorePerPlatformPluginPackage; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformPlugin.impl.EcorePerPlatformPluginPackageImpl; - import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformResource.EcorePerPlatformResourceFactory; import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformResource.EcorePerPlatformResourcePackage; import org.eclipse.xtext.metamodelreferencing.tests.ecorePerPlatformResource.ExtendsResourceEObject; -import org.eclipse.xtext.metamodelreferencing.tests.ecoreReference.EcoreReferencePackage; - -import org.eclipse.xtext.metamodelreferencing.tests.ecoreReference.impl.EcoreReferencePackageImpl; - /** * * An implementation of the model Package. diff --git a/org.eclipse.xtext.tests/plugin.xml b/org.eclipse.xtext.tests/plugin.xml index b8b1de6f6..11bad6eed 100755 --- a/org.eclipse.xtext.tests/plugin.xml +++ b/org.eclipse.xtext.tests/plugin.xml @@ -886,4 +886,27 @@ class="org.eclipse.xtext.generator.ecore.genmodelaccess.noLiterals.NoLiteralsPackage" genModel="src/org/eclipse/xtext/generator/ecore/GenModelAccessTest.genmodel"/> + + + + + + + + + + + + + + diff --git a/org.eclipse.xtext.tests/src-gen/org/eclipse/xtext/parser/unorderedGroups/serializer/ExUnorderedGroupsTestLanguageSyntacticSequencer.java b/org.eclipse.xtext.tests/src-gen/org/eclipse/xtext/parser/unorderedGroups/serializer/ExUnorderedGroupsTestLanguageSyntacticSequencer.java index 314f9f85a..31df2745c 100644 --- a/org.eclipse.xtext.tests/src-gen/org/eclipse/xtext/parser/unorderedGroups/serializer/ExUnorderedGroupsTestLanguageSyntacticSequencer.java +++ b/org.eclipse.xtext.tests/src-gen/org/eclipse/xtext/parser/unorderedGroups/serializer/ExUnorderedGroupsTestLanguageSyntacticSequencer.java @@ -62,14 +62,14 @@ public class ExUnorderedGroupsTestLanguageSyntacticSequencer extends AbstractSyn /** * Ambiguous syntax: * ( - * '5' | - * '6' | * '3' | - * '11' | - * '7' | - * '4' | * '10' | - * 'bug302585' + * 'bug302585' | + * '4' | + * '6' | + * '5' | + * '11' | + * '7' * ) * * This ambiguous syntax occurs at: diff --git a/org.eclipse.xtext.tests/src-gen/org/eclipse/xtext/parser/unorderedGroups/serializer/SimpleUnorderedGroupsTestLanguageSyntacticSequencer.java b/org.eclipse.xtext.tests/src-gen/org/eclipse/xtext/parser/unorderedGroups/serializer/SimpleUnorderedGroupsTestLanguageSyntacticSequencer.java index 54a266491..a75c5c104 100644 --- a/org.eclipse.xtext.tests/src-gen/org/eclipse/xtext/parser/unorderedGroups/serializer/SimpleUnorderedGroupsTestLanguageSyntacticSequencer.java +++ b/org.eclipse.xtext.tests/src-gen/org/eclipse/xtext/parser/unorderedGroups/serializer/SimpleUnorderedGroupsTestLanguageSyntacticSequencer.java @@ -63,13 +63,13 @@ public class SimpleUnorderedGroupsTestLanguageSyntacticSequencer extends Abstrac * Ambiguous syntax: * ( * '3' | - * '5' | - * '11' | - * '4' | - * '10' | - * 'bug302585' | * '6' | - * '7' + * '10' | + * '7' | + * '4' | + * '5' | + * 'bug302585' | + * '11' * ) * * This ambiguous syntax occurs at: diff --git a/org.eclipse.xtext.xtext.bootstrap/.gitignore b/org.eclipse.xtext.xtext.bootstrap/.gitignore new file mode 100644 index 000000000..f3f1c4be1 --- /dev/null +++ b/org.eclipse.xtext.xtext.bootstrap/.gitignore @@ -0,0 +1 @@ +.antlr-generator-*.jar diff --git a/org.eclipse.xtext.xtext.bootstrap/build.gradle b/org.eclipse.xtext.xtext.bootstrap/build.gradle index f156e1278..ba13b611c 100644 --- a/org.eclipse.xtext.xtext.bootstrap/build.gradle +++ b/org.eclipse.xtext.xtext.bootstrap/build.gradle @@ -1,26 +1,27 @@ +apply from: "${rootDir}/gradle/mwe2-workflows.gradle" + dependencies { // We cannot use the projects within the workspace, as we would have // to compile them before generating the code, so we need to stick to the bootstrapping version. - // Buildship, however, links the workspace projects anyway (as yet). + // Buildship, however, links the workspace projects anyway if a composite build is used. compile "org.eclipse.xtext:org.eclipse.xtext:$versions.xtext_bootstrap" compile "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:$versions.xtext_bootstrap" - - // Dependencies required for successfully executing the Xtext generation workflow - mwe2Runtime "org.eclipse.emf:org.eclipse.emf.mwe2.launch:$versions.emfMwe2" - mwe2Runtime "org.eclipse.xtext:org.eclipse.xtext.common.types:$versions.xtext_bootstrap" - mwe2Runtime "org.eclipse.xtext:org.eclipse.xtext.ecore:$versions.xtext_bootstrap" } -// Call this task for generating the 'Xtext' language implementation. -// The employed version of the Xtext generator is determined by '$versions.xtext_bootstrap', see above. -task generateXtextLanguage(type: JavaExec) { - main = 'org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher' - classpath = sourceSets.mwe2.runtimeClasspath - args += "src/org/eclipse/xtext/xtext/bootstrap/GenerateXtext.mwe2" - args += "-p" - args += "rootPath=/${projectDir}/.." -} +sourceSets.main.java.srcDirs = [] -// The following setting would cause 'generateXtextLanguage' to be executed as part of 'build', -// namely before compiling the classes of the 'main' sourceSet, which however is empty here. -// classes.dependsOn(generateXtextLanguage) +sourceSets.mwe2 { + java.srcDir 'src' + if (findProperty('compileXtend') == 'true') { + xtendOutputDir = 'xtend-gen' + } else { + java.srcDir 'xtend-gen' + } +} +configurations.mwe2Compile.extendsFrom configurations.compile +jar.from sourceSets.mwe2.output +sourcesJar.from sourceSets.mwe2.allSource + +task generateXtextLanguage(type: XtextGeneratorTask) { + workflow = file('src/org/eclipse/xtext/xtext/bootstrap/GenerateXtext.mwe2') +} From eb71f2079ac970537bc0676ff13bf6846cee93fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Thu, 12 Jan 2017 09:51:31 +0100 Subject: [PATCH 13/14] [build] Excluded bootstrap project from eclipse-project-layout --- build.gradle | 5 ++++- org.eclipse.xtext.xtext.bootstrap/build.gradle | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f2882c269..14385f4ad 100644 --- a/build.gradle +++ b/build.gradle @@ -35,7 +35,10 @@ subprojects { apply from: "${rootDir}/gradle/java-compiler-settings.gradle" apply from: "${rootDir}/gradle/xtend-compiler-settings.gradle" apply from: "${rootDir}/gradle/maven-deployment.gradle" - apply from: "${rootDir}/gradle/eclipse-project-layout.gradle" + // The bootstrap project uses only the mwe2 source set + if (!name.endsWith('bootstrap')) { + apply from: "${rootDir}/gradle/eclipse-project-layout.gradle" + } apply from: "${rootDir}/gradle/manifest-gen.gradle" apply from: "${rootDir}/gradle/validation.gradle" } diff --git a/org.eclipse.xtext.xtext.bootstrap/build.gradle b/org.eclipse.xtext.xtext.bootstrap/build.gradle index ba13b611c..60fd5fa30 100644 --- a/org.eclipse.xtext.xtext.bootstrap/build.gradle +++ b/org.eclipse.xtext.xtext.bootstrap/build.gradle @@ -1,3 +1,11 @@ +/* + * Bootstrap project for the Xtext language. It contains an MWE2 generator workflow with + * dedicated configuration code. The workflow generates into the core and generic ide projects + * as well as the Eclipse and IDEA integration projects, which are defined in different + * source repositories. The path to these other repositories is assumed to be ../xtext-eclipse + * and ../xtext-idea, respectively. + */ + apply from: "${rootDir}/gradle/mwe2-workflows.gradle" dependencies { @@ -9,6 +17,9 @@ dependencies { } sourceSets.main.java.srcDirs = [] +sourceSets.main.resources.srcDirs = [] +sourceSets.test.java.srcDirs = [] +sourceSets.test.resources.srcDirs = [] sourceSets.mwe2 { java.srcDir 'src' @@ -25,3 +36,10 @@ sourcesJar.from sourceSets.mwe2.allSource task generateXtextLanguage(type: XtextGeneratorTask) { workflow = file('src/org/eclipse/xtext/xtext/bootstrap/GenerateXtext.mwe2') } + +eclipse { + project { + natures 'org.eclipse.xtext.ui.shared.xtextNature' + buildCommands.add(0,new org.gradle.plugins.ide.eclipse.model.BuildCommand('org.eclipse.xtext.ui.shared.xtextBuilder')) + } +} From 0515d226852bb2c2aee09f7e25facf25d702c5d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Spo=CC=88nemann?= Date: Thu, 12 Jan 2017 10:32:06 +0100 Subject: [PATCH 14/14] Refreshed projects with Buildship 2.0 --- .project | 5 ---- org.eclipse.xtext.ide.tests/.classpath | 19 ++---------- org.eclipse.xtext.ide.tests/.project | 5 ---- org.eclipse.xtext.ide/.classpath | 12 ++------ org.eclipse.xtext.ide/.project | 5 ---- org.eclipse.xtext.testing/.classpath | 18 ++--------- org.eclipse.xtext.testing/.project | 5 ---- .../.classpath | 7 +---- org.eclipse.xtext.testlanguages.ide/.project | 5 ---- org.eclipse.xtext.testlanguages/.classpath | 13 ++------ org.eclipse.xtext.testlanguages/.project | 5 ---- org.eclipse.xtext.tests/.classpath | 27 +++-------------- org.eclipse.xtext.tests/.project | 5 ---- org.eclipse.xtext.util/.classpath | 12 ++------ org.eclipse.xtext.util/.project | 5 ---- org.eclipse.xtext.xtext.bootstrap/.classpath | 12 ++------ org.eclipse.xtext.xtext.bootstrap/.project | 5 ---- org.eclipse.xtext.xtext.generator/.classpath | 13 ++------ org.eclipse.xtext.xtext.generator/.project | 5 ---- org.eclipse.xtext.xtext.ide/.classpath | 7 +---- org.eclipse.xtext.xtext.ide/.project | 30 +++++++++---------- org.eclipse.xtext.xtext.wizard/.classpath | 18 ++--------- org.eclipse.xtext.xtext.wizard/.project | 5 ---- org.eclipse.xtext/.classpath | 20 ++----------- org.eclipse.xtext/.project | 5 ---- 25 files changed, 42 insertions(+), 226 deletions(-) diff --git a/.project b/.project index 259ea2655..1ace49604 100644 --- a/.project +++ b/.project @@ -5,11 +5,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.ide.tests/.classpath b/org.eclipse.xtext.ide.tests/.classpath index 15bdd0fa1..0043d86df 100644 --- a/org.eclipse.xtext.ide.tests/.classpath +++ b/org.eclipse.xtext.ide.tests/.classpath @@ -1,24 +1,11 @@ - - - - - - - - - - - - - - - + + + - diff --git a/org.eclipse.xtext.ide.tests/.project b/org.eclipse.xtext.ide.tests/.project index 189d0c567..b63881c1c 100644 --- a/org.eclipse.xtext.ide.tests/.project +++ b/org.eclipse.xtext.ide.tests/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.ide/.classpath b/org.eclipse.xtext.ide/.classpath index 2c86cbae2..ff4de9542 100644 --- a/org.eclipse.xtext.ide/.classpath +++ b/org.eclipse.xtext.ide/.classpath @@ -1,15 +1,7 @@ - - - - - - - - - - + + diff --git a/org.eclipse.xtext.ide/.project b/org.eclipse.xtext.ide/.project index 19a65ecb5..1d9b1562e 100644 --- a/org.eclipse.xtext.ide/.project +++ b/org.eclipse.xtext.ide/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.testing/.classpath b/org.eclipse.xtext.testing/.classpath index 8ab566493..e044adede 100644 --- a/org.eclipse.xtext.testing/.classpath +++ b/org.eclipse.xtext.testing/.classpath @@ -1,20 +1,8 @@ - - - - - - - - - - - - - - - + + + diff --git a/org.eclipse.xtext.testing/.project b/org.eclipse.xtext.testing/.project index c3ecece48..f86f2856b 100644 --- a/org.eclipse.xtext.testing/.project +++ b/org.eclipse.xtext.testing/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.testlanguages.ide/.classpath b/org.eclipse.xtext.testlanguages.ide/.classpath index 61b3660a4..6911d19cd 100644 --- a/org.eclipse.xtext.testlanguages.ide/.classpath +++ b/org.eclipse.xtext.testlanguages.ide/.classpath @@ -1,14 +1,9 @@ - - - - - + - diff --git a/org.eclipse.xtext.testlanguages.ide/.project b/org.eclipse.xtext.testlanguages.ide/.project index 175d535a2..5fb7de12c 100644 --- a/org.eclipse.xtext.testlanguages.ide/.project +++ b/org.eclipse.xtext.testlanguages.ide/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.testlanguages/.classpath b/org.eclipse.xtext.testlanguages/.classpath index 95bc5ae57..f10cbac4b 100644 --- a/org.eclipse.xtext.testlanguages/.classpath +++ b/org.eclipse.xtext.testlanguages/.classpath @@ -1,19 +1,10 @@ - - - - - - - - - - + + - diff --git a/org.eclipse.xtext.testlanguages/.project b/org.eclipse.xtext.testlanguages/.project index 8ea51f710..3f909b41e 100644 --- a/org.eclipse.xtext.testlanguages/.project +++ b/org.eclipse.xtext.testlanguages/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.tests/.classpath b/org.eclipse.xtext.tests/.classpath index 76839ce42..b62832fcf 100644 --- a/org.eclipse.xtext.tests/.classpath +++ b/org.eclipse.xtext.tests/.classpath @@ -1,41 +1,22 @@ - - - - - - - - - - + + - - - - - - - - - - - - + + - diff --git a/org.eclipse.xtext.tests/.project b/org.eclipse.xtext.tests/.project index f42e37da1..08876e895 100644 --- a/org.eclipse.xtext.tests/.project +++ b/org.eclipse.xtext.tests/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.util/.classpath b/org.eclipse.xtext.util/.classpath index 2c86cbae2..ff4de9542 100644 --- a/org.eclipse.xtext.util/.classpath +++ b/org.eclipse.xtext.util/.classpath @@ -1,15 +1,7 @@ - - - - - - - - - - + + diff --git a/org.eclipse.xtext.util/.project b/org.eclipse.xtext.util/.project index 92f779a2d..2bd39eea9 100644 --- a/org.eclipse.xtext.util/.project +++ b/org.eclipse.xtext.util/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.xtext.bootstrap/.classpath b/org.eclipse.xtext.xtext.bootstrap/.classpath index 8a20c8f74..6eda8c172 100644 --- a/org.eclipse.xtext.xtext.bootstrap/.classpath +++ b/org.eclipse.xtext.xtext.bootstrap/.classpath @@ -1,15 +1,7 @@ - - - - - - - - - - + + diff --git a/org.eclipse.xtext.xtext.bootstrap/.project b/org.eclipse.xtext.xtext.bootstrap/.project index 771577e67..e9ae22b81 100644 --- a/org.eclipse.xtext.xtext.bootstrap/.project +++ b/org.eclipse.xtext.xtext.bootstrap/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.jdt.core.javanature diff --git a/org.eclipse.xtext.xtext.generator/.classpath b/org.eclipse.xtext.xtext.generator/.classpath index 95bc5ae57..f10cbac4b 100644 --- a/org.eclipse.xtext.xtext.generator/.classpath +++ b/org.eclipse.xtext.xtext.generator/.classpath @@ -1,19 +1,10 @@ - - - - - - - - - - + + - diff --git a/org.eclipse.xtext.xtext.generator/.project b/org.eclipse.xtext.xtext.generator/.project index a6e80ff8d..2ed4d6fd8 100644 --- a/org.eclipse.xtext.xtext.generator/.project +++ b/org.eclipse.xtext.xtext.generator/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext.xtext.ide/.classpath b/org.eclipse.xtext.xtext.ide/.classpath index 61b3660a4..6911d19cd 100644 --- a/org.eclipse.xtext.xtext.ide/.classpath +++ b/org.eclipse.xtext.xtext.ide/.classpath @@ -1,14 +1,9 @@ - - - - - + - diff --git a/org.eclipse.xtext.xtext.ide/.project b/org.eclipse.xtext.xtext.ide/.project index 9d143a2fb..71297fddb 100644 --- a/org.eclipse.xtext.xtext.ide/.project +++ b/org.eclipse.xtext.xtext.ide/.project @@ -2,25 +2,23 @@ org.eclipse.xtext.xtext.ide Xtext Language generic IDE support. - + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + org.eclipse.buildship.core.gradleprojectnature org.eclipse.jdt.core.javanature org.eclipse.xtext.ui.shared.xtextNature - - - org.eclipse.xtext.ui.shared.xtextBuilder - - - - org.eclipse.jdt.core.javabuilder - - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - diff --git a/org.eclipse.xtext.xtext.wizard/.classpath b/org.eclipse.xtext.xtext.wizard/.classpath index 98c52cad1..d1d14ee8a 100644 --- a/org.eclipse.xtext.xtext.wizard/.classpath +++ b/org.eclipse.xtext.xtext.wizard/.classpath @@ -1,20 +1,8 @@ - - - - - - - - - - - - - - - + + + diff --git a/org.eclipse.xtext.xtext.wizard/.project b/org.eclipse.xtext.xtext.wizard/.project index cf0f054bf..df4bb4b44 100644 --- a/org.eclipse.xtext.xtext.wizard/.project +++ b/org.eclipse.xtext.xtext.wizard/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature diff --git a/org.eclipse.xtext/.classpath b/org.eclipse.xtext/.classpath index 56700aed2..72a5f84c9 100644 --- a/org.eclipse.xtext/.classpath +++ b/org.eclipse.xtext/.classpath @@ -1,32 +1,18 @@ - - - - - - - - - - + + - - - - - - - + diff --git a/org.eclipse.xtext/.project b/org.eclipse.xtext/.project index e30585a4c..c6c3ec72d 100644 --- a/org.eclipse.xtext/.project +++ b/org.eclipse.xtext/.project @@ -15,11 +15,6 @@ - - org.eclipse.buildship.core.gradleprojectbuilder - - - org.eclipse.buildship.core.gradleprojectnature