Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/*******************************************************************************
* Copyright (c) 2016 Avaloq Group AG 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
*
* Contributors:
* Avaloq Group AG - initial API and implementation
*******************************************************************************/
package com.avaloq.tools.ddk.checkcfg.validation;

import org.eclipse.xtext.testing.InjectWith;
import org.eclipse.xtext.testing.extensions.InjectionExtension;
import org.eclipse.xtext.testing.util.ParseHelper;
import org.eclipse.xtext.testing.validation.ValidationTestHelper;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

import com.avaloq.tools.ddk.checkcfg.CheckCfgUiInjectorProvider;
import com.avaloq.tools.ddk.checkcfg.checkcfg.CheckConfiguration;
import com.avaloq.tools.ddk.checkcfg.checkcfg.CheckcfgPackage;
import com.google.inject.Inject;


@InjectWith(CheckCfgUiInjectorProvider.class)
@ExtendWith(InjectionExtension.class)
@SuppressWarnings("nls")
public class CheckCfgTest {

@Inject
private ValidationTestHelper helper;

@Inject
private ParseHelper<CheckConfiguration> parser;

@Test
public void testValidLanguageOk() throws Exception {
final CheckConfiguration model = parser.parse("""
check configuration Test

for com.avaloq.tools.ddk.^check.TestLanguage {

}

""");
helper.assertNoIssues(model);
}

@Test
public void testUnknownLanguageNotOk() throws Exception {
final CheckConfiguration model = parser.parse("""
check configuration Test

for com.avaloq.tools.ddk.^check.Unknown {

}

""");
helper.assertError(model, CheckcfgPackage.Literals.CONFIGURED_LANGUAGE_VALIDATOR, IssueCodes.UNKNOWN_LANGUAGE);
}

@Test
public void testDuplicateLanguageNotOk() throws Exception {
final CheckConfiguration model = parser.parse("""
check configuration Test

for com.avaloq.tools.ddk.^check.TestLanguage {

}

for com.avaloq.tools.ddk.^check.TestLanguage {

}

""");
helper.assertError(model, CheckcfgPackage.Literals.CONFIGURED_LANGUAGE_VALIDATOR, IssueCodes.DUPLICATE_LANGUAGE_CONFIGURATION);
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,36 @@ public void checkConfiguredLanguageExists(final ConfiguredLanguageValidator vali
}
}

/**
* Checks that within a Check Configuration all Configured Language Validators are unique, meaning that
* the same language can only be configured in one place.
*
* @param configuration
* the configuration
*/
@Check
public void checkConfiguredLanguageUnique(final CheckConfiguration configuration) {
if (configuration.getLanguageValidatorConfigurations().size() < 2) {
return;
}
Predicate<ConfiguredLanguageValidator> predicate = new Predicate<ConfiguredLanguageValidator>() {
@Override
public boolean apply(final ConfiguredLanguageValidator validator) {
return validator.getLanguage() != null;
}
};
Function<ConfiguredLanguageValidator, String> function = new Function<ConfiguredLanguageValidator, String>() {
@Override
public String apply(final ConfiguredLanguageValidator from) {
return from.getLanguage();
}
};
for (final ConfiguredLanguageValidator v : getDuplicates(predicate, function, configuration.getLanguageValidatorConfigurations())) {
error(Messages.CheckCfgJavaValidator_DUPLICATE_LANGUAGE_CONFIGURATION, v, CheckcfgPackage.Literals.CONFIGURED_LANGUAGE_VALIDATOR__LANGUAGE, ValidationMessageAcceptor.INSIGNIFICANT_INDEX, IssueCodes.DUPLICATE_LANGUAGE_CONFIGURATION);
}

}

/**
* Checks that a Configured Check has unique Configured Parameters.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public final class IssueCodes {
public static final String DUPLICATE_CATALOG_CONFIGURATION = ISSUE_CODE_PREFIX + "duplicate_catalog_configuration";
public static final String DUPLICATE_CHECK_CONFIGURATION = ISSUE_CODE_PREFIX + "duplicate_check_configuration";
public static final String UNKNOWN_LANGUAGE = ISSUE_CODE_PREFIX + "unknown_language";
public static final String DUPLICATE_LANGUAGE_CONFIGURATION = ISSUE_CODE_PREFIX + "duplicate_language_configuration";
public static final String DUPLICATE_PARAMETER_CONFIGURATION = ISSUE_CODE_PREFIX + "duplicate_parameter_configuration";
public static final String SEVERITY_NOT_ALLOWED = ISSUE_CODE_PREFIX + "severity_not_allowed";
public static final String PARAMETER_VALUE_NOT_ALLOWED = ISSUE_CODE_PREFIX + "parameter_value_not_allowed";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class Messages extends NLS {
public static String CheckCfgJavaValidator_CONFIGURED_PARAM_EQUALS_DEFAULT;
public static String CheckCfgJavaValidator_DUPLICATE_CATALOG_CONFIGURATION;
public static String CheckCfgJavaValidator_DUPLICATE_CHECK_CONFIGURATION;
public static String CheckCfgJavaValidator_DUPLICATE_LANGUAGE_CONFIGURATION;
public static String CheckCfgJavaValidator_DUPLICATE_PARAMETER_CONFIGURATION;
public static String CheckCfgJavaValidator_SEVERITY_NOT_ALLOWED;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ CheckCfgJavaValidator_FINAL_CHECK_NOT_CONFIGURABLE=Final checks may not be confi
CheckCfgJavaValidator_CONFIGURED_PARAM_EQUALS_DEFAULT=Configured value for ''{0}'' equals default
CheckCfgJavaValidator_DUPLICATE_CATALOG_CONFIGURATION=Duplicate catalog configuration
CheckCfgJavaValidator_DUPLICATE_CHECK_CONFIGURATION=Duplicate check configuration
CheckCfgJavaValidator_DUPLICATE_LANGUAGE_CONFIGURATION=Duplicate language configuration
CheckCfgJavaValidator_DUPLICATE_PARAMETER_CONFIGURATION=Duplicate parameter configuration
CheckCfgJavaValidator_SEVERITY_NOT_ALLOWED=Configured severity is not allowed
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
*******************************************************************************/
package com.avaloq.tools.ddk.checkcfg.ui.quickfix;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.osgi.util.NLS;
Expand All @@ -26,6 +29,7 @@
import com.avaloq.tools.ddk.checkcfg.checkcfg.CheckConfiguration;
import com.avaloq.tools.ddk.checkcfg.checkcfg.ConfiguredCatalog;
import com.avaloq.tools.ddk.checkcfg.checkcfg.ConfiguredCheck;
import com.avaloq.tools.ddk.checkcfg.checkcfg.ConfiguredLanguageValidator;
import com.avaloq.tools.ddk.checkcfg.checkcfg.SeverityKind;
import com.avaloq.tools.ddk.checkcfg.validation.IssueCodes;

Expand Down Expand Up @@ -158,4 +162,43 @@ public void apply(final EObject element, final IModificationContext context) {
}
});
}

/**
* Removes duplicate language configurations by merging the contents of every later occurrence into the first one
* and deleting the duplicates.
*
* @param issue
* the issue
* @param acceptor
* the acceptor
*/
@Fix(IssueCodes.DUPLICATE_LANGUAGE_CONFIGURATION)
public void removeDuplicateLanguageConfiguration(final Issue issue, final IssueResolutionAcceptor acceptor) {
acceptor.accept(issue, Messages.CheckCfgQuickfixProvider_REMOVE_DUPLICATE_LANG_LABEL, Messages.CheckCfgQuickfixProvider_REMOVE_DUPLICATE_LANG_DESCN, null, new ISemanticModification() {
@Override
public void apply(final EObject element, final IModificationContext context) {
final CheckConfiguration configuration = EcoreUtil2.getContainerOfType(element, CheckConfiguration.class);
final String languageName = ((ConfiguredLanguageValidator) element).getLanguage();
if (configuration == null || languageName == null) {
return;
}
ConfiguredLanguageValidator first = null;
final List<ConfiguredLanguageValidator> duplicates = new ArrayList<ConfiguredLanguageValidator>();
for (final ConfiguredLanguageValidator validator : configuration.getLanguageValidatorConfigurations()) {
if (languageName.equals(validator.getLanguage())) {
if (first == null) {
first = validator;
} else {
duplicates.add(validator);
}
}
}
for (final ConfiguredLanguageValidator duplicate : duplicates) {
first.getParameterConfigurations().addAll(duplicate.getParameterConfigurations());
first.getCatalogConfigurations().addAll(duplicate.getCatalogConfigurations());
configuration.getLanguageValidatorConfigurations().remove(duplicate);
}
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public class Messages extends NLS {
public static String CheckCfgQuickfixProvider_REMOVE_DUPLICATE_CATALOG_LABEL;
public static String CheckCfgQuickfixProvider_REMOVE_DUPLICATE_CHECK_DESCN;
public static String CheckCfgQuickfixProvider_REMOVE_DUPLICATE_CHECK_LABEL;
public static String CheckCfgQuickfixProvider_REMOVE_DUPLICATE_LANG_DESCN;
public static String CheckCfgQuickfixProvider_REMOVE_DUPLICATE_LANG_LABEL;
public static String CheckCfgQuickfixProvider_REMOVE_DUPLICATE_PARAM_DESCN;
public static String CheckCfgQuickfixProvider_REMOVE_DUPLICATE_PARAM_LABEL;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@ CheckCfgQuickfixProvider_REMOVE_DUPLICATE_CATALOG_DESCN=Remove the duplicate cat
CheckCfgQuickfixProvider_REMOVE_DUPLICATE_CATALOG_LABEL=Remove duplicate catalog
CheckCfgQuickfixProvider_REMOVE_DUPLICATE_CHECK_DESCN=Remove the duplicate check configuration.
CheckCfgQuickfixProvider_REMOVE_DUPLICATE_CHECK_LABEL=Remove duplicate check
CheckCfgQuickfixProvider_REMOVE_DUPLICATE_LANG_DESCN=Merge the duplicate language configurations into the first occurrence and remove the duplicates.
CheckCfgQuickfixProvider_REMOVE_DUPLICATE_LANG_LABEL=Merge duplicate language configurations
CheckCfgQuickfixProvider_REMOVE_DUPLICATE_PARAM_DESCN=Remove the duplicate parameter configuration.
CheckCfgQuickfixProvider_REMOVE_DUPLICATE_PARAM_LABEL=Remove duplicate parameter