ソースを参照

Generate sc_types.h only if it does not exist (Issue YAKHMI-1021).

markus.muehlbrandt@gmail.com 11 年 前
コミット
5aef0969f1

+ 19 - 7
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/Types.xtend

@@ -15,17 +15,29 @@ import org.yakindu.sct.model.sgraph.Statechart
 import org.eclipse.xtext.generator.IFileSystemAccess
 import com.google.inject.Inject
 import org.yakindu.sct.model.sgen.GeneratorEntry
+import org.yakindu.sct.generator.core.impl.SimpleResourceFileSystemAccess
+import org.eclipse.core.resources.ResourcesPlugin
+import org.eclipse.core.runtime.Path
 
 class Types {
-	
+
 	@Inject extension Naming
 	@Inject extension GenmodelEntries
-	 
+
 	def generateTypesH(ExecutionFlow flow, Statechart sc, IFileSystemAccess fsa, GeneratorEntry entry) {
-		 fsa.generateFile(flow.typesModule.h, flow.typesHContent(entry))
+		if (fsa instanceof SimpleResourceFileSystemAccess &&
+			!exists(flow.typesModule.h, fsa as SimpleResourceFileSystemAccess)) {
+			fsa.generateFile(flow.typesModule.h, flow.typesHContent(entry))
+		}
+	}
+
+	def protected exists(String filename, SimpleResourceFileSystemAccess fsa) {
+		val uri = fsa.getURI(filename);
+		val file = ResourcesPlugin.getWorkspace().getRoot()
+					.getFile(new Path(uri.toPlatformString(true)));
+		return file.exists;
 	}
-	
-	
+
 	def typesHContent(ExecutionFlow it, GeneratorEntry entry) '''
 		«entry.licenseText»
 		
@@ -55,7 +67,7 @@ class Types {
 		
 		#define bool_true true
 		#define bool_false false
-
+		
 		#endif /* «typesModule.define»_H_ */
 	'''
-}
+}

+ 2 - 1
plugins/org.yakindu.sct.generator.cpp/META-INF/MANIFEST.MF

@@ -20,7 +20,8 @@ Require-Bundle: org.yakindu.sct.model.sexec,
  org.yakindu.sct.generator.core;bundle-version="1.0.0",
  org.yakindu.sct.generator.genmodel;bundle-version="1.0.0",
  org.yakindu.sct.generator.c;bundle-version="2.1.0",
- org.eclipse.xtext.xbase.lib;bundle-version="2.3.1"
+ org.eclipse.xtext.xbase.lib;bundle-version="2.3.1",
+ org.eclipse.xtext.builder;bundle-version="2.3.0"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.yakindu.sct.generator.cpp,
  org.yakindu.sct.generator.cpp.templates

+ 14 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/Types.xtend

@@ -16,6 +16,9 @@ import org.eclipse.xtext.generator.IFileSystemAccess
 import com.google.inject.Inject
 import org.yakindu.sct.model.sgen.GeneratorEntry
 import org.yakindu.sct.generator.c.GenmodelEntries
+import org.yakindu.sct.generator.core.impl.SimpleResourceFileSystemAccess
+import org.eclipse.core.resources.ResourcesPlugin
+import org.eclipse.core.runtime.Path
 
 class Types {
 	
@@ -23,9 +26,19 @@ class Types {
 	@Inject extension GenmodelEntries
 	 
 	def generateTypesHpp(ExecutionFlow flow, Statechart sc, IFileSystemAccess fsa, GeneratorEntry entry) {
-		 fsa.generateFile(flow.typesModule.h, flow.typesHContent(entry))
+		if (fsa instanceof SimpleResourceFileSystemAccess &&
+			!exists(flow.typesModule.h, fsa as SimpleResourceFileSystemAccess)) {
+			fsa.generateFile(flow.typesModule.h, flow.typesHContent(entry))	
+		}
 	}
 	
+	def protected exists(String filename, SimpleResourceFileSystemAccess fsa) {
+		val uri = fsa.getURI(filename);
+		val file = ResourcesPlugin.getWorkspace().getRoot()
+					.getFile(new Path(uri.toPlatformString(true)));
+		return file.exists;
+	}	
+	
 	def typesHContent(ExecutionFlow it, GeneratorEntry entry) '''
 		«entry.licenseText»