add versioning support to gdsl
authorpeter <peter.gromov@jetbrains.com>
Tue, 6 Jul 2010 10:12:41 +0000 (11:12 +0100)
committerpeter <peter.gromov@jetbrains.com>
Tue, 6 Jul 2010 10:18:20 +0000 (11:18 +0100)
plugins/groovy/resources/standardDsls/metaDsl.gdsl
plugins/groovy/src/org/jetbrains/plugins/groovy/dsl/GroovyDslExecutor.groovy

index 763f6714630fecdac30fb89b77a5206186573de7..1a34527f55c557ea24060a6189ec0de8db434d0a 100644 (file)
@@ -7,6 +7,8 @@ contributor([gdslScriptContext]) {
   method name: "contributor", params: [contexts: "java.util.Map", body: {}], type: void
   method name: "contributor", params: [contexts: "java.lang.Object", body: {}], type: void
 
+  method name: "supportsVersion", params: [version: "java.lang.String"], type: boolean
+
   // scopes
   property name: "closureScope", params: [contexts: "java.util.Map"], type: {}
   property name: "scriptScope", params: [contexts: "java.util.Map"], type: {}
index 4b9b75a4405429c6073e155f743ddb44715b5d93..43107b78f5e85f26b365fcfd22de41987a68d547 100644 (file)
@@ -1,7 +1,8 @@
 package org.jetbrains.plugins.groovy.dsl
 
+import com.intellij.openapi.application.ApplicationInfo
 import com.intellij.openapi.util.Pair
-import com.intellij.psi.PsiElement
+import com.intellij.openapi.util.text.StringUtil
 import com.intellij.util.ProcessingContext
 import org.jetbrains.plugins.groovy.dsl.psi.PsiEnhancerCategory
 import org.jetbrains.plugins.groovy.dsl.toplevel.CompositeContextFilter
@@ -16,6 +17,14 @@ public class GroovyDslExecutor {
   static final def cats = PsiEnhancerCategory.EP_NAME.extensions.collect { it.class }
   final List<Pair<ContextFilter, Closure>> enhancers = []
   private final String myFileName;
+  static final String ideaVersion
+
+  static {
+    def major = ApplicationInfo.instance.majorVersion
+      def minor = ApplicationInfo.instance.minorVersion
+      def full = major + (minor ? ".$minor" : "")
+    ideaVersion = full
+  }
 
   public GroovyDslExecutor(String text, String fileName) {
     myFileName = fileName
@@ -34,6 +43,10 @@ public class GroovyDslExecutor {
       }
     }
 
+    mc.supportsVersion = { String ver ->
+      StringUtil.compareVersionNumbers(ideaVersion, ver) >= 0
+    }
+
     mc.initialize()
     script.metaClass = mc
     script.run()