diff options
author | Stefan Laner <laner@itestra.de> | 2014-03-05 16:42:39 +0100 |
---|---|---|
committer | Stefan Laner <laner@itestra.de> | 2014-03-05 16:45:35 +0100 |
commit | 4a64be6f11647240b74bda82020b1865deaefb34 (patch) | |
tree | 798b9f9fb7f8b3fdd0060402dfdcc07ecf330287 | |
parent | 43967c317751a2acf809357d7dbf8ccb9e7120a2 (diff) | |
download | genivi-common-api-runtime-4a64be6f11647240b74bda82020b1865deaefb34.tar.gz |
Added preference page to en- or disable validator
Added franca version test to cancel some validations
updated franca validation point
Rebased change
Change-Id: I1b779e0f3a8d45effe9df19147b678abac740203
4 files changed, 125 insertions, 26 deletions
diff --git a/org.genivi.commonapi.core.validator/META-INF/MANIFEST.MF b/org.genivi.commonapi.core.validator/META-INF/MANIFEST.MF index 0e55bb6..6091eae 100644 --- a/org.genivi.commonapi.core.validator/META-INF/MANIFEST.MF +++ b/org.genivi.commonapi.core.validator/META-INF/MANIFEST.MF @@ -17,7 +17,11 @@ Require-Bundle: org.eclipse.ui, org.genivi.commonapi.core;bundle-version="2.1.4", org.genivi.commonapi.core.ui;bundle-version="2.1.4", org.franca.core.dsl;bundle-version="0.8.9", - org.eclipse.xtext;bundle-version="2.4.3" + org.eclipse.xtext;bundle-version="2.4.3", + org.eclipse.ui;bundle-version="3.104.0" Import-Package: org.eclipse.core.resources, - org.eclipse.core.runtime;version="3.4.0" + org.eclipse.core.runtime;version="3.4.0", + org.eclipse.jface.preference, + org.genivi.commonapi.core.ui, + org.osgi.framework;version="1.7.0" Export-Package: org.genivi.commonapi.core.validator diff --git a/org.genivi.commonapi.core.validator/plugin.xml b/org.genivi.commonapi.core.validator/plugin.xml index c135580..31886e4 100644 --- a/org.genivi.commonapi.core.validator/plugin.xml +++ b/org.genivi.commonapi.core.validator/plugin.xml @@ -3,9 +3,18 @@ <plugin> <extension point="org.franca.core.dsl.francaValidator"> - <validator - class="org.genivi.commonapi.core.validator.ValidatorCore" - mode="FAST"> - </validator> + <validator + class="org.genivi.commonapi.core.validator.ValidatorCore" + mode="FAST" + name="ValidatorCore"> + </validator> </extension> -</plugin>
\ No newline at end of file + <extension + point="org.eclipse.ui.preferencePages"> + <page + class="org.genivi.commonapi.core.validator.preferencepage.ValidatorCorePreferencesPage" + id="org.genivi.commonapi.core.validator.preferencepage.ValidatorCorePreferencesPage" + name="Validator Core"> + </page> + </extension> +</plugin> diff --git a/org.genivi.commonapi.core.validator/src/org/genivi/commonapi/core/validator/ValidatorCore.java b/org.genivi.commonapi.core.validator/src/org/genivi/commonapi/core/validator/ValidatorCore.java index 9487df2..67338cf 100644 --- a/org.genivi.commonapi.core.validator/src/org/genivi/commonapi/core/validator/ValidatorCore.java +++ b/org.genivi.commonapi.core.validator/src/org/genivi/commonapi/core/validator/ValidatorCore.java @@ -37,11 +37,16 @@ import org.franca.core.franca.FField; import org.franca.core.franca.FInterface; import org.franca.core.franca.FMethod; import org.franca.core.franca.FModel; +import org.franca.core.franca.FModelElement; import org.franca.core.franca.FStructType; import org.franca.core.franca.FType; import org.franca.core.franca.FTypeCollection; import org.franca.core.franca.FrancaPackage; import org.franca.core.franca.Import; +import org.genivi.commonapi.core.ui.CommonApiUiPlugin; +import org.genivi.commonapi.core.validator.preferencepage.ValidatorCorePreferencesPage; +import org.osgi.framework.BundleReference; +import org.osgi.framework.Version; public class ValidatorCore implements IFrancaExternalValidator { @@ -53,6 +58,9 @@ public class ValidatorCore implements IFrancaExternalValidator { @Override public void validateModel(FModel model, ValidationMessageAcceptor messageAcceptor) { + if (!isValidatorEnabled()) { + return; + } resourceSet = new ResourceSetImpl(); Resource res = model.eResource(); final Path platformPath = new Path(res.getURI().toPlatformString(true)); @@ -289,14 +297,16 @@ public class ValidatorCore implements IFrancaExternalValidator { ValidationMessageAcceptor messageAcceptor, List<String> interfaceTypecollectionNames, FTypeCollection fTypeCollection) { - validateName(fTypeCollection.getName(), messageAcceptor, + validateName(messageAcceptor, fTypeCollection); - if (interfaceTypecollectionNames.indexOf(fTypeCollection.getName()) != interfaceTypecollectionNames - .lastIndexOf(fTypeCollection.getName())) { - acceptError("Name " + fTypeCollection.getName() - + " isn't unique in this file!", fTypeCollection, - FrancaPackage.Literals.FMODEL_ELEMENT__NAME, -1, - messageAcceptor); + if (!isFrancaVersionGreaterThan(0, 8, 9)) { + if (interfaceTypecollectionNames.indexOf(fTypeCollection.getName()) != interfaceTypecollectionNames + .lastIndexOf(fTypeCollection.getName())) { + acceptError("Name " + fTypeCollection.getName() + + " isn't unique in this file!", fTypeCollection, + FrancaPackage.Literals.FMODEL_ELEMENT__NAME, -1, + messageAcceptor); + } } } @@ -337,17 +347,17 @@ public class ValidatorCore implements IFrancaExternalValidator { ValidationMessageAcceptor messageAcceptor, FTypeCollection fTypeCollection) { for (FType fType : fTypeCollection.getTypes()) { - validateName(fType.getName(), messageAcceptor, fType); + validateName(messageAcceptor, fType); if (fType instanceof FStructType) { for (FField fField : ((FStructType) fType).getElements()) { - validateName(fField.getName(), messageAcceptor, fField); + validateName(messageAcceptor, fField); } } if (fType instanceof FEnumerationType) { for (FEnumerator fEnumerator : ((FEnumerationType) fType) .getEnumerators()) { - validateName(fEnumerator.getName(), messageAcceptor, + validateName(messageAcceptor, fEnumerator); } } @@ -362,35 +372,69 @@ public class ValidatorCore implements IFrancaExternalValidator { -1, messageAcceptor); for (FAttribute att : fInterface.getAttributes()) { - validateName(att.getName(), messageAcceptor, att); + validateName(messageAcceptor, att); } for (FBroadcast fBroadcast : fInterface.getBroadcasts()) { - validateName(fBroadcast.getName(), messageAcceptor, fBroadcast); + validateName(messageAcceptor, fBroadcast); for (FArgument out : fBroadcast.getOutArgs()) { - validateName(out.getName(), messageAcceptor, out); + validateName(messageAcceptor, out); } } for (FMethod fMethod : fInterface.getMethods()) { - validateName(fMethod.getName(), messageAcceptor, fMethod); + validateName(messageAcceptor, fMethod); for (FArgument out : fMethod.getOutArgs()) { - validateName(out.getName(), messageAcceptor, out); + validateName(messageAcceptor, out); } for (FArgument in : fMethod.getInArgs()) { - validateName(in.getName(), messageAcceptor, in); + validateName(messageAcceptor, in); } } } - private void validateName(String name, - ValidationMessageAcceptor messageAcceptor, EObject eObject) { + private void validateName(ValidationMessageAcceptor messageAcceptor, + EObject eObject) { + String name = ((FModelElement) eObject).getName(); if (cppKeywords.keyWords.contains(name)) { - acceptError("Name " + name + " is a keyword in c++", eObject, + acceptError("Name " + name + + " is a keyword in c++", eObject, FrancaPackage.Literals.FMODEL_ELEMENT__NAME, -1, messageAcceptor); return; } } + private boolean isFrancaVersionGreaterThan(int major, int minor, int micro) { + Version francaVersion = ((BundleReference) FArgument.class + .getClassLoader()).getBundle().getVersion(); + if (francaVersion.getMajor() > major) { + return true; + } + if (francaVersion.getMajor() < major){ + return false; + } + if (francaVersion.getMinor() > minor) { + return true; + } + if (francaVersion.getMinor() < minor){ + return false; + } + if (francaVersion.getMicro() > micro) { + return true; + } + if (francaVersion.getMicro() < micro) { + return false; + } + return false; + } + + public boolean isValidatorEnabled() { + boolean enabled = CommonApiUiPlugin + .getDefault() + .getPreferenceStore() + .getBoolean(ValidatorCorePreferencesPage.ENABLED_CORE_VALIDATOR); + return enabled; + } + private void acceptError(String message, EObject object, EStructuralFeature feature, int index, ValidationMessageAcceptor messageAcceptor) { diff --git a/org.genivi.commonapi.core.validator/src/org/genivi/commonapi/core/validator/preferencepage/ValidatorCorePreferencesPage.java b/org.genivi.commonapi.core.validator/src/org/genivi/commonapi/core/validator/preferencepage/ValidatorCorePreferencesPage.java new file mode 100644 index 0000000..8c2c749 --- /dev/null +++ b/org.genivi.commonapi.core.validator/src/org/genivi/commonapi/core/validator/preferencepage/ValidatorCorePreferencesPage.java @@ -0,0 +1,42 @@ +/* Copyright (C) 2013 BMW Group + * Author: Manfred Bathelt (manfred.bathelt@bmw.de) + * Author: Juergen Gehring (juergen.gehring@bmw.de) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.genivi.commonapi.core.validator.preferencepage; + +import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.genivi.commonapi.core.ui.CommonApiUiPlugin; + +public class ValidatorCorePreferencesPage extends FieldEditorPreferencePage + implements IWorkbenchPreferencePage { + + public final static String ENABLED_CORE_VALIDATOR = "ENABLED_CORE_VALIDATOR"; + + @Override + public void checkState() { + super.checkState(); + } + + @Override + public void createFieldEditors() { + addField(new BooleanFieldEditor(ENABLED_CORE_VALIDATOR, + "validator enabled", getFieldEditorParent())); + } + + @Override + public void init(IWorkbench workbench) { + IPreferenceStore prefStore = CommonApiUiPlugin.getDefault() + .getPreferenceStore(); + setPreferenceStore(prefStore); + setDescription("Disable or enable the core validator!"); + prefStore.setDefault( + ValidatorCorePreferencesPage.ENABLED_CORE_VALIDATOR, true); + } +} |