mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 16:58:56 +00:00
Merge "Fixes bug 453524: - created a preference page and a project properties page to manage problem markers in the Xtext grammar editor - added a warning for bidirectional references - moved issue identifier strings from XtextValidator to XtextConfigurableIssueCodes - using addIssue(..) instead of error(..) / warning(..) in order to respect the user preferences - added ConfigurableIssueCodesPreferenceStoreInitializer to DefaultUiModule - fixed a problem in OptionsConfigurationBlock.hasProjectSpecificOptions(IProject)"
This commit is contained in:
commit
063aa839e6
5 changed files with 167 additions and 58 deletions
|
@ -55,7 +55,7 @@ Export-Package: org.eclipse.xtext,
|
|||
org.eclipse.xtext.parser.packrat.tokens;x-internal:=true,
|
||||
org.eclipse.xtext.parsetree.reconstr,
|
||||
org.eclipse.xtext.parsetree.reconstr.impl,
|
||||
org.eclipse.xtext.preferences;x-friends:="org.eclipse.xtext.xbase.ui,org.eclipse.xtend.ide",
|
||||
org.eclipse.xtext.preferences;x-friends:="org.eclipse.xtext.xbase.ui,org.eclipse.xtend.ide,org.eclipse.xtext.xtext.ui",
|
||||
org.eclipse.xtext.resource,
|
||||
org.eclipse.xtext.resource.clustering;x-internal:=true,
|
||||
org.eclipse.xtext.resource.containers,
|
||||
|
|
|
@ -27,8 +27,10 @@ import org.eclipse.xtext.resource.XtextResource;
|
|||
import org.eclipse.xtext.scoping.IGlobalScopeProvider;
|
||||
import org.eclipse.xtext.scoping.IScopeProvider;
|
||||
import org.eclipse.xtext.scoping.impl.DefaultGlobalScopeProvider;
|
||||
import org.eclipse.xtext.validation.ConfigurableIssueCodesProvider;
|
||||
import org.eclipse.xtext.validation.IDiagnosticConverter;
|
||||
import org.eclipse.xtext.xtext.GrammarResource;
|
||||
import org.eclipse.xtext.xtext.XtextConfigurableIssueCodes;
|
||||
import org.eclipse.xtext.xtext.XtextCrossReferenceSerializer;
|
||||
import org.eclipse.xtext.xtext.XtextDiagnosticConverter;
|
||||
import org.eclipse.xtext.xtext.XtextFormatter;
|
||||
|
@ -155,4 +157,11 @@ public class XtextRuntimeModule extends AbstractXtextRuntimeModule {
|
|||
public Class<? extends IResourceDescription.Manager> bindIResourceDescriptionManager() {
|
||||
return DerivedStateAwareResourceDescriptionManager.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 2.8
|
||||
*/
|
||||
public Class<? extends ConfigurableIssueCodesProvider> bindConfigurableIssueCodesProvider() {
|
||||
return XtextConfigurableIssueCodes.class;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2014 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 java.util.Map;
|
||||
|
||||
import org.eclipse.xtext.preferences.PreferenceKey;
|
||||
import org.eclipse.xtext.util.IAcceptor;
|
||||
import org.eclipse.xtext.validation.ConfigurableIssueCodesProvider;
|
||||
import org.eclipse.xtext.validation.SeverityConverter;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
/**
|
||||
* This class holds all the configurable issue codes for the Xtext grammar language.
|
||||
* Use {@link #getConfigurableIssueCodes()} to get all registered codes.
|
||||
*
|
||||
* @author Miro Spoenemann - Initial contribution and API
|
||||
*/
|
||||
@Singleton
|
||||
public class XtextConfigurableIssueCodes extends ConfigurableIssueCodesProvider {
|
||||
|
||||
protected static final String ISSUE_CODE_PREFIX = "org.eclipse.xtext.grammar.";
|
||||
|
||||
public static final String INVALID_METAMODEL_NAME = ISSUE_CODE_PREFIX + "InvalidMetaModelName";
|
||||
public static final String INVALID_ACTION_USAGE = ISSUE_CODE_PREFIX + "InvalidActionUsage";
|
||||
public static final String EMPTY_ENUM_LITERAL = ISSUE_CODE_PREFIX + "EmptyEnumLiteral";
|
||||
public static final String EMPTY_KEYWORD = ISSUE_CODE_PREFIX + "EmptyKeyword";
|
||||
public static final String INVALID_HIDDEN_TOKEN = ISSUE_CODE_PREFIX + "InvalidHiddenToken";
|
||||
public static final String INVALID_HIDDEN_TOKEN_FRAGMENT = ISSUE_CODE_PREFIX + "InvalidHiddenTokenFragment";
|
||||
public static final String INVALID_PACKAGE_REFERENCE_INHERITED = ISSUE_CODE_PREFIX + "InvalidPackageReference.inherited";
|
||||
public static final String INVALID_PACKAGE_REFERENCE_EXTERNAL = ISSUE_CODE_PREFIX + "InvalidPackageReference.external";
|
||||
public static final String INVALID_PACKAGE_REFERENCE_NOT_ON_CLASSPATH = ISSUE_CODE_PREFIX + "InvalidPackageReference.notOnClasspath";
|
||||
public static final String INVALID_TERMINALRULE_NAME = ISSUE_CODE_PREFIX + "InvalidTerminalRuleName";
|
||||
public static final String DUPLICATE_ENUM_LITERAL = ISSUE_CODE_PREFIX + "DuplicateEnumLiteral";
|
||||
public static final String BIDIRECTIONAL_REFERENCE = ISSUE_CODE_PREFIX + "BidirectionalReference";
|
||||
|
||||
private Map<String, PreferenceKey> issueCodes;
|
||||
|
||||
public XtextConfigurableIssueCodes() {
|
||||
final Map<String, PreferenceKey> map = Maps.newLinkedHashMap();
|
||||
initialize(new IAcceptor<PreferenceKey>() {
|
||||
public void accept(PreferenceKey prefKey) {
|
||||
map.put(prefKey.getId(), prefKey);
|
||||
}
|
||||
});
|
||||
this.issueCodes = ImmutableMap.copyOf(map);
|
||||
}
|
||||
|
||||
protected void initialize(IAcceptor<PreferenceKey> acceptor) {
|
||||
acceptor.accept(create(INVALID_ACTION_USAGE, SeverityConverter.SEVERITY_ERROR));
|
||||
acceptor.accept(create(EMPTY_ENUM_LITERAL, SeverityConverter.SEVERITY_ERROR));
|
||||
acceptor.accept(create(EMPTY_KEYWORD, SeverityConverter.SEVERITY_ERROR));
|
||||
acceptor.accept(create(INVALID_HIDDEN_TOKEN, SeverityConverter.SEVERITY_ERROR));
|
||||
acceptor.accept(create(INVALID_HIDDEN_TOKEN_FRAGMENT, SeverityConverter.SEVERITY_ERROR));
|
||||
acceptor.accept(create(INVALID_PACKAGE_REFERENCE_INHERITED, SeverityConverter.SEVERITY_ERROR));
|
||||
|
||||
acceptor.accept(create(INVALID_METAMODEL_NAME, SeverityConverter.SEVERITY_WARNING));
|
||||
acceptor.accept(create(INVALID_PACKAGE_REFERENCE_EXTERNAL, SeverityConverter.SEVERITY_WARNING));
|
||||
acceptor.accept(create(INVALID_PACKAGE_REFERENCE_NOT_ON_CLASSPATH, SeverityConverter.SEVERITY_WARNING));
|
||||
acceptor.accept(create(INVALID_TERMINALRULE_NAME, SeverityConverter.SEVERITY_WARNING));
|
||||
acceptor.accept(create(DUPLICATE_ENUM_LITERAL, SeverityConverter.SEVERITY_WARNING));
|
||||
acceptor.accept(create(BIDIRECTIONAL_REFERENCE, SeverityConverter.SEVERITY_WARNING));
|
||||
}
|
||||
|
||||
protected final PreferenceKey create(String id, String defaultValue) {
|
||||
return new PreferenceKey(id, defaultValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Map<String, PreferenceKey> getConfigurableIssueCodes() {
|
||||
return issueCodes;
|
||||
}
|
||||
|
||||
}
|
|
@ -7,6 +7,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.xtext.xtext;
|
||||
|
||||
import static org.eclipse.xtext.xtext.XtextConfigurableIssueCodes.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
@ -60,6 +62,7 @@ import org.eclipse.xtext.UnorderedGroup;
|
|||
import org.eclipse.xtext.XtextPackage;
|
||||
import org.eclipse.xtext.conversion.IValueConverterService;
|
||||
import org.eclipse.xtext.conversion.ValueConverterException;
|
||||
import org.eclipse.xtext.diagnostics.Severity;
|
||||
import org.eclipse.xtext.naming.QualifiedName;
|
||||
import org.eclipse.xtext.nodemodel.INode;
|
||||
import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
|
||||
|
@ -94,17 +97,6 @@ import com.google.inject.Inject;
|
|||
*/
|
||||
public class XtextValidator extends AbstractDeclarativeValidator {
|
||||
|
||||
public static final String INVALID_METAMODEL_NAME = "org.eclipse.xtext.grammar.InvalidMetaModelName";
|
||||
public static final String INVALID_ACTION_USAGE = "org.eclipse.xtext.grammar.InvalidActionUsage";
|
||||
public static final String EMPTY_ENUM_LITERAL= "org.eclipse.xtext.grammar.EmptyEnumLiteral";
|
||||
public static final String EMPTY_KEYWORD= "org.eclipse.xtext.grammar.EmptyKeyword";
|
||||
public static final String INVALID_HIDDEN_TOKEN = "org.eclipse.xtext.grammar.InvalidHiddenToken";
|
||||
public static final String INVALID_HIDDEN_TOKEN_FRAGMENT = "org.eclipse.xtext.grammar.InvalidHiddenTokenFragment";
|
||||
public static final String INVALID_PACKAGE_REFERENCE_INHERITED = "org.eclipse.xtext.grammar.InvalidPackageReference.inherited";
|
||||
public static final String INVALID_PACKAGE_REFERENCE_EXTERNAL = "org.eclipse.xtext.grammar.InvalidPackageReference.external";
|
||||
public static final String INVALID_PACKAGE_REFERENCE_NOT_ON_CLASSPATH = "org.eclipse.xtext.grammar.InvalidPackageReference.notOnClasspath";
|
||||
public static final String INVALID_TERMINALRULE_NAME = "org.eclipse.xtext.grammar.InvalidTerminalRuleName";
|
||||
|
||||
@Inject
|
||||
private IValueConverterService valueConverter;
|
||||
|
||||
|
@ -212,10 +204,9 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
public void checkGeneratedMetamodel(GeneratedMetamodel metamodel) {
|
||||
if (metamodel.getName() != null && metamodel.getName().length() != 0)
|
||||
if (Character.isUpperCase(metamodel.getName().charAt(0)))
|
||||
warning(
|
||||
"Metamodel names should start with a lower case letter.",
|
||||
addIssue("Metamodel names should start with a lower case letter.",
|
||||
metamodel,
|
||||
XtextPackage.Literals.GENERATED_METAMODEL__NAME,
|
||||
ValidationMessageAcceptor.INSIGNIFICANT_INDEX,
|
||||
INVALID_METAMODEL_NAME,
|
||||
metamodel.getName());
|
||||
}
|
||||
|
@ -416,8 +407,8 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
EPackage generatedPackage = generatedMetamodel.getEPackage();
|
||||
if (generatedPackage != null && nsURI.equals((generatedPackage.getNsURI()))) {
|
||||
if (!text.equals(nsURI)) {
|
||||
error(
|
||||
"Metamodels that have been generated by a super grammar must be referenced by nsURI: " + nsURI,
|
||||
addIssue("Metamodels that have been generated by a super grammar must be referenced by nsURI: " + nsURI,
|
||||
metamodel,
|
||||
XtextPackage.Literals.ABSTRACT_METAMODEL_DECLARATION__EPACKAGE,
|
||||
INVALID_PACKAGE_REFERENCE_INHERITED,
|
||||
nsURI);
|
||||
|
@ -434,8 +425,8 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
if (referencedPackage.eIsProxy() || isRuntime(metamodelReference))
|
||||
return;
|
||||
if (isRegisteredPackage(referencedPackage)) {
|
||||
warning(
|
||||
"The imported package is not on the classpath of this project which may lead to follow up errors.",
|
||||
addIssue("The imported package is not on the classpath of this project which may lead to follow-up errors.",
|
||||
metamodelReference,
|
||||
XtextPackage.Literals.ABSTRACT_METAMODEL_DECLARATION__EPACKAGE,
|
||||
INVALID_PACKAGE_REFERENCE_NOT_ON_CLASSPATH,
|
||||
importURI);
|
||||
|
@ -448,14 +439,14 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
QualifiedName.create(referencedPackage.getNsURI()),
|
||||
false);
|
||||
if (!Iterables.isEmpty(packagesInIndex)) {
|
||||
warning(
|
||||
"Packages should be imported by their namespace URI.",
|
||||
addIssue("Packages should be imported by their namespace URI.",
|
||||
metamodelReference,
|
||||
XtextPackage.Literals.ABSTRACT_METAMODEL_DECLARATION__EPACKAGE,
|
||||
INVALID_PACKAGE_REFERENCE_EXTERNAL,
|
||||
referencedPackage.getNsURI());
|
||||
} else if (!ClasspathUriUtil.isClasspathUri(URI.createURI(importURI))) {
|
||||
warning(
|
||||
"The imported package is not on the classpath of this project which may lead to follow up errors.",
|
||||
addIssue("The imported package is not on the classpath of this project which may lead to follow-up errors.",
|
||||
metamodelReference,
|
||||
XtextPackage.Literals.ABSTRACT_METAMODEL_DECLARATION__EPACKAGE,
|
||||
INVALID_PACKAGE_REFERENCE_NOT_ON_CLASSPATH,
|
||||
importURI);
|
||||
|
@ -479,20 +470,20 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
Iterable<IEObjectDescription> packagesInIndex = descriptions.getExportedObjects(EcorePackage.Literals.EPACKAGE, QualifiedName.create(importURI), false);
|
||||
if (!Iterables.isEmpty(packagesInIndex)) {
|
||||
if (setting.getEObject().eResource().getURI().isPlatformResource())
|
||||
warning(
|
||||
"The imported package refers to elements the package registry instead of using the instances from the workspace",
|
||||
addIssue("The imported package refers to elements in the package registry instead of using the instances from the workspace",
|
||||
metamodelReference,
|
||||
XtextPackage.Literals.ABSTRACT_METAMODEL_DECLARATION__EPACKAGE,
|
||||
INVALID_PACKAGE_REFERENCE_EXTERNAL,
|
||||
referencedPackage.getNsURI());
|
||||
else
|
||||
warning(
|
||||
"The imported package refers to elements the package registry instead of using the instances from the workspace",
|
||||
addIssue("The imported package refers to elements in the package registry instead of using the instances from the workspace",
|
||||
metamodelReference,
|
||||
XtextPackage.Literals.ABSTRACT_METAMODEL_DECLARATION__EPACKAGE,
|
||||
INVALID_PACKAGE_REFERENCE_EXTERNAL);
|
||||
return;
|
||||
} else {
|
||||
warning(
|
||||
"The imported package refers to elements that are not on the classpath of this project. The package '" + transitive.getNsURI() + "' was loaded from the registry.",
|
||||
addIssue("The imported package refers to elements that are not on the classpath of this project. The package '" + transitive.getNsURI() + "' was loaded from the registry.",
|
||||
metamodelReference,
|
||||
XtextPackage.Literals.ABSTRACT_METAMODEL_DECLARATION__EPACKAGE,
|
||||
INVALID_PACKAGE_REFERENCE_NOT_ON_CLASSPATH,
|
||||
referencedPackage.getNsURI());
|
||||
|
@ -948,9 +939,11 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
}
|
||||
if (otherDecl.getEnumLiteral() == decl.getEnumLiteral()) {
|
||||
if (!decl.getEnumLiteral().getLiteral().equals(decl.getLiteral().getValue()))
|
||||
warning("Enum literal '" + decl.getEnumLiteral().getName()
|
||||
addIssue("Enum literal '" + decl.getEnumLiteral().getName()
|
||||
+ "' has already been defined with literal '" + decl.getEnumLiteral().getLiteral() + "'.",
|
||||
XtextPackage.Literals.ENUM_LITERAL_DECLARATION__ENUM_LITERAL);
|
||||
decl,
|
||||
XtextPackage.Literals.ENUM_LITERAL_DECLARATION__ENUM_LITERAL,
|
||||
DUPLICATE_ENUM_LITERAL);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -959,10 +952,9 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
@Check
|
||||
public void checkEnumLiteralIsValid(EnumLiteralDeclaration decl) {
|
||||
if ("".equals(decl.getLiteral().getValue()))
|
||||
error(
|
||||
"Enum literal must not be an empty string.",
|
||||
addIssue("Enum literal must not be an empty string.",
|
||||
decl,
|
||||
XtextPackage.Literals.ENUM_LITERAL_DECLARATION__LITERAL,
|
||||
ValidationMessageAcceptor.INSIGNIFICANT_INDEX,
|
||||
EMPTY_ENUM_LITERAL,
|
||||
decl.getEnumLiteral().getName());
|
||||
}
|
||||
|
@ -988,12 +980,10 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
@Check
|
||||
public void checkKeywordNotEmpty(final Keyword keyword) {
|
||||
if (keyword.getValue().length()==0 && !(keyword.eContainer() instanceof EnumLiteralDeclaration)) {
|
||||
error(
|
||||
"A keyword cannot be empty.",
|
||||
addIssue("A keyword cannot be empty.",
|
||||
keyword,
|
||||
null,
|
||||
ValidationMessageAcceptor.INSIGNIFICANT_INDEX,
|
||||
XtextValidator.EMPTY_KEYWORD);
|
||||
EMPTY_KEYWORD);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1013,11 +1003,9 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
@Check
|
||||
public void checkActionInUnorderedGroup(final Action action) {
|
||||
if (EcoreUtil2.getContainerOfType(action, UnorderedGroup.class) != null)
|
||||
error(
|
||||
"Actions may not be used in unordered groups.",
|
||||
addIssue("Actions may not be used in unordered groups.",
|
||||
action,
|
||||
null,
|
||||
ValidationMessageAcceptor.INSIGNIFICANT_INDEX,
|
||||
INVALID_ACTION_USAGE);
|
||||
}
|
||||
|
||||
|
@ -1083,16 +1071,14 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
AbstractRule hiddenToken = hiddenTokens.get(i);
|
||||
if (hiddenToken instanceof TerminalRule) {
|
||||
if (((TerminalRule) hiddenToken).isFragment())
|
||||
error(
|
||||
"Cannot use terminal fragments as hidden tokens.",
|
||||
addIssue("Cannot use terminal fragments as hidden tokens.",
|
||||
owner,
|
||||
reference,
|
||||
i,
|
||||
INVALID_HIDDEN_TOKEN_FRAGMENT,
|
||||
String.valueOf(i));
|
||||
} else {
|
||||
error(
|
||||
"Only terminal rules may be used as hidden tokens.",
|
||||
addIssue("Only terminal rules may be used as hidden tokens.",
|
||||
owner,
|
||||
reference,
|
||||
i,
|
||||
|
@ -1111,7 +1097,29 @@ public class XtextValidator extends AbstractDeclarativeValidator {
|
|||
@Check
|
||||
public void checkTerminalRuleNamingConventions(TerminalRule terminalRule){
|
||||
if(!terminalRule.getName().equals(terminalRule.getName().toUpperCase()))
|
||||
warning("TerminalRule must be written in uppercase.", terminalRule, XtextPackage.eINSTANCE.getAbstractRule_Name(),INVALID_TERMINALRULE_NAME, terminalRule.getName());
|
||||
addIssue("TerminalRule must be written in uppercase.", terminalRule, XtextPackage.eINSTANCE.getAbstractRule_Name(),
|
||||
INVALID_TERMINALRULE_NAME, terminalRule.getName());
|
||||
}
|
||||
|
||||
@Check
|
||||
public void checkOppositeReferenceUsed(Assignment assignment) {
|
||||
Severity severity = getIssueSeverities(getContext(), getCurrentObject()).getSeverity(BIDIRECTIONAL_REFERENCE);
|
||||
if (severity == null || severity == Severity.IGNORE) {
|
||||
// Don't perform any check if the result is ignored
|
||||
return;
|
||||
}
|
||||
EClassifier classifier = GrammarUtil.findCurrentType(assignment);
|
||||
if (classifier instanceof EClass) {
|
||||
EStructuralFeature feature = ((EClass) classifier).getEStructuralFeature(assignment.getFeature());
|
||||
if (feature instanceof EReference) {
|
||||
EReference reference = (EReference) feature;
|
||||
if (reference.getEOpposite() != null && !(reference.isContainment() || reference.isContainer())) {
|
||||
addIssue("The feature '" + assignment.getFeature() + "' is a bidirectional reference."
|
||||
+ " This may cause problems in the linking process.",
|
||||
assignment, XtextPackage.eINSTANCE.getAssignment_Feature(), BIDIRECTIONAL_REFERENCE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.xtext.xtext;
|
||||
|
||||
import static com.google.common.collect.Maps.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
@ -43,8 +45,10 @@ import org.eclipse.xtext.XtextFactory;
|
|||
import org.eclipse.xtext.XtextStandaloneSetup;
|
||||
import org.eclipse.xtext.resource.XtextResource;
|
||||
import org.eclipse.xtext.util.StringInputStream;
|
||||
import org.eclipse.xtext.validation.AbstractDeclarativeValidator.State;
|
||||
import org.eclipse.xtext.validation.AbstractValidationMessageAcceptingTestCase;
|
||||
import org.eclipse.xtext.validation.AbstractValidationMessageAcceptor;
|
||||
import org.eclipse.xtext.validation.ValidationMessageAcceptor;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -67,6 +71,12 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
EValidator.Registry.INSTANCE.put(EcorePackage.eINSTANCE, EcoreValidator.INSTANCE);
|
||||
}
|
||||
|
||||
private void configureValidator(XtextValidator validator, ValidationMessageAcceptor messageAcceptor, EObject currentObject) {
|
||||
State state = validator.setMessageAcceptor(messageAcceptor).getState();
|
||||
state.currentObject = currentObject;
|
||||
state.context = newHashMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* see https://bugs.eclipse.org/bugs/show_bug.cgi?id=348052
|
||||
*/
|
||||
|
@ -243,7 +253,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
child.getRules().add(subRuleFoo);
|
||||
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
validator.setMessageAcceptor(this).getState().currentObject = subRuleFoo;
|
||||
configureValidator(validator, this, subRuleFoo);
|
||||
validator.checkRuleName(subRuleFoo);
|
||||
assertEquals("A rule's name has to be unique even case insensitive. A used grammar contains another rule 'Foo'.", lastMessage);
|
||||
}
|
||||
|
@ -258,7 +268,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
base.getRules().add(subRuleFoo);
|
||||
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
validator.setMessageAcceptor(this).getState().currentObject = subRuleFoo;
|
||||
configureValidator(validator, this, subRuleFoo);
|
||||
validator.checkRuleName(subRuleFoo);
|
||||
assertEquals("A rule's name has to be unique even case insensitive. This grammar contains another rule 'Foo'.", lastMessage);
|
||||
}
|
||||
|
@ -273,7 +283,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
base.getRules().add(subRuleFoo);
|
||||
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
validator.setMessageAcceptor(this).getState().currentObject = subRuleFoo;
|
||||
configureValidator(validator, this, subRuleFoo);
|
||||
validator.checkRuleName(subRuleFoo);
|
||||
assertEquals("A rule's name has to be unique.", lastMessage);
|
||||
}
|
||||
|
@ -294,7 +304,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
base.getRules().add(subRuleFoo3);
|
||||
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
validator.setMessageAcceptor(this).getState().currentObject = subRuleFoo;
|
||||
configureValidator(validator, this, subRuleFoo);
|
||||
validator.checkRuleName(subRuleFoo);
|
||||
assertEquals("A rule's name has to be unique even case insensitive. The conflicting rules are 'FOO' and 'Foo'.", lastMessage);
|
||||
}
|
||||
|
@ -315,7 +325,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
base.getRules().add(subRuleFoo3);
|
||||
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
validator.setMessageAcceptor(this).getState().currentObject = subRuleFoo;
|
||||
configureValidator(validator, this, subRuleFoo);
|
||||
validator.checkRuleName(subRuleFoo);
|
||||
assertEquals("A rule's name has to be unique even case insensitive. The conflicting rules are 'FOO', 'Foo' and 'fOO'.", lastMessage);
|
||||
}
|
||||
|
@ -914,7 +924,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
Action action = XtextFactory.eINSTANCE.createAction();
|
||||
unorderedGroup.getElements().add(action);
|
||||
ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(action, true, false);
|
||||
validator.setMessageAcceptor(messageAcceptor);
|
||||
configureValidator(validator, messageAcceptor, action);
|
||||
validator.checkActionInUnorderedGroup(action);
|
||||
messageAcceptor.validate();
|
||||
}
|
||||
|
@ -1189,7 +1199,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
Grammar grammar = (Grammar) getModel(grammarAsText);
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(grammar, true, false);
|
||||
validator.setMessageAcceptor(messageAcceptor);
|
||||
configureValidator(validator, messageAcceptor, grammar);
|
||||
validator.checkHiddenTokenIsNotAFragment(grammar);
|
||||
messageAcceptor.validate();
|
||||
}
|
||||
|
@ -1205,7 +1215,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
ParserRule rule = (ParserRule) grammar.getRules().get(0);
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(rule, true, false);
|
||||
validator.setMessageAcceptor(messageAcceptor);
|
||||
configureValidator(validator, messageAcceptor, rule);
|
||||
validator.checkHiddenTokenIsNotAFragment(rule);
|
||||
messageAcceptor.validate();
|
||||
}
|
||||
|
@ -1220,7 +1230,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
Grammar grammar = (Grammar) getModel(grammarAsText);
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(grammar, true, false);
|
||||
validator.setMessageAcceptor(messageAcceptor);
|
||||
configureValidator(validator, messageAcceptor, grammar);
|
||||
validator.checkHiddenTokenIsNotAFragment(grammar);
|
||||
messageAcceptor.validate();
|
||||
}
|
||||
|
@ -1236,7 +1246,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
ParserRule rule = (ParserRule) grammar.getRules().get(0);
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(rule, true, false);
|
||||
validator.setMessageAcceptor(messageAcceptor);
|
||||
configureValidator(validator, messageAcceptor, rule);
|
||||
validator.checkHiddenTokenIsNotAFragment(rule);
|
||||
messageAcceptor.validate();
|
||||
}
|
||||
|
@ -1485,7 +1495,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
TerminalRule rule = (TerminalRule) grammar.getRules().get(1);
|
||||
XtextValidator validator = get(XtextValidator.class);
|
||||
ValidatingMessageAcceptor messageAcceptor = new ValidatingMessageAcceptor(rule, false, true);
|
||||
validator.setMessageAcceptor(messageAcceptor);
|
||||
configureValidator(validator, messageAcceptor, rule);
|
||||
validator.checkTerminalRuleNamingConventions(rule);
|
||||
messageAcceptor.validate();
|
||||
}
|
||||
|
@ -1547,7 +1557,7 @@ public class XtextValidationTest extends AbstractValidationMessageAcceptingTestC
|
|||
messageAcceptor.expectedContext(
|
||||
valueAssignment.getTerminal()
|
||||
);
|
||||
validator.setMessageAcceptor(messageAcceptor);
|
||||
configureValidator(validator, messageAcceptor, valueAssignment);
|
||||
validator.checkKeywordNotEmpty((Keyword) valueAssignment.getTerminal());
|
||||
messageAcceptor.validate();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue