diff --git a/plugins/org.eclipse.xtext.util/src/org/eclipse/xtext/util/MergeableManifest.java b/plugins/org.eclipse.xtext.util/src/org/eclipse/xtext/util/MergeableManifest.java index 080ace83a..855c7eb01 100644 --- a/plugins/org.eclipse.xtext.util/src/org/eclipse/xtext/util/MergeableManifest.java +++ b/plugins/org.eclipse.xtext.util/src/org/eclipse/xtext/util/MergeableManifest.java @@ -8,6 +8,8 @@ *******************************************************************************/ package org.eclipse.xtext.util; +import static com.google.common.collect.Sets.*; + import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; @@ -24,6 +26,7 @@ import java.util.Set; import java.util.jar.Attributes; import java.util.jar.Manifest; +import com.google.common.base.Objects; import com.google.common.collect.Lists; /** @@ -215,6 +218,25 @@ public class MergeableManifest extends Manifest { getMainAttributes().put(REQUIRE_BUNDLE, result); } + /** + * @since 2.9 + */ + public String getBREE() { + return (String) getMainAttributes().get(BUNDLE_REQUIRED_EXECUTION_ENV); + } + + /** + * @since 2.9 + */ + public void setBREE(String bree) { + String oldValue = getBREE(); + if(Objects.equal(oldValue, bree)) { + return; + } + getMainAttributes().put(BUNDLE_REQUIRED_EXECUTION_ENV, bree); + this.modified = true; + } + public boolean isModified() { return modified; } @@ -259,6 +281,18 @@ public class MergeableManifest extends Manifest { this.modified = modified.get(); getMainAttributes().put(EXPORT_PACKAGE, result); } + + /** + * adds the qualified names to the export-package attribute, if not already + * present. + * + * @param packages - packages to add + * + * @since 2.9 + */ + public void addExportedPackages(String... packages) { + addExportedPackages(newHashSet(packages)); + } public void addImportedPackages(Set packages) { String s = (String) getMainAttributes().get(IMPORT_PACKAGE); diff --git a/plugins/org.eclipse.xtext/org/eclipse/xtext/Xtext.genmodel b/plugins/org.eclipse.xtext/org/eclipse/xtext/Xtext.genmodel index 867be9a08..85cfe1ce6 100644 --- a/plugins/org.eclipse.xtext/org/eclipse/xtext/Xtext.genmodel +++ b/plugins/org.eclipse.xtext/org/eclipse/xtext/Xtext.genmodel @@ -84,7 +84,9 @@ - + + + @@ -96,14 +98,26 @@ - - - - - + + + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/AbstractTraceRegion.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/AbstractTraceRegion.java index 1c78d200a..f74237931 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/AbstractTraceRegion.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/AbstractTraceRegion.java @@ -343,7 +343,7 @@ public abstract class AbstractTraceRegion { if (data.getSrcRelativePath() == null) { if (!allNull) throw new IllegalStateException( - "If multiple associated locations are present, the path has to be set"); + "Iff multiple associated locations are present, the path has to be set"); } else { allNull = false; path = data.getSrcRelativePath(); diff --git a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/xtext/XtextLinker.java b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/xtext/XtextLinker.java index aff633549..cafd8c71e 100644 --- a/plugins/org.eclipse.xtext/src/org/eclipse/xtext/xtext/XtextLinker.java +++ b/plugins/org.eclipse.xtext/src/org/eclipse/xtext/xtext/XtextLinker.java @@ -163,12 +163,23 @@ public class XtextLinker extends Linker { if (!argument.isCalledByName()) { RuleCall ruleCall = EcoreUtil2.getContainerOfType(argument, RuleCall.class); AbstractRule calledRule = ruleCall.getRule(); - if (calledRule instanceof ParserRule && !calledRule.eIsProxy()) { + if (!(calledRule instanceof ParserRule)) { + producer.addDiagnostic(new DiagnosticMessage("Arguments can only be used with parser rules.", Severity.ERROR, null)); + return; + } + if (!calledRule.eIsProxy()) { ParserRule casted = (ParserRule) calledRule; int idx = ruleCall.getArguments().indexOf(argument); if (idx < casted.getParameters().size()) { argument.setParameter(casted.getParameters().get(idx)); return; + } else if (casted.getParameters().size() == 0) { + producer.addDiagnostic(new DiagnosticMessage( + "Rule " + calledRule.getName() + " has no arguments.", Severity.ERROR, null)); + } else { + String message = "Invalid number of arguments for rule " + calledRule.getName() + ", expecting " + + casted.getParameters().size() + " but was " + (idx+1); + producer.addDiagnostic(new DiagnosticMessage(message, Severity.ERROR, null)); } } } diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/URIsInEcoreFilesTest.java b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/URIsInEcoreFilesTest.java new file mode 100644 index 000000000..8c1068359 --- /dev/null +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/URIsInEcoreFilesTest.java @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2015 itemis AG (http://www.itemis.eu) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ +package org.eclipse.xtext.xtext; + +import org.eclipse.xtext.junit4.internal.AbstractPortableURIsTest; +import org.junit.Test; + +/** + * @author zarnekow - Initial contribution and API + */ +public class URIsInEcoreFilesTest extends AbstractPortableURIsTest { + + @Test public void testXtext() { + doTestResource("org.eclipse.xtext/org/eclipse/xtext/Xtext.ecore", "xtext"); + } + + @Test public void testXtextGenmodel() { + doTestResource("org.eclipse.xtext/org/eclipse/xtext/Xtext.genmodel", "xtext"); + } + +}