Bladeren bron

Fixed Coverity Issue 155577

Andreas Muelder 9 jaren geleden
bovenliggende
commit
015b6e4b6f

+ 369 - 369
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java

@@ -1,369 +1,369 @@
-/**
- * Copyright (c) 2011 committers of YAKINDU 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:
- *     committers of YAKINDU - initial API and implementation
- */
-package org.yakindu.sct.generator.genmodel.validation;
-
-import static com.google.common.collect.Iterables.concat;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.transform;
-
-import java.util.List;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.xtext.EcoreUtil2;
-import org.eclipse.xtext.validation.Check;
-import org.yakindu.base.base.NamedElement;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
-import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
-import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
-import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
-import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
-import org.yakindu.sct.model.sgen.BoolLiteral;
-import org.yakindu.sct.model.sgen.DeprecatableElement;
-import org.yakindu.sct.model.sgen.FeatureConfiguration;
-import org.yakindu.sct.model.sgen.FeatureParameter;
-import org.yakindu.sct.model.sgen.FeatureParameterValue;
-import org.yakindu.sct.model.sgen.FeatureType;
-import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
-import org.yakindu.sct.model.sgen.GeneratorEntry;
-import org.yakindu.sct.model.sgen.GeneratorModel;
-import org.yakindu.sct.model.sgen.IntLiteral;
-import org.yakindu.sct.model.sgen.Literal;
-import org.yakindu.sct.model.sgen.ParameterTypes;
-import org.yakindu.sct.model.sgen.RealLiteral;
-import org.yakindu.sct.model.sgen.SGenPackage;
-import org.yakindu.sct.model.sgen.StringLiteral;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-/**
- * 
- * @author andreas muelder - Initial contribution and API
- * 
- */
-public class SGenJavaValidator extends AbstractSGenJavaValidator {
-
-	// Error messages
-	public static final String MISSING_REQUIRED_PARAMETER = "Missing required Parameter";
-	public static final String MISSING_REQUIRED_FEATURE = "Missing required feature";
-	public static final String DUPLICATE_PARAMETER = "Duplicate parameter!";
-	public static final String DUPLICATE_FEATURE = "Duplicate feature!";
-	public static final String UNKOWN_GENERATOR = "Unkown Generator";
-	public static final String INCOMPATIBLE_TYPE_BOOLEAN_EXPECTED = "Incompatible type, Boolean expected";
-	public static final String INCOMPATIBLE_TYPE_INTEGER_EXPECTED = "Incompatible type, Integer expected";
-	public static final String INCOMPATIBLE_TYPE_FLOAT_EXPECTED = "Incompatible type, Float expected";
-	public static final String INCOMPATIBLE_TYPE_STRING_EXPECTED = "Incompatible type, String expected";
-	public static final String UNKNOWN_CONTENT_TYPE = "Unknown content type '";
-	public static final String DEPRECATED = "Element is depricated";
-	// Failure codes
-	public static final String CODE_REQUIRED_FEATURE = "code_req_feature";
-
-	@Check
-	public void checkContentType(GeneratorEntry entry) {
-		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(entry,
-				GeneratorModel.class);
-		GeneratorDescriptor descriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(generatorModel.getGeneratorId());
-		if (descriptor == null)
-			return;
-		String contentType = entry.getContentType();
-		if (contentType == null || contentType.trim().length() == 0) {
-			return;
-		}
-		if (!contentType.equals(descriptor.getContentType())) {
-			error(UNKNOWN_CONTENT_TYPE + contentType + "'",
-					SGenPackage.Literals.GENERATOR_ENTRY__CONTENT_TYPE);
-		}
-	}
-
-	@Check
-	public void checkParameterValueType(
-			final FeatureParameterValue parameterValue) {
-		if (parameterValue == null || parameterValue.getExpression() == null)
-			return;
-		Literal value = parameterValue.getExpression();
-		ParameterTypes parameterType = parameterValue.getParameter()
-				.getParameterType();
-		switch (parameterType) {
-		case BOOLEAN:
-			if (!(value instanceof BoolLiteral))
-				error(INCOMPATIBLE_TYPE_BOOLEAN_EXPECTED,
-						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		case INTEGER:
-			if (!(value instanceof IntLiteral))
-				error(INCOMPATIBLE_TYPE_INTEGER_EXPECTED,
-						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		case FLOAT:
-			if (!(value instanceof RealLiteral))
-				error(INCOMPATIBLE_TYPE_FLOAT_EXPECTED,
-						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		case STRING:
-			if (!(value instanceof StringLiteral))
-				error(INCOMPATIBLE_TYPE_STRING_EXPECTED,
-						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		}
-	}
-
-	@Check
-	public void checkParameterValue(final FeatureParameterValue value) {
-		if (value.getExpression() == null || value.getExpression() == null)
-			return;
-		GeneratorModel model = (GeneratorModel) EcoreUtil2
-				.getRootContainer(value);
-
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-
-		IDefaultFeatureValueProvider provider = LibraryExtensions
-				.getDefaultFeatureValueProvider(
-						generatorDescriptor.getLibraryIDs(), value
-								.getParameter().getFeatureType().getLibrary());
-		IStatus status = provider.validateParameterValue(value);
-		createMarker(status);
-	}
-
-	private void createMarker(IStatus status) {
-		switch (status.getSeverity()) {
-		case IStatus.ERROR:
-			super.error(status.getMessage(),
-					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-			break;
-		case IStatus.WARNING:
-			super.warning(status.getMessage(),
-					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
-		}
-	}
-
-	@Check
-	public void checkGeneratorExists(GeneratorModel model) {
-		GeneratorDescriptor descriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-		if (descriptor == null) {
-			error(String.format(UNKOWN_GENERATOR + " %s!",
-					model.getGeneratorId()),
-					SGenPackage.Literals.GENERATOR_MODEL__GENERATOR_ID);
-		}
-	}
-
-	@Check
-	public void checkDuplicateGeneratorEntryFeature(
-			final FeatureConfiguration config) {
-		GeneratorEntry entry = (GeneratorEntry) config.eContainer();
-		Iterable<FeatureConfiguration> filter = Iterables.filter(
-				entry.getFeatures(), new Predicate<FeatureConfiguration>() {
-					public boolean apply(FeatureConfiguration input) {
-						return (input.getType().getName().equals(config
-								.getType().getName()));
-					}
-				});
-		if (Iterables.size(filter) > 1) {
-			error(DUPLICATE_FEATURE,
-					SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
-		}
-
-	}
-
-	@Check
-	public void checkDuplicateFeatureParameter(final FeatureParameterValue value) {
-		FeatureConfiguration entry = (FeatureConfiguration) value.eContainer();
-		Iterable<FeatureParameterValue> filter = Iterables.filter(
-				entry.getParameterValues(),
-				new Predicate<FeatureParameterValue>() {
-					public boolean apply(FeatureParameterValue input) {
-						return (input.getParameter().getName().equals(value
-								.getParameter().getName()));
-					}
-				});
-		if (Iterables.size(filter) > 1) {
-			error(DUPLICATE_PARAMETER,
-					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__PARAMETER);
-		}
-	}
-
-	@Check
-	public void checkRequiredFeatures(GeneratorEntry entry) {
-		GeneratorModel model = (GeneratorModel) EcoreUtil2
-				.getRootContainer(entry);
-
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-
-		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
-
-		Iterable<FeatureType> requiredFeatures = filter(
-				concat(transform(
-						transform(libraryDescriptors, getFeatureTypeLibrary()),
-						getFeatureTypes())), isRequired());
-		List<String> configuredTypes = Lists.newArrayList();
-		for (FeatureConfiguration featureConfiguration : entry.getFeatures()) {
-			configuredTypes.add(featureConfiguration.getType().getName());
-		}
-		for (FeatureType featureType : requiredFeatures) {
-			if (!configuredTypes.contains(featureType.getName()))
-				error(String.format(MISSING_REQUIRED_FEATURE + " %s",
-						featureType.getName()),
-						SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
-						CODE_REQUIRED_FEATURE, featureType.getName());
-		}
-	}
-
-	@Check
-	public void checkDeprecatedFeatures(GeneratorEntry entry) {
-		Iterable<FeatureConfiguration> features = entry.getFeatures();
-		Iterable<FeatureType> deprecatedFeatures = filter(
-				transform(features, getFeatureType()), isDeprecated());
-		for (FeatureType feature : deprecatedFeatures) {
-			warning(String.format(DEPRECATED + " %s : %f", feature.getName(),
-					feature.getComment()),
-					SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
-					feature.getName());
-		}
-	}
-
-	@Check
-	public void checkRequiredParameters(FeatureConfiguration configuration) {
-		GeneratorModel model = (GeneratorModel) EcoreUtil2
-				.getRootContainer(configuration);
-
-		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
-				.getGeneratorDescriptorForId(model.getGeneratorId());
-
-		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
-
-		Iterable<String> requiredParameters = transform(
-				filter(concat(transform(
-						filter(concat(transform(
-								transform(libraryDescriptors,
-										getFeatureTypeLibrary()),
-								getFeatureTypes())), hasName(configuration
-								.getType().getName())), getParmeter())),
-						isRequiredParamter()), getName());
-
-		List<String> configuredParameters = Lists.newArrayList();
-
-		for (FeatureParameterValue featureParameterValue : configuration
-				.getParameterValues()) {
-			configuredParameters.add(featureParameterValue.getParameter()
-					.getName());
-		}
-		for (String string : requiredParameters) {
-			if (!configuredParameters.contains(string))
-				error(String.format(MISSING_REQUIRED_PARAMETER + " %s", string),
-						SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
-		}
-	}
-
-	@Check
-	public void checkDeprecatedParameters(GeneratorEntry entry) {
-		Iterable<FeatureParameter> deprecatedParameters = filter(
-				concat(transform(
-						transform(entry.getFeatures(), getFeatureType()),
-						getParmeter())), isDeprecated());
-		for (FeatureParameter parameter : deprecatedParameters) {
-			warning(String.format(DEPRECATED + " %s : %f", parameter.getName(),
-					parameter.getComment()),
-					SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
-					parameter.getName());
-		}
-	}
-
-	private Function<NamedElement, String> getName() {
-		return new Function<NamedElement, String>() {
-
-			public String apply(NamedElement from) {
-				return from.getName();
-			}
-		};
-	}
-
-	private Predicate<FeatureParameter> isRequiredParamter() {
-		return new Predicate<FeatureParameter>() {
-
-			public boolean apply(FeatureParameter input) {
-				return !input.isOptional();
-			}
-		};
-	}
-
-	private Predicate<DeprecatableElement> isDeprecated() {
-		return new Predicate<DeprecatableElement>() {
-			public boolean apply(DeprecatableElement input) {
-				return input.isDeprecated();
-			}
-		};
-	}
-
-	private Function<FeatureType, Iterable<FeatureParameter>> getParmeter() {
-		return new Function<FeatureType, Iterable<FeatureParameter>>() {
-
-			public Iterable<FeatureParameter> apply(FeatureType from) {
-				return from.getParameters();
-			}
-		};
-	}
-
-	private Predicate<NamedElement> hasName(final String name) {
-		return new Predicate<NamedElement>() {
-
-			public boolean apply(NamedElement input) {
-				if (name == null) {
-					return (input == null);
-				}
-				return name.equals(input.getName());
-			}
-		};
-	}
-
-	private static Predicate<FeatureType> isRequired() {
-		return new Predicate<FeatureType>() {
-
-			public boolean apply(FeatureType input) {
-				return !input.isOptional();
-			}
-		};
-	}
-
-	private static Function<FeatureTypeLibrary, Iterable<FeatureType>> getFeatureTypes() {
-		return new Function<FeatureTypeLibrary, Iterable<FeatureType>>() {
-
-			public Iterable<FeatureType> apply(FeatureTypeLibrary from) {
-				return from.getTypes();
-			}
-		};
-	}
-
-	private static Function<LibraryDescriptor, FeatureTypeLibrary> getFeatureTypeLibrary() {
-		return new Function<LibraryExtensions.LibraryDescriptor, FeatureTypeLibrary>() {
-
-			public FeatureTypeLibrary apply(LibraryDescriptor from) {
-				return (FeatureTypeLibrary) new ResourceSetImpl()
-						.getResource(from.getURI(), true).getContents().get(0);
-			}
-		};
-	}
-
-	private static Function<FeatureConfiguration, FeatureType> getFeatureType() {
-		return new Function<FeatureConfiguration, FeatureType>() {
-			public FeatureType apply(FeatureConfiguration input) {
-				return input.getType();
-			}
-		};
-	}
-}
+/**
+ * Copyright (c) 2011 committers of YAKINDU 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:
+ *     committers of YAKINDU - initial API and implementation
+ */
+package org.yakindu.sct.generator.genmodel.validation;
+
+import static com.google.common.collect.Iterables.concat;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.transform;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.xtext.EcoreUtil2;
+import org.eclipse.xtext.validation.Check;
+import org.yakindu.base.base.NamedElement;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
+import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions;
+import org.yakindu.sct.generator.core.extensions.LibraryExtensions.LibraryDescriptor;
+import org.yakindu.sct.generator.core.features.IDefaultFeatureValueProvider;
+import org.yakindu.sct.model.sgen.BoolLiteral;
+import org.yakindu.sct.model.sgen.DeprecatableElement;
+import org.yakindu.sct.model.sgen.FeatureConfiguration;
+import org.yakindu.sct.model.sgen.FeatureParameter;
+import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.FeatureType;
+import org.yakindu.sct.model.sgen.FeatureTypeLibrary;
+import org.yakindu.sct.model.sgen.GeneratorEntry;
+import org.yakindu.sct.model.sgen.GeneratorModel;
+import org.yakindu.sct.model.sgen.IntLiteral;
+import org.yakindu.sct.model.sgen.Literal;
+import org.yakindu.sct.model.sgen.ParameterTypes;
+import org.yakindu.sct.model.sgen.RealLiteral;
+import org.yakindu.sct.model.sgen.SGenPackage;
+import org.yakindu.sct.model.sgen.StringLiteral;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class SGenJavaValidator extends AbstractSGenJavaValidator {
+
+	// Error messages
+	public static final String MISSING_REQUIRED_PARAMETER = "Missing required Parameter";
+	public static final String MISSING_REQUIRED_FEATURE = "Missing required feature";
+	public static final String DUPLICATE_PARAMETER = "Duplicate parameter!";
+	public static final String DUPLICATE_FEATURE = "Duplicate feature!";
+	public static final String UNKOWN_GENERATOR = "Unkown Generator";
+	public static final String INCOMPATIBLE_TYPE_BOOLEAN_EXPECTED = "Incompatible type, Boolean expected";
+	public static final String INCOMPATIBLE_TYPE_INTEGER_EXPECTED = "Incompatible type, Integer expected";
+	public static final String INCOMPATIBLE_TYPE_FLOAT_EXPECTED = "Incompatible type, Float expected";
+	public static final String INCOMPATIBLE_TYPE_STRING_EXPECTED = "Incompatible type, String expected";
+	public static final String UNKNOWN_CONTENT_TYPE = "Unknown content type '";
+	public static final String DEPRECATED = "Element is depricated";
+	// Failure codes
+	public static final String CODE_REQUIRED_FEATURE = "code_req_feature";
+
+	@Check
+	public void checkContentType(GeneratorEntry entry) {
+		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(entry,
+				GeneratorModel.class);
+		GeneratorDescriptor descriptor = GeneratorExtensions
+				.getGeneratorDescriptorForId(generatorModel.getGeneratorId());
+		if (descriptor == null)
+			return;
+		String contentType = entry.getContentType();
+		if (contentType == null || contentType.trim().length() == 0) {
+			return;
+		}
+		if (!contentType.equals(descriptor.getContentType())) {
+			error(UNKNOWN_CONTENT_TYPE + contentType + "'",
+					SGenPackage.Literals.GENERATOR_ENTRY__CONTENT_TYPE);
+		}
+	}
+
+	@Check
+	public void checkParameterValueType(
+			final FeatureParameterValue parameterValue) {
+		if (parameterValue == null || parameterValue.getExpression() == null)
+			return;
+		Literal value = parameterValue.getExpression();
+		ParameterTypes parameterType = parameterValue.getParameter()
+				.getParameterType();
+		switch (parameterType) {
+		case BOOLEAN:
+			if (!(value instanceof BoolLiteral))
+				error(INCOMPATIBLE_TYPE_BOOLEAN_EXPECTED,
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case INTEGER:
+			if (!(value instanceof IntLiteral))
+				error(INCOMPATIBLE_TYPE_INTEGER_EXPECTED,
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case FLOAT:
+			if (!(value instanceof RealLiteral))
+				error(INCOMPATIBLE_TYPE_FLOAT_EXPECTED,
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case STRING:
+			if (!(value instanceof StringLiteral))
+				error(INCOMPATIBLE_TYPE_STRING_EXPECTED,
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		}
+	}
+
+	@Check
+	public void checkParameterValue(final FeatureParameterValue value) {
+		if (value.getExpression() == null || value.getExpression() == null)
+			return;
+		GeneratorModel model = (GeneratorModel) EcoreUtil2
+				.getRootContainer(value);
+
+		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptorForId(model.getGeneratorId());
+
+		IDefaultFeatureValueProvider provider = LibraryExtensions
+				.getDefaultFeatureValueProvider(
+						generatorDescriptor.getLibraryIDs(), value
+								.getParameter().getFeatureType().getLibrary());
+		IStatus status = provider.validateParameterValue(value);
+		createMarker(status);
+	}
+
+	private void createMarker(IStatus status) {
+		switch (status.getSeverity()) {
+		case IStatus.ERROR:
+			super.error(status.getMessage(),
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case IStatus.WARNING:
+			super.warning(status.getMessage(),
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+		}
+	}
+
+	@Check
+	public void checkGeneratorExists(GeneratorModel model) {
+		GeneratorDescriptor descriptor = GeneratorExtensions
+				.getGeneratorDescriptorForId(model.getGeneratorId());
+		if (descriptor == null) {
+			error(String.format(UNKOWN_GENERATOR + " %s!",
+					model.getGeneratorId()),
+					SGenPackage.Literals.GENERATOR_MODEL__GENERATOR_ID);
+		}
+	}
+
+	@Check
+	public void checkDuplicateGeneratorEntryFeature(
+			final FeatureConfiguration config) {
+		GeneratorEntry entry = (GeneratorEntry) config.eContainer();
+		Iterable<FeatureConfiguration> filter = Iterables.filter(
+				entry.getFeatures(), new Predicate<FeatureConfiguration>() {
+					public boolean apply(FeatureConfiguration input) {
+						return (input.getType().getName().equals(config
+								.getType().getName()));
+					}
+				});
+		if (Iterables.size(filter) > 1) {
+			error(DUPLICATE_FEATURE,
+					SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
+		}
+
+	}
+
+	@Check
+	public void checkDuplicateFeatureParameter(final FeatureParameterValue value) {
+		FeatureConfiguration entry = (FeatureConfiguration) value.eContainer();
+		Iterable<FeatureParameterValue> filter = Iterables.filter(
+				entry.getParameterValues(),
+				new Predicate<FeatureParameterValue>() {
+					public boolean apply(FeatureParameterValue input) {
+						return (input.getParameter().getName().equals(value
+								.getParameter().getName()));
+					}
+				});
+		if (Iterables.size(filter) > 1) {
+			error(DUPLICATE_PARAMETER,
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__PARAMETER);
+		}
+	}
+
+	@Check
+	public void checkRequiredFeatures(GeneratorEntry entry) {
+		GeneratorModel model = (GeneratorModel) EcoreUtil2
+				.getRootContainer(entry);
+
+		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptorForId(model.getGeneratorId());
+
+		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
+				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+
+		Iterable<FeatureType> requiredFeatures = filter(
+				concat(transform(
+						transform(libraryDescriptors, getFeatureTypeLibrary()),
+						getFeatureTypes())), isRequired());
+		List<String> configuredTypes = Lists.newArrayList();
+		for (FeatureConfiguration featureConfiguration : entry.getFeatures()) {
+			configuredTypes.add(featureConfiguration.getType().getName());
+		}
+		for (FeatureType featureType : requiredFeatures) {
+			if (!configuredTypes.contains(featureType.getName()))
+				error(String.format(MISSING_REQUIRED_FEATURE + " %s",
+						featureType.getName()),
+						SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
+						CODE_REQUIRED_FEATURE, featureType.getName());
+		}
+	}
+
+	@Check
+	public void checkDeprecatedFeatures(GeneratorEntry entry) {
+		Iterable<FeatureConfiguration> features = entry.getFeatures();
+		Iterable<FeatureType> deprecatedFeatures = filter(
+				transform(features, getFeatureType()), isDeprecated());
+		for (FeatureType feature : deprecatedFeatures) {
+			warning(String.format(DEPRECATED + " %s : %s", feature.getName(),
+					feature.getComment()),
+					SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
+					feature.getName());
+		}
+	}
+
+	@Check
+	public void checkRequiredParameters(FeatureConfiguration configuration) {
+		GeneratorModel model = (GeneratorModel) EcoreUtil2
+				.getRootContainer(configuration);
+
+		GeneratorDescriptor generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptorForId(model.getGeneratorId());
+
+		Iterable<LibraryDescriptor> libraryDescriptors = LibraryExtensions
+				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+
+		Iterable<String> requiredParameters = transform(
+				filter(concat(transform(
+						filter(concat(transform(
+								transform(libraryDescriptors,
+										getFeatureTypeLibrary()),
+								getFeatureTypes())), hasName(configuration
+								.getType().getName())), getParmeter())),
+						isRequiredParamter()), getName());
+
+		List<String> configuredParameters = Lists.newArrayList();
+
+		for (FeatureParameterValue featureParameterValue : configuration
+				.getParameterValues()) {
+			configuredParameters.add(featureParameterValue.getParameter()
+					.getName());
+		}
+		for (String string : requiredParameters) {
+			if (!configuredParameters.contains(string))
+				error(String.format(MISSING_REQUIRED_PARAMETER + " %s", string),
+						SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
+		}
+	}
+
+	@Check
+	public void checkDeprecatedParameters(GeneratorEntry entry) {
+		Iterable<FeatureParameter> deprecatedParameters = filter(
+				concat(transform(
+						transform(entry.getFeatures(), getFeatureType()),
+						getParmeter())), isDeprecated());
+		for (FeatureParameter parameter : deprecatedParameters) {
+			warning(String.format(DEPRECATED + " %s : %s", parameter.getName(),
+					parameter.getComment()),
+					SGenPackage.Literals.GENERATOR_ENTRY__ELEMENT_REF,
+					parameter.getName());
+		}
+	}
+
+	private Function<NamedElement, String> getName() {
+		return new Function<NamedElement, String>() {
+
+			public String apply(NamedElement from) {
+				return from.getName();
+			}
+		};
+	}
+
+	private Predicate<FeatureParameter> isRequiredParamter() {
+		return new Predicate<FeatureParameter>() {
+
+			public boolean apply(FeatureParameter input) {
+				return !input.isOptional();
+			}
+		};
+	}
+
+	private Predicate<DeprecatableElement> isDeprecated() {
+		return new Predicate<DeprecatableElement>() {
+			public boolean apply(DeprecatableElement input) {
+				return input.isDeprecated();
+			}
+		};
+	}
+
+	private Function<FeatureType, Iterable<FeatureParameter>> getParmeter() {
+		return new Function<FeatureType, Iterable<FeatureParameter>>() {
+
+			public Iterable<FeatureParameter> apply(FeatureType from) {
+				return from.getParameters();
+			}
+		};
+	}
+
+	private Predicate<NamedElement> hasName(final String name) {
+		return new Predicate<NamedElement>() {
+
+			public boolean apply(NamedElement input) {
+				if (name == null) {
+					return (input == null);
+				}
+				return name.equals(input.getName());
+			}
+		};
+	}
+
+	private static Predicate<FeatureType> isRequired() {
+		return new Predicate<FeatureType>() {
+
+			public boolean apply(FeatureType input) {
+				return !input.isOptional();
+			}
+		};
+	}
+
+	private static Function<FeatureTypeLibrary, Iterable<FeatureType>> getFeatureTypes() {
+		return new Function<FeatureTypeLibrary, Iterable<FeatureType>>() {
+
+			public Iterable<FeatureType> apply(FeatureTypeLibrary from) {
+				return from.getTypes();
+			}
+		};
+	}
+
+	private static Function<LibraryDescriptor, FeatureTypeLibrary> getFeatureTypeLibrary() {
+		return new Function<LibraryExtensions.LibraryDescriptor, FeatureTypeLibrary>() {
+
+			public FeatureTypeLibrary apply(LibraryDescriptor from) {
+				return (FeatureTypeLibrary) new ResourceSetImpl()
+						.getResource(from.getURI(), true).getContents().get(0);
+			}
+		};
+	}
+
+	private static Function<FeatureConfiguration, FeatureType> getFeatureType() {
+		return new Function<FeatureConfiguration, FeatureType>() {
+			public FeatureType apply(FeatureConfiguration input) {
+				return input.getType();
+			}
+		};
+	}
+}