瀏覽代碼

Headless fix (#2149)

Thomas Kutz 7 年之前
父節點
當前提交
935ad3bf0b

+ 1 - 1
plugins/org.yakindu.base.expressions/src/org/yakindu/base/expressions/inferrer/TypeParameterInferrer.xtend

@@ -171,7 +171,7 @@ class TypeParameterInferrer {
 	 */
 	def protected InferenceResult buildInferenceResult(InferenceResult oldInferenceResult,
 		Map<TypeParameter, InferenceResult> inferredTypeParameterTypes, IValidationIssueAcceptor acceptor) {
-		val oldInferredType = oldInferenceResult.type
+		val oldInferredType = oldInferenceResult?.type
 		if (oldInferredType instanceof TypeParameter) {
 			// get already inferred type from type parameter map
 			val mappedType = inferredTypeParameterTypes.get(oldInferredType);

+ 6 - 6
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/extensions/Naming.xtend

@@ -91,7 +91,7 @@ class Naming {
 	}
 	
 	def statesEnumType(ExecutionFlow it) {
-		flow.type + 'States'
+		containerType + 'States'
 	}
 	
 	def protected String entryStatemachinePrefix() {
@@ -99,15 +99,15 @@ class Naming {
 	}
 
 	def dispatch String type(InterfaceScope it) {
-		flow.type + 'Iface' + (if(name.nullOrEmpty) '' else name).asIdentifier.toFirstUpper
+		containerType + 'Iface' + (if(name.nullOrEmpty) '' else name).asIdentifier.toFirstUpper
 	}
 
 	def dispatch String type(InternalScope it) {
-		flow.type + 'Internal'
+		containerType + 'Internal'
 	}
 
 	def dispatch String type(Scope it) {
-		flow.type + 'TimeEvents'
+		containerType + 'TimeEvents'
 	}
 
 	def dispatch String type(ExecutionFlow it) {
@@ -241,7 +241,7 @@ class Naming {
 	def dispatch scopeTypeDeclMember(Declaration it) ''''''
 
 	def constantName(VariableDefinition it) {
-		(flow.type + separator + scope.type + separator + name.asEscapedIdentifier).toUpperCase
+		(containerType + separator + scope.type + separator + name.asEscapedIdentifier).toUpperCase
 	}
 
 	def raiseTimeEventFctID(ExecutionFlow it) {
@@ -360,7 +360,7 @@ class Naming {
 
 	def dispatch scopeDescription(InternalScope it) '''internal scope'''
 
-	def scHandleDecl(EObject it) { flow.type + '* ' + scHandle }
+	def scHandleDecl(EObject it) { containerType + '* ' + scHandle }
 
 	def scHandle() { 'handle' }
 

+ 6 - 4
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/execution/GeneratorExecutorLookup.java

@@ -10,6 +10,8 @@
  */
 package org.yakindu.sct.generator.core.execution;
 
+import java.util.Optional;
+
 import org.eclipse.emf.common.util.EList;
 import org.yakindu.sct.domain.extension.DomainRegistry;
 import org.yakindu.sct.domain.extension.IDomain;
@@ -50,16 +52,16 @@ public class GeneratorExecutorLookup {
 	}
 
 	public IGeneratorEntryExecutor createExecutor(GeneratorEntry entry, String generatorId) {
-		IGeneratorDescriptor description = GeneratorExtensions.getGeneratorDescriptor(generatorId);
-		if (description == null)
+		Optional<IGeneratorDescriptor> description = GeneratorExtensions.getGeneratorDescriptor(generatorId);
+		if (!description.isPresent())
 			throw new RuntimeException("No generator registered for ID: " + generatorId);
 		if (entry.getElementRef() == null || entry.getElementRef().eResource() == null) {
 			throw new RuntimeException("Could not resolve reference to model ");
 		}
-		final IGeneratorEntryExecutor executor = description.createExecutor();
+		final IGeneratorEntryExecutor executor = description.get().createExecutor();
 		if (executor == null)
 			throw new RuntimeException("Failed to create generator instance for ID:" + generatorId);
-		Injector injector = createInjector(entry, description, generatorId);
+		Injector injector = createInjector(entry, description.get(), generatorId);
 		injector.injectMembers(executor);
 		return executor;
 	}

+ 5 - 4
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/extensions/GeneratorExtensions.java

@@ -15,6 +15,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.Optional;
 import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
@@ -172,16 +173,16 @@ public class GeneratorExtensions {
 	 * returns the Generator Descriptor for the given generator id, or null, if
 	 * the id is unknown
 	 */
-	public static IGeneratorDescriptor getGeneratorDescriptor(final String generatorId) {
+	public static Optional<IGeneratorDescriptor> getGeneratorDescriptor(final String generatorId) {
 		try {
-			return Iterables.find(getGeneratorDescriptors(), new Predicate<IGeneratorDescriptor>() {
+			return Optional.of(Iterables.find(getGeneratorDescriptors(), new Predicate<IGeneratorDescriptor>() {
 				@Override
 				public boolean apply(IGeneratorDescriptor input) {
 					return input != null && input.getId() != null && input.getId().equals(generatorId);
 				}
-			});
+			}));
 		} catch (NoSuchElementException ex) {
-			return null;
+			return Optional.empty();
 		}
 	}
 

+ 5 - 3
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java

@@ -10,6 +10,8 @@
  */
 package org.yakindu.sct.generator.genmodel.ui.contentassist;
 
+import java.util.Optional;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.jface.viewers.StyledString;
@@ -35,12 +37,12 @@ public class SGenProposalProvider extends AbstractSGenProposalProvider {
 
 		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(model,
 				GeneratorModel.class);
-		IGeneratorDescriptor descriptor = GeneratorExtensions
+		Optional<IGeneratorDescriptor> descriptor = GeneratorExtensions
 				.getGeneratorDescriptor(generatorModel.getGeneratorId());
-		if (descriptor == null)
+		if (!descriptor.isPresent())
 			return;
 		ICompletionProposal proposal = createCompletionProposal(
-				descriptor.getContentType(), context);
+				descriptor.get().getContentType(), context);
 		acceptor.accept(proposal);
 	}
 

+ 6 - 3
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/quickfix/SGenQuickfixProvider.java

@@ -10,6 +10,8 @@
  */
 package org.yakindu.sct.generator.genmodel.ui.quickfix;
 
+import java.util.Optional;
+
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -59,10 +61,11 @@ public class SGenQuickfixProvider extends DefaultQuickfixProvider {
 	private FeatureConfiguration getDefaultFeatureConfiguration(final Issue issue, EObject element) {
 		GeneratorModel model = (GeneratorModel) EcoreUtil2.getRootContainer(element);
 
-		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
-
+		Optional<IGeneratorDescriptor> generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
+		if(!generatorDescriptor.isPresent())
+			return null;
 		Iterable<ILibraryDescriptor> libraryDescriptor = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+				.getLibraryDescriptors(generatorDescriptor.get().getLibraryIDs());
 		for (ILibraryDescriptor desc : libraryDescriptor) {
 			ResourceSet set = new ResourceSetImpl();
 			Resource resource = set.getResource(desc.getURI(), true);

+ 7 - 3
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/templates/SGenTemplateProposalProvider.java

@@ -10,6 +10,8 @@
  */
 package org.yakindu.sct.generator.genmodel.ui.templates;
 
+import java.util.Optional;
+
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -72,10 +74,12 @@ public class SGenTemplateProposalProvider extends DefaultTemplateProposalProvide
 			ITemplateAcceptor acceptor) {
 		GeneratorModel model = (GeneratorModel) EcoreUtil2.getRootContainer(context.getCurrentModel());
 
-		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
-
+		Optional<IGeneratorDescriptor> generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
+		if(!generatorDescriptor.isPresent()) {
+			return;
+		}
 		Iterable<ILibraryDescriptor> libraryDescriptor = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+				.getLibraryDescriptors(generatorDescriptor.get().getLibraryIDs());
 
 		for (ILibraryDescriptor desc : libraryDescriptor) {
 			ResourceSet set = new ResourceSetImpl();

+ 8 - 4
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/wizard/SGenWizardPage2.java

@@ -13,6 +13,7 @@ package org.yakindu.sct.generator.genmodel.ui.wizard;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.TreeMap;
 
 import org.eclipse.core.resources.IFile;
@@ -106,7 +107,7 @@ public class SGenWizardPage2 extends WizardPage {
 		super.setVisible(visible);
 		refreshInput();
 	}
-	
+
 	private void createObjectTree(Composite container) {
 		lblNewLabel = new Label(container, SWT.NONE);
 		lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
@@ -231,13 +232,16 @@ public class SGenWizardPage2 extends WizardPage {
 			return super.getImage(element);
 		}
 	}
-	
+
 	protected static class SGenWorkspaceLabelProvider extends AbstractWorkspaceLabelProvider {
 
 		protected Image createImageForFile(IFile file) {
 			String generatorID = FileExtensions.getGeneratorForFileExtension(file.getFileExtension());
-			IGeneratorDescriptor genDesc = GeneratorExtensions.getGeneratorDescriptor(generatorID);
-			return PathToImageResolver.toImage(genDesc.getImagePath());
+			Optional<IGeneratorDescriptor> genDesc = GeneratorExtensions.getGeneratorDescriptor(generatorID);
+			if (genDesc.isPresent()) {
+				return PathToImageResolver.toImage(genDesc.get().getImagePath());
+			}
+			return null;
 		}
 
 	}

+ 8 - 8
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenScopeProvider.java

@@ -11,6 +11,7 @@
 package org.yakindu.sct.generator.genmodel.scoping;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.emf.common.util.EList;
@@ -94,10 +95,11 @@ public class SGenScopeProvider extends AbstractDeclarativeScopeProvider {
 	protected IScope scope_GeneratorEntry_elementRef(final EObject context, final EReference reference) {
 		GeneratorModel generatorModel = (GeneratorModel) EcoreUtil2.getRootContainer(context);
 		String id = generatorModel.getGeneratorId();
-		final IGeneratorDescriptor desc = GeneratorExtensions.getGeneratorDescriptor(id);
-		if (desc == null)
+		final Optional<IGeneratorDescriptor> desc = GeneratorExtensions.getGeneratorDescriptor(id);
+		if (!desc.isPresent()) {
 			return IScope.NULLSCOPE;
-		final String elementRefType = desc.getElementRefType();
+		}
+		final String elementRefType = desc.get().getElementRefType();
 		IScope scope = new FilteringScope(getDelegate().getScope(context, reference),
 				new Predicate<IEObjectDescription>() {
 					public boolean apply(IEObjectDescription input) {
@@ -151,13 +153,11 @@ public class SGenScopeProvider extends AbstractDeclarativeScopeProvider {
 		Assert.isNotNull(generatorModel);
 		String generatorId = generatorModel.getGeneratorId();
 
-		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(generatorId);
-
 		Iterable<IEObjectDescription> allElements = Lists.newArrayList();
-
-		if (generatorDescriptor != null) {
+		Optional<IGeneratorDescriptor> generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(generatorId);
+		if (generatorDescriptor.isPresent()) {
 			Iterable<ILibraryDescriptor> libraryDescriptor = LibraryExtensions
-					.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+					.getLibraryDescriptors(generatorDescriptor.get().getLibraryIDs());
 
 			for (ILibraryDescriptor desc : libraryDescriptor) {
 				Resource library = resourceSet.getResource(desc.getURI(), true);

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

@@ -16,6 +16,7 @@ import static com.google.common.collect.Iterables.transform;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
 import org.eclipse.core.runtime.IStatus;
@@ -86,8 +87,12 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 
 	@Check
 	public void checkDomainCompatibility(GeneratorModel model) {
-		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
-		Set<String> validDomains = generatorDescriptor.getValidDomains();
+		Optional<IGeneratorDescriptor> generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
+		if (!generatorDescriptor.isPresent()) {
+			return;
+		}
+		Set<String> validDomains = generatorDescriptor.get().getValidDomains();
 		EList<GeneratorEntry> entries = model.getEntries();
 		for (GeneratorEntry generatorEntry : entries) {
 			EObject reference = generatorEntry.getElementRef();
@@ -112,14 +117,15 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 	@Check
 	public void checkContentType(GeneratorEntry entry) {
 		GeneratorModel generatorModel = EcoreUtil2.getContainerOfType(entry, GeneratorModel.class);
-		IGeneratorDescriptor descriptor = GeneratorExtensions.getGeneratorDescriptor(generatorModel.getGeneratorId());
-		if (descriptor == null)
+		Optional<IGeneratorDescriptor> descriptor = GeneratorExtensions
+				.getGeneratorDescriptor(generatorModel.getGeneratorId());
+		if (!descriptor.isPresent())
 			return;
 		String contentType = entry.getContentType();
 		if (contentType == null || contentType.trim().length() == 0) {
 			return;
 		}
-		if (!contentType.equals(descriptor.getContentType())) {
+		if (!contentType.equals(descriptor.get().getContentType())) {
 			error(UNKNOWN_CONTENT_TYPE + contentType + "'", SGenPackage.Literals.GENERATOR_ENTRY__CONTENT_TYPE);
 		}
 	}
@@ -154,10 +160,13 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 			return;
 		GeneratorModel model = (GeneratorModel) EcoreUtil2.getRootContainer(value);
 
-		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
-
+		Optional<IGeneratorDescriptor> generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
+		if (!generatorDescriptor.isPresent()) {
+			return;
+		}
 		IDefaultFeatureValueProvider provider = LibraryExtensions.getDefaultFeatureValueProvider(
-				generatorDescriptor.getLibraryIDs(), value.getParameter().getFeatureType().getLibrary());
+				generatorDescriptor.get().getLibraryIDs(), value.getParameter().getFeatureType().getLibrary());
 		injector.injectMembers(provider);
 		IStatus status = provider.validateParameterValue(value);
 		createMarker(status);
@@ -175,8 +184,8 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 
 	@Check
 	public void checkGeneratorExists(GeneratorModel model) {
-		IGeneratorDescriptor descriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
-		if (descriptor == null) {
+		Optional<IGeneratorDescriptor> descriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
+		if (!descriptor.isPresent()) {
 			error(String.format(UNKOWN_GENERATOR + " %s!", model.getGeneratorId()),
 					SGenPackage.Literals.GENERATOR_MODEL__GENERATOR_ID);
 		}
@@ -222,10 +231,13 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 	public void checkRequiredFeatures(GeneratorEntry entry) {
 		GeneratorModel model = (GeneratorModel) EcoreUtil2.getRootContainer(entry);
 
-		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
-
+		Optional<IGeneratorDescriptor> generatorDescriptor = GeneratorExtensions
+				.getGeneratorDescriptor(model.getGeneratorId());
+		if (!generatorDescriptor.isPresent()) {
+			return;
+		}
 		Iterable<ILibraryDescriptor> libraryDescriptors = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+				.getLibraryDescriptors(generatorDescriptor.get().getLibraryIDs());
 
 		Iterable<FeatureType> requiredFeatures = filter(
 				concat(transform(transform(libraryDescriptors, getFeatureTypeLibrary()), getFeatureTypes())),
@@ -256,10 +268,12 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 	public void checkRequiredParameters(FeatureConfiguration configuration) {
 		GeneratorModel model = (GeneratorModel) EcoreUtil2.getRootContainer(configuration);
 
-		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
-
+		Optional<IGeneratorDescriptor> generatorDescriptor = GeneratorExtensions.getGeneratorDescriptor(model.getGeneratorId());
+		if(!generatorDescriptor.isPresent()) {
+			return;
+		}
 		Iterable<ILibraryDescriptor> libraryDescriptors = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+				.getLibraryDescriptors(generatorDescriptor.get().getLibraryIDs());
 
 		Iterable<String> requiredParameters = transform(filter(concat(transform(
 				filter(concat(transform(transform(libraryDescriptors, getFeatureTypeLibrary()), getFeatureTypes())),

+ 6 - 3
test-plugins/org.yakindu.sct.generator.genmodel.test/src/org/yakindu/sct/generator/genmodel/test/HelpIntegrationTest.java

@@ -14,7 +14,9 @@ import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -139,11 +141,12 @@ public class HelpIntegrationTest {
 	}
 	
 	private Iterable<IEObjectDescription> getAllElements(String generatorId) {
-		IGeneratorDescriptor generatorDescriptor = GeneratorExtensions
+		Optional<IGeneratorDescriptor> generatorDescriptor = GeneratorExtensions
 				.getGeneratorDescriptor(generatorId);
-		
+		if(!generatorDescriptor.isPresent())
+			return Collections.emptyList();
 		Iterable<ILibraryDescriptor> libraryDescriptor = LibraryExtensions
-				.getLibraryDescriptors(generatorDescriptor.getLibraryIDs());
+				.getLibraryDescriptors(generatorDescriptor.get().getLibraryIDs());
 		
 		Iterable<IEObjectDescription> allElements = Lists.newArrayList();
 		for (ILibraryDescriptor desc : libraryDescriptor) {