浏览代码

create project

ruki 7 年之前
父节点
当前提交
8f5f778b5c

+ 297 - 270
.idea/workspace.xml

@@ -26,110 +26,109 @@
   </component>
   <component name="FileEditorManager">
     <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file leaf-file-name="plugin.xml" pinned="false" current-in-tab="false">
+      <file leaf-file-name="plugin.xml" pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/resources/META-INF/plugin.xml">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="195">
-              <caret line="13" column="12" lean-forward="true" selection-start-line="13" selection-start-column="12" selection-end-line="13" selection-end-column="12" />
+            <state relative-caret-position="120">
+              <caret line="8" column="55" lean-forward="true" selection-start-line="8" selection-start-column="55" selection-end-line="8" selection-end-column="55" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="SystemUtils.kt" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/SystemUtils.kt">
+      <file leaf-file-name="XMakeToolWindowFactory.kt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowFactory.kt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="62">
-              <caret line="127" column="5" lean-forward="true" selection-start-line="127" selection-start-column="5" selection-end-line="127" selection-end-column="5" />
-              <folding>
-                <element signature="e#31#852#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="202">
+              <caret line="42" column="0" lean-forward="false" selection-start-line="42" selection-start-column="0" selection-end-line="42" selection-end-column="0" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="XMakeToolWindowProblemPanel.kt" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowProblemPanel.kt">
+      <file leaf-file-name="XMakeModuleBuilder.kt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleBuilder.kt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="1558">
-              <caret line="118" column="71" lean-forward="false" selection-start-line="118" selection-start-column="71" selection-end-line="118" selection-end-column="71" />
+            <state relative-caret-position="292">
+              <caret line="42" column="40" lean-forward="false" selection-start-line="42" selection-start-column="40" selection-end-line="42" selection-end-column="40" />
               <folding>
-                <element signature="e#33#1348#0" expanded="true" />
+                <element signature="e#33#418#0" expanded="true" />
               </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="TextAttributes.class" pinned="false" current-in-tab="false">
-        <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/editor/markup/TextAttributes.class">
+      <file leaf-file-name="ConsoleProcessHandler.kt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/ConsoleProcessHandler.kt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="205">
-              <caret line="60" column="11" lean-forward="false" selection-start-line="60" selection-start-column="11" selection-end-line="60" selection-end-column="11" />
-              <folding>
-                <element signature="e#1892#1893#0" expanded="true" />
-                <element signature="e#1942#1943#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="60">
+              <caret line="11" column="121" lean-forward="false" selection-start-line="11" selection-start-column="121" selection-end-line="11" selection-end-column="121" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MarkupModel.class" pinned="false" current-in-tab="false">
-        <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/editor/markup/MarkupModel.class">
+      <file leaf-file-name="XMakeRunConfiguration.kt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfiguration.kt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="210">
-              <caret line="20" column="21" lean-forward="false" selection-start-line="20" selection-start-column="21" selection-end-line="20" selection-end-column="21" />
+            <state relative-caret-position="453">
+              <caret line="82" column="14" lean-forward="true" selection-start-line="82" selection-start-column="14" selection-end-line="82" selection-end-column="14" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="kotlin.kotlin_builtins" pinned="false" current-in-tab="false">
-        <entry file="jar://$APPLICATION_HOME_DIR$/lib/kotlin-runtime.jar!/kotlin/kotlin.kotlin_builtins">
+      <file leaf-file-name="XMakeModuleConfigurationEditorProvider.kt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleConfigurationEditorProvider.kt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-2241">
-              <caret line="567" column="74" lean-forward="false" selection-start-line="567" selection-start-column="72" selection-end-line="567" selection-end-column="74" />
-              <folding />
+            <state relative-caret-position="120">
+              <caret line="8" column="6" lean-forward="false" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" />
+              <folding>
+                <element signature="e#33#391#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="ConsoleProcessHandler.kt" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/ConsoleProcessHandler.kt">
+      <file leaf-file-name="SystemUtils.kt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/SystemUtils.kt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="480">
-              <caret line="32" column="0" lean-forward="false" selection-start-line="32" selection-start-column="0" selection-end-line="32" selection-end-column="0" />
-              <folding>
-                <element signature="e#31#379#0" expanded="true" />
-              </folding>
+            <state relative-caret-position="24">
+              <caret line="214" column="153" lean-forward="true" selection-start-line="214" selection-start-column="153" selection-end-line="214" selection-end-column="153" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="LocalFileSystem.class" pinned="false" current-in-tab="false">
-        <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/LocalFileSystem.class">
+      <file leaf-file-name="XMakeProjectTasksRunner.kt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeProjectTasksRunner.kt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-345">
-              <caret line="31" column="48" lean-forward="false" selection-start-line="31" selection-start-column="32" selection-end-line="31" selection-end-column="48" />
-              <folding />
+            <state relative-caret-position="144">
+              <caret line="19" column="0" lean-forward="false" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
+              <folding>
+                <element signature="e#29#531#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="VirtualFileSystem.class" pinned="false" current-in-tab="false">
-        <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/VirtualFileSystem.class">
+      <file leaf-file-name="XMakeProjectConfigurable.kt" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeProjectConfigurable.kt">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="149">
-              <caret line="22" column="32" lean-forward="false" selection-start-line="22" selection-start-column="32" selection-end-line="22" selection-end-column="32" />
-              <folding />
+            <state relative-caret-position="214">
+              <caret line="205" column="35" lean-forward="false" selection-start-line="205" selection-start-column="23" selection-end-line="205" selection-end-column="35" />
+              <folding>
+                <element signature="e#33#1481#0" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="OpenFileDescriptor.class" pinned="false" current-in-tab="false">
-        <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/fileEditor/OpenFileDescriptor.class">
+      <file leaf-file-name="ModuleBuilder.class" pinned="false" current-in-tab="false">
+        <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/ide/util/projectWizard/ModuleBuilder.class">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="124">
-              <caret line="207" column="18" lean-forward="false" selection-start-line="207" selection-start-column="8" selection-end-line="207" selection-end-column="18" />
+            <state relative-caret-position="196">
+              <caret line="120" column="19" lean-forward="false" selection-start-line="120" selection-start-column="13" selection-end-line="120" selection-end-column="19" />
               <folding />
             </state>
           </provider>
@@ -149,13 +148,6 @@
   </component>
   <component name="FindInProjectRecents">
     <findStrings>
-      <find>workingDirectory</find>
-      <find>ConsoleViewContentType</find>
-      <find>output</find>
-      <find>print</find>
-      <find>ProcessOutputCollector</find>
-      <find>ConsoleListener</find>
-      <find>Process</find>
       <find>initConsoleUi</find>
       <find>ProcessOutputTypes</find>
       <find>color</find>
@@ -179,6 +171,13 @@
       <find>select</find>
       <find>fold</find>
       <find>FoldRegion</find>
+      <find>@NotNull</find>
+      <find>getic</find>
+      <find>suggestSdkName</find>
+      <find>Models</find>
+      <find>abstract</find>
+      <find>myName</find>
+      <find>Lua</find>
     </findStrings>
     <replaceStrings>
       <replace>XMakeProjectConfiguration</replace>
@@ -186,6 +185,8 @@
       <replace>xmakeConfiguration</replace>
       <replace>consoleView</replace>
       <replace>outputStreamWriter</replace>
+      <replace>Model</replace>
+      <replace>XMake</replace>
     </replaceStrings>
   </component>
   <component name="GradleLocalSettings">
@@ -196,13 +197,6 @@
   <component name="IdeDocumentHistory">
     <option name="CHANGED_PATHS">
       <list>
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/build/XMakeBuildTargetScopeProvider.java" />
-        <option value="$PROJECT_DIR$/xmake-service/xmake-service.iml" />
-        <option value="$PROJECT_DIR$/xmake-service/src/org/tboox/xmake/service/build/XMakeBuilderService.java" />
-        <option value="$PROJECT_DIR$/xmake-service/src/META-INF/services/org.jetbrains.jps.incremental.BuilderService" />
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeConfigurationType.kt" />
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeConfiguration.kt" />
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeCommandConfiguration.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/parser/XMakeParserDefinition.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/lang/XMakeFile.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/lang/XMakeLanguage.kt" />
@@ -230,23 +224,30 @@
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/actions/QuickStartAction.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/actions/CleanAction.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/actions/RunAction.kt" />
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfigurationEditor.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowOutputPanel.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunState.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/shared/XMakeConfiguration.kt" />
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeProjectConfigurable.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/actions/BuildAction.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/actions/RebuildAction.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeProjectTasksRunner.kt" />
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfiguration.kt" />
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/utils/ConsoleProcessHandler.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/icons/XMakeIcons.kt" />
-        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowFactory.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/shared/XMakeProblem.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/utils/FileUtils.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowProblemPanel.kt" />
-        <option value="$PROJECT_DIR$/resources/META-INF/plugin.xml" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSDK.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleType.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSdkType.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleConfigurationEditorProvider.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeProjectConfigurable.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfigurationEditor.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleBuilderConfigurable.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSdkSettingsStep.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleBuilder.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfiguration.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/utils/ConsoleProcessHandler.kt" />
         <option value="$PROJECT_DIR$/src/org/tboox/xmake/utils/SystemUtils.kt" />
+        <option value="$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowFactory.kt" />
+        <option value="$PROJECT_DIR$/resources/META-INF/plugin.xml" />
       </list>
     </option>
   </component>
@@ -524,6 +525,7 @@
       <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
       <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32907802" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
@@ -536,7 +538,6 @@
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
       <window_info id="Data View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
     </layout>
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -547,433 +548,459 @@
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager>
-      <option name="time" value="12" />
+      <breakpoints>
+        <line-breakpoint enabled="true" type="kotlin-line">
+          <url>file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSdkType.kt</url>
+          <line>19</line>
+          <properties />
+          <option name="timeStamp" value="12" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="kotlin-line">
+          <url>file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSdkSettingsStep.kt</url>
+          <line>4</line>
+          <properties />
+          <option name="timeStamp" value="15" />
+        </line-breakpoint>
+      </breakpoints>
+      <option name="time" value="16" />
     </breakpoint-manager>
     <watches-manager />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/ExternalToolRunner.java" />
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/TerminalExecutionConsole.java" />
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/execution/ui/ConsoleViewContentType.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/idea.jar!/com/intellij/execution/process/ColoredProcessHandler.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="276">
-          <caret line="69" column="54" lean-forward="false" selection-start-line="69" selection-start-column="54" selection-end-line="69" selection-end-column="54" />
+        <state relative-caret-position="41">
+          <caret line="38" column="0" lean-forward="false" selection-start-line="38" selection-start-column="0" selection-end-line="38" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/util.jar!/com/intellij/execution/process/ProcessAdapter.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/util.jar!/com/intellij/execution/process/ProcessEvent.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="105">
-          <caret line="10" column="11" lean-forward="false" selection-start-line="10" selection-start-column="11" selection-end-line="10" selection-end-column="11" />
+        <state relative-caret-position="45">
+          <caret line="9" column="38" lean-forward="false" selection-start-line="9" selection-start-column="38" selection-end-line="9" selection-end-column="38" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/actions/CleanConfigurationAction.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/application/ApplicationManager.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="210">
-          <caret line="18" column="26" lean-forward="false" selection-start-line="18" selection-start-column="26" selection-end-line="18" selection-end-column="26" />
-          <folding>
-            <element signature="e#33#275#0" expanded="false" />
-          </folding>
+        <state relative-caret-position="180">
+          <caret line="19" column="26" lean-forward="false" selection-start-line="19" selection-start-column="26" selection-end-line="19" selection-end-column="26" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/actions/QuickStartAction.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/application/Application.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="210">
-          <caret line="18" column="22" lean-forward="false" selection-start-line="18" selection-start-column="22" selection-end-line="18" selection-end-column="22" />
-          <folding>
-            <element signature="e#33#275#0" expanded="false" />
-          </folding>
+        <state relative-caret-position="-442">
+          <caret line="18" column="17" lean-forward="false" selection-start-line="18" selection-start-column="17" selection-end-line="18" selection-end-column="17" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfigurationEditor.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/ui/components/JBList.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="124">
+          <caret line="102" column="15" lean-forward="false" selection-start-line="102" selection-start-column="15" selection-end-line="102" selection-end-column="15" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/actions/BuildAction.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="15">
-          <caret line="52" column="54" lean-forward="false" selection-start-line="52" selection-start-column="54" selection-end-line="52" selection-end-column="54" />
+        <state relative-caret-position="495">
+          <caret line="33" column="1" lean-forward="false" selection-start-line="33" selection-start-column="1" selection-end-line="33" selection-end-column="1" />
           <folding>
-            <element signature="e#29#990#0" expanded="false" />
+            <element signature="e#33#379#0" expanded="false" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/execution/ExecutionResult.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/psi/PsiFile.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="105">
-          <caret line="13" column="20" lean-forward="false" selection-start-line="13" selection-start-column="4" selection-end-line="13" selection-end-column="20" />
+        <state relative-caret-position="133">
+          <caret line="15" column="10" lean-forward="true" selection-start-line="15" selection-start-column="10" selection-end-line="15" selection-end-column="10" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/execution/configurations/RunProfileState.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/VirtualFile.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="120">
-          <caret line="16" column="33" lean-forward="false" selection-start-line="16" selection-start-column="0" selection-end-line="17" selection-end-column="0" />
+        <state relative-caret-position="-3594">
+          <caret line="26" column="22" lean-forward="false" selection-start-line="26" selection-start-column="22" selection-end-line="26" selection-end-column="22" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunner.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/FileUtils.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="120">
-          <caret line="11" column="0" lean-forward="false" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
+        <state relative-caret-position="390">
+          <caret line="60" column="0" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="236" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/execution/configurations/CommandLineState.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/VirtualFileManager.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="202">
-          <caret line="94" column="54" lean-forward="true" selection-start-line="94" selection-start-column="34" selection-end-line="94" selection-end-column="54" />
+        <state relative-caret-position="133">
+          <caret line="48" column="32" lean-forward="false" selection-start-line="48" selection-start-column="32" selection-end-line="48" selection-end-column="32" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/execution/DefaultExecutionResult.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/FileUtils.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="184">
-          <caret line="63" column="35" lean-forward="true" selection-start-line="63" selection-start-column="35" selection-end-line="63" selection-end-column="35" />
-          <folding>
-            <element signature="e#0#3099#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="90">
+          <caret line="25" column="32" lean-forward="false" selection-start-line="25" selection-start-column="32" selection-end-line="25" selection-end-column="32" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunState.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/VirtualFileSystem.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-61">
-          <caret line="21" column="20" lean-forward="true" selection-start-line="21" selection-start-column="20" selection-end-line="21" selection-end-column="20" />
+        <state relative-caret-position="149">
+          <caret line="22" column="32" lean-forward="false" selection-start-line="22" selection-start-column="32" selection-end-line="22" selection-end-column="32" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/actions/RunAction.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/LocalFileSystem.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="470">
-          <caret line="39" column="0" lean-forward="false" selection-start-line="23" selection-start-column="0" selection-end-line="39" selection-end-column="0" />
-          <folding>
-            <element signature="e#33#525#0" expanded="false" />
-          </folding>
+        <state relative-caret-position="-345">
+          <caret line="31" column="48" lean-forward="false" selection-start-line="31" selection-start-column="32" selection-end-line="31" selection-end-column="48" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeProjectConfigurable.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/kotlin-runtime.jar!/kotlin/kotlin.kotlin_builtins">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="488">
-          <caret line="263" column="45" lean-forward="false" selection-start-line="263" selection-start-column="45" selection-end-line="263" selection-end-column="45" />
-          <folding>
-            <element signature="e#33#1481#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="-2241">
+          <caret line="567" column="74" lean-forward="false" selection-start-line="567" selection-start-column="72" selection-end-line="567" selection-end-column="74" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/actions/CleanAction.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/fileEditor/OpenFileDescriptor.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="133">
-          <caret line="19" column="0" lean-forward="true" selection-start-line="19" selection-start-column="0" selection-end-line="31" selection-end-column="9" />
-          <folding>
-            <element signature="e#33#379#0" expanded="false" />
-          </folding>
+        <state relative-caret-position="124">
+          <caret line="207" column="18" lean-forward="false" selection-start-line="207" selection-start-column="8" selection-end-line="207" selection-end-column="18" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/execution/ui/ConsoleView.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/editor/markup/MarkupModel.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="90">
-          <caret line="14" column="45" lean-forward="false" selection-start-line="14" selection-start-column="45" selection-end-line="14" selection-end-column="45" />
+        <state relative-caret-position="210">
+          <caret line="20" column="21" lean-forward="false" selection-start-line="20" selection-start-column="21" selection-end-line="20" selection-end-column="21" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/execution/ui/ExecutionConsole.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/editor/markup/TextAttributes.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="90">
-          <caret line="10" column="17" lean-forward="false" selection-start-line="10" selection-start-column="17" selection-end-line="10" selection-end-column="17" />
-          <folding />
+        <state relative-caret-position="205">
+          <caret line="60" column="11" lean-forward="false" selection-start-line="60" selection-start-column="11" selection-end-line="60" selection-end-column="11" />
+          <folding>
+            <element signature="e#1892#1893#0" expanded="true" />
+            <element signature="e#1942#1943#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowOutputPanel.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowProblemPanel.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="538">
-          <caret line="57" column="5" lean-forward="false" selection-start-line="54" selection-start-column="0" selection-end-line="57" selection-end-column="5" />
+        <state relative-caret-position="1558">
+          <caret line="118" column="71" lean-forward="false" selection-start-line="118" selection-start-column="71" selection-end-line="118" selection-end-column="71" />
           <folding>
-            <element signature="e#33#684#0" expanded="true" />
+            <element signature="e#33#1348#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/actions/RebuildAction.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSDK.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="510">
-          <caret line="34" column="0" lean-forward="false" selection-start-line="34" selection-start-column="0" selection-end-line="34" selection-end-column="0" />
+        <state relative-caret-position="300">
+          <caret line="94" column="0" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="599" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/idea.jar!/com/intellij/openapi/projectRoots/impl/JavaDependentSdkType.class">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="105">
+          <caret line="14" column="11" lean-forward="false" selection-start-line="14" selection-start-column="11" selection-end-line="14" selection-end-column="11" />
           <folding>
-            <element signature="e#33#379#0" expanded="false" />
+            <element signature="e#543#544#0" expanded="true" />
+            <element signature="e#570#571#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfiguration.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/idea.jar!/com/intellij/openapi/projectRoots/impl/DependentSdkType.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="273">
-          <caret line="75" column="31" lean-forward="false" selection-start-line="75" selection-start-column="31" selection-end-line="75" selection-end-column="31" />
+        <state relative-caret-position="105">
+          <caret line="21" column="11" lean-forward="false" selection-start-line="21" selection-start-column="11" selection-end-line="21" selection-end-column="11" />
           <folding>
-            <element signature="e#29#649#0" expanded="false" />
+            <element signature="e#757#758#0" expanded="true" />
+            <element signature="e#784#785#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/idea.jar!/com/intellij/execution/process/KillableColoredProcessHandler.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/icons/XMakeIcons.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="90">
-          <caret line="13" column="65" lean-forward="false" selection-start-line="13" selection-start-column="65" selection-end-line="13" selection-end-column="65" />
+        <state relative-caret-position="60">
+          <caret line="4" column="7" lean-forward="false" selection-start-line="4" selection-start-column="7" selection-end-line="4" selection-end-column="7" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/idea.jar!/com/intellij/execution/process/KillableProcessHandler.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/LuaModuleType.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-87">
-          <caret line="17" column="78" lean-forward="true" selection-start-line="17" selection-start-column="78" selection-end-line="17" selection-end-column="78" />
+        <state relative-caret-position="150">
+          <caret line="30" column="13" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="74" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/util.jar!/com/intellij/openapi/diagnostic/Logger.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/LuaModuleBuilder.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-1163">
-          <caret line="18" column="22" lean-forward="false" selection-start-line="18" selection-start-column="22" selection-end-line="18" selection-end-column="22" />
+        <state relative-caret-position="150">
+          <caret line="39" column="13" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="106" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/execution/process/AnsiEscapeDecoder.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSDK.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="116">
-          <caret line="68" column="0" lean-forward="false" selection-start-line="68" selection-start-column="0" selection-end-line="68" selection-end-column="0" />
+        <state relative-caret-position="101">
+          <caret line="17" column="19" lean-forward="true" selection-start-line="17" selection-start-column="19" selection-end-line="17" selection-end-column="19" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/idea.jar!/com/intellij/execution/process/ColoredProcessHandler.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/shared/XMakeProblem.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="41">
-          <caret line="38" column="0" lean-forward="false" selection-start-line="38" selection-start-column="0" selection-end-line="38" selection-end-column="0" />
+        <state relative-caret-position="30">
+          <caret line="2" column="124" lean-forward="false" selection-start-line="2" selection-start-column="119" selection-end-line="2" selection-end-column="124" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/util.jar!/com/intellij/execution/process/ProcessEvent.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/shared/XMakeConfiguration.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="45">
-          <caret line="9" column="38" lean-forward="false" selection-start-line="9" selection-start-column="38" selection-end-line="9" selection-end-column="38" />
+        <state relative-caret-position="463">
+          <caret line="242" column="5" lean-forward="true" selection-start-line="227" selection-start-column="0" selection-end-line="242" selection-end-column="5" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/application/ApplicationManager.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/projectRoots/SdkType.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="180">
-          <caret line="19" column="26" lean-forward="false" selection-start-line="19" selection-start-column="26" selection-end-line="19" selection-end-column="26" />
-          <folding />
+        <state relative-caret-position="196">
+          <caret line="35" column="11" lean-forward="false" selection-start-line="35" selection-start-column="11" selection-end-line="35" selection-end-column="11" />
+          <folding>
+            <element signature="imports" expanded="true" />
+            <element signature="e#1359#1360#0" expanded="true" />
+            <element signature="e#1393#1394#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/application/Application.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/LuaModuleConfigurationEditorProvider.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-442">
-          <caret line="18" column="17" lean-forward="false" selection-start-line="18" selection-start-column="17" selection-end-line="18" selection-end-column="17" />
+        <state relative-caret-position="150">
+          <caret line="30" column="13" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="42" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/ui/components/JBList.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfigurationProducer.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="124">
-          <caret line="102" column="15" lean-forward="false" selection-start-line="102" selection-start-column="15" selection-end-line="102" selection-end-column="15" />
+        <state relative-caret-position="60">
+          <caret line="8" column="6" lean-forward="false" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/icons/XMakeIcons.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/HWDEnvVarConfigurable.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="195">
-          <caret line="13" column="48" lean-forward="false" selection-start-line="13" selection-start-column="48" selection-end-line="13" selection-end-column="48" />
+        <state relative-caret-position="120">
+          <caret line="28" column="13" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="76" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/actions/BuildAction.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfigurationEditor.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="495">
-          <caret line="33" column="1" lean-forward="false" selection-start-line="33" selection-start-column="1" selection-end-line="33" selection-end-column="1" />
-          <folding>
-            <element signature="e#33#379#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="157">
+          <caret line="36" column="39" lean-forward="false" selection-start-line="36" selection-start-column="39" selection-end-line="36" selection-end-column="39" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowFactory.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleBuilderConfigurable.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="515">
-          <caret line="45" column="47" lean-forward="false" selection-start-line="45" selection-start-column="47" selection-end-line="45" selection-end-column="47" />
-          <folding>
-            <element signature="e#33#350#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="120">
+          <caret line="8" column="26" lean-forward="false" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="26" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/shared/XMakeProblem.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSdkType.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="30">
-          <caret line="2" column="124" lean-forward="false" selection-start-line="2" selection-start-column="119" selection-end-line="2" selection-end-column="124" />
+        <state relative-caret-position="516">
+          <caret line="63" column="34" lean-forward="false" selection-start-line="63" selection-start-column="34" selection-end-line="64" selection-end-column="66" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/shared/XMakeConfiguration.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleType.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="255">
-          <caret line="24" column="16" lean-forward="true" selection-start-line="24" selection-start-column="16" selection-end-line="24" selection-end-column="16" />
-          <folding />
+        <state relative-caret-position="585">
+          <caret line="39" column="5" lean-forward="false" selection-start-line="30" selection-start-column="0" selection-end-line="39" selection-end-column="5" />
+          <folding>
+            <element signature="e#33#255#0" expanded="false" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/psi/PsiFile.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/idea.jar!/com/intellij/ide/util/projectWizard/SdkSettingsStep.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="133">
-          <caret line="15" column="10" lean-forward="true" selection-start-line="15" selection-start-column="10" selection-end-line="15" selection-end-column="10" />
+        <state relative-caret-position="128">
+          <caret line="50" column="76" lean-forward="false" selection-start-line="50" selection-start-column="63" selection-end-line="50" selection-end-column="76" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/VirtualFile.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeSdkSettingsStep.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-3594">
-          <caret line="26" column="22" lean-forward="false" selection-start-line="26" selection-start-column="22" selection-end-line="26" selection-end-column="22" />
-          <folding />
+        <state relative-caret-position="75">
+          <caret line="5" column="39" lean-forward="false" selection-start-line="5" selection-start-column="39" selection-end-line="5" selection-end-column="39" />
+          <folding>
+            <element signature="e#33#244#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/FileUtils.java">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/ide/util/projectWizard/SourcePathsBuilder.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="390">
-          <caret line="60" column="0" lean-forward="true" selection-start-line="0" selection-start-column="0" selection-end-line="236" selection-end-column="0" />
+        <state relative-caret-position="90">
+          <caret line="12" column="17" lean-forward="false" selection-start-line="12" selection-start-column="17" selection-end-line="12" selection-end-column="17" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeProjectTasksRunner.kt">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/roots/ContentEntry.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="165">
-          <caret line="11" column="25" lean-forward="true" selection-start-line="11" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
+        <state relative-caret-position="144">
+          <caret line="44" column="17" lean-forward="false" selection-start-line="44" selection-start-column="17" selection-end-line="44" selection-end-column="17" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/VirtualFileManager.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/roots/ModifiableRootModel.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="133">
-          <caret line="48" column="32" lean-forward="false" selection-start-line="48" selection-start-column="32" selection-end-line="48" selection-end-column="32" />
+        <state relative-caret-position="346">
+          <caret line="62" column="9" lean-forward="false" selection-start-line="62" selection-start-column="9" selection-end-line="62" selection-end-column="9" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/FileUtils.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowOutputPanel.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="90">
-          <caret line="25" column="32" lean-forward="false" selection-start-line="25" selection-start-column="32" selection-end-line="25" selection-end-column="32" />
+        <state relative-caret-position="284">
+          <caret line="42" column="0" lean-forward="false" selection-start-line="42" selection-start-column="0" selection-end-line="42" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/VirtualFileSystem.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleConfigurationEditorProvider.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="149">
-          <caret line="22" column="32" lean-forward="false" selection-start-line="22" selection-start-column="32" selection-end-line="22" selection-end-column="32" />
-          <folding />
+        <state relative-caret-position="120">
+          <caret line="8" column="6" lean-forward="false" selection-start-line="8" selection-start-column="6" selection-end-line="8" selection-end-column="6" />
+          <folding>
+            <element signature="e#33#391#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/vfs/LocalFileSystem.class">
+    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/ide/util/projectWizard/ModuleBuilder.class">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-345">
-          <caret line="31" column="48" lean-forward="false" selection-start-line="31" selection-start-column="32" selection-end-line="31" selection-end-column="48" />
+        <state relative-caret-position="196">
+          <caret line="120" column="19" lean-forward="false" selection-start-line="120" selection-start-column="13" selection-end-line="120" selection-end-column="19" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/ConsoleProcessHandler.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeProjectConfigurable.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="480">
-          <caret line="32" column="0" lean-forward="false" selection-start-line="32" selection-start-column="0" selection-end-line="32" selection-end-column="0" />
+        <state relative-caret-position="214">
+          <caret line="205" column="35" lean-forward="false" selection-start-line="205" selection-start-column="23" selection-end-line="205" selection-end-column="35" />
           <folding>
-            <element signature="e#31#379#0" expanded="true" />
+            <element signature="e#33#1481#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/kotlin-runtime.jar!/kotlin/kotlin.kotlin_builtins">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeModuleBuilder.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-2241">
-          <caret line="567" column="74" lean-forward="false" selection-start-line="567" selection-start-column="72" selection-end-line="567" selection-end-column="74" />
-          <folding />
+        <state relative-caret-position="292">
+          <caret line="42" column="40" lean-forward="false" selection-start-line="42" selection-start-column="40" selection-end-line="42" selection-end-column="40" />
+          <folding>
+            <element signature="e#33#418#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/fileEditor/OpenFileDescriptor.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeRunConfiguration.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="124">
-          <caret line="207" column="18" lean-forward="false" selection-start-line="207" selection-start-column="8" selection-end-line="207" selection-end-column="18" />
+        <state relative-caret-position="453">
+          <caret line="82" column="14" lean-forward="true" selection-start-line="82" selection-start-column="14" selection-end-line="82" selection-end-column="14" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/editor/markup/MarkupModel.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/ConsoleProcessHandler.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="210">
-          <caret line="20" column="21" lean-forward="false" selection-start-line="20" selection-start-column="21" selection-end-line="20" selection-end-column="21" />
+        <state relative-caret-position="60">
+          <caret line="11" column="121" lean-forward="false" selection-start-line="11" selection-start-column="121" selection-end-line="11" selection-end-column="121" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="jar://$APPLICATION_HOME_DIR$/lib/openapi.jar!/com/intellij/openapi/editor/markup/TextAttributes.class">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/SystemUtils.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="205">
-          <caret line="60" column="11" lean-forward="false" selection-start-line="60" selection-start-column="11" selection-end-line="60" selection-end-column="11" />
-          <folding>
-            <element signature="e#1892#1893#0" expanded="true" />
-            <element signature="e#1942#1943#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="24">
+          <caret line="214" column="153" lean-forward="true" selection-start-line="214" selection-start-column="153" selection-end-line="214" selection-end-column="153" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/resources/META-INF/plugin.xml">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/run/XMakeProjectTasksRunner.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="195">
-          <caret line="13" column="12" lean-forward="true" selection-start-line="13" selection-start-column="12" selection-end-line="13" selection-end-column="12" />
-          <folding />
+        <state relative-caret-position="144">
+          <caret line="19" column="0" lean-forward="false" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
+          <folding>
+            <element signature="e#29#531#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowProblemPanel.kt">
+    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/project/XMakeToolWindowFactory.kt">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1558">
-          <caret line="118" column="71" lean-forward="false" selection-start-line="118" selection-start-column="71" selection-end-line="118" selection-end-column="71" />
-          <folding>
-            <element signature="e#33#1348#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="202">
+          <caret line="42" column="0" lean-forward="false" selection-start-line="42" selection-start-column="0" selection-end-line="42" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/org/tboox/xmake/utils/SystemUtils.kt">
+    <entry file="file://$PROJECT_DIR$/resources/META-INF/plugin.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="62">
-          <caret line="127" column="5" lean-forward="true" selection-start-line="127" selection-start-column="5" selection-end-line="127" selection-end-column="5" />
-          <folding>
-            <element signature="e#31#852#0" expanded="true" />
-          </folding>
+        <state relative-caret-position="120">
+          <caret line="8" column="55" lean-forward="true" selection-start-line="8" selection-start-column="55" selection-end-line="8" selection-end-column="55" />
+          <folding />
         </state>
       </provider>
     </entry>

+ 5 - 0
README.md

@@ -40,6 +40,7 @@ Please see [xmake-github](https://github.com/tboox/xmake) and [website](http://x
 ## Features
 
 * Quickstart
+* Create project
 * Project configuration
 * Run configuration
 * Menu tools
@@ -65,6 +66,10 @@ Please see [xmake-github](https://github.com/tboox/xmake) and [website](http://x
 
 <img src="https://raw.githubusercontent.com/tboox/xmake-idea/master/res/output_panel.png" width="100%" />
  
+## Create project
+
+<img src="https://raw.githubusercontent.com/tboox/xmake-idea/master/res/create_project.png" width="100%" />
+
 ## Project configuration
 
 <img src="https://raw.githubusercontent.com/tboox/xmake-idea/master/res/project_configuration.png" width="100%" />

二进制
res/create_project.png


+ 10 - 1
resources/META-INF/plugin.xml

@@ -2,7 +2,7 @@
 <idea-plugin>
   <id>org.tboox.xmake</id>
   <name>XMake</name>
-  <version>1.0.1</version>
+  <version>1.0.2</version>
   <vendor email="[email protected]" url="http://www.tboox.org">tboox.org</vendor>
 
   <description><![CDATA[
@@ -29,6 +29,10 @@
     ]]></description>
 
   <change-notes><![CDATA[
+    <strong>1.0.2</strong>
+    <ul>
+        <li>[NEW]: Create project (c/c++/rust/go/dlang/swift/objc)</li>
+    </ul>
     <strong>1.0.1</strong>
     <ul>
         <li>[NEW]: Quickstart</li>
@@ -56,6 +60,11 @@
     <!-- icons -->
     <iconProvider implementation="org.tboox.xmake.icons.XMakeIconProvider"/>
 
+    <!-- module configurations -->
+    <sdkType implementation="org.tboox.xmake.project.XMakeSdkType"/>
+    <moduleType id="XMake.Module" implementationClass="org.tboox.xmake.project.XMakeModuleType"/>
+    <!--<moduleConfigurationEditorProvider implementation="org.tboox.xmake.project.XMakeModuleConfigurationEditorProvider"/>-->
+
     <!-- project configurations -->
     <projectConfigurable instance="org.tboox.xmake.project.XMakeProjectConfigurable" displayName="XMake" groupId="language"/>
     <toolWindow id="XMake" anchor="bottom" factoryClass="org.tboox.xmake.project.XMakeToolWindowFactory" icon="/icons/xmake_13x13.png"/>

+ 76 - 0
src/org/tboox/xmake/project/XMakeModuleBuilder.kt

@@ -0,0 +1,76 @@
+package org.tboox.xmake.project
+
+import com.intellij.ide.util.projectWizard.*
+import com.intellij.openapi.diagnostic.Logger
+import com.intellij.openapi.module.ModuleType
+import com.intellij.openapi.roots.ModifiableRootModel
+import com.intellij.openapi.util.io.FileUtil
+import com.intellij.openapi.vfs.LocalFileSystem
+import org.tboox.xmake.utils.SystemUtils
+
+import javax.swing.DefaultComboBoxModel
+import java.io.File
+
+class XMakeModuleBuilder : ModuleBuilder() {
+
+    // the module kinds
+    val kindsModel = DefaultComboBoxModel<String>().apply {
+        addElement("Console")
+        addElement("Static Library")
+        addElement("Shared Library")
+    }
+
+    // the module languages
+    val languagesModel = DefaultComboBoxModel<String>().apply {
+        addElement("C")
+        addElement("C++")
+        addElement("Rust")
+        addElement("Dlang")
+        addElement("Go")
+        addElement("Swift")
+        addElement("Objc")
+        addElement("Objc++")
+    }
+
+    // get language
+    val language : String
+        get() = languagesModel.selectedItem.toString().toLowerCase()
+
+    // get template
+    val template : String
+        get() = when (kindsModel.selectedItem.toString()) {
+            "Console" -> "console"
+            "Static Library" -> "static"
+            "Shared Library" -> "shared"
+            else -> "console"
+        }
+
+
+    override fun setupRootModel(rootModel: ModifiableRootModel) {
+
+        // get content entry path
+        val contentEntryPath = contentEntryPath ?: return
+
+        // get content entry
+        val contentEntry = doAddContentEntry(rootModel) ?: return
+
+        // add source root
+        val sourceRoot = LocalFileSystem.getInstance().refreshAndFindFileByPath(FileUtil.toSystemIndependentName(contentEntryPath))!!
+        contentEntry.addSourceFolder(sourceRoot, false)
+
+        // create empty project
+        SystemUtils.Runv(listOf(SystemUtils.xmakeProgram, "create", "-P", contentEntryPath, "-n", name, "-l", language, "-t", template))
+    }
+
+    override fun getModuleType(): ModuleType<*> {
+        return XMakeModuleType.instance
+    }
+
+    override fun modifyProjectTypeStep(settingsStep: SettingsStep): ModuleWizardStep? {
+        return XMakeSdkSettingsStep(settingsStep, this)
+    }
+
+    companion object {
+        private val Log = Logger.getInstance(XMakeModuleBuilder::class.java.getName())
+    }
+}

+ 26 - 0
src/org/tboox/xmake/project/XMakeModuleConfigurationEditorProvider.kt

@@ -0,0 +1,26 @@
+package org.tboox.xmake.project
+
+import com.intellij.openapi.diagnostic.Logger
+import com.intellij.openapi.module.ModuleConfigurationEditor
+import com.intellij.openapi.roots.ui.configuration.DefaultModuleConfigurationEditorFactory
+import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationEditorProvider
+import com.intellij.openapi.roots.ui.configuration.ModuleConfigurationState
+
+class XMakeModuleConfigurationEditorProvider : ModuleConfigurationEditorProvider {
+
+    override fun createEditors(moduleConfigurationState: ModuleConfigurationState): Array<ModuleConfigurationEditor> {
+
+        var editors = arrayOf<ModuleConfigurationEditor>()
+        val factory = DefaultModuleConfigurationEditorFactory.getInstance()
+
+        /*
+        editors += factory.createModuleContentRootsEditor(moduleConfigurationState)
+        editors += factory.createClasspathEditor(moduleConfigurationState)
+        */
+        return editors
+    }
+
+    companion object {
+        private val Log = Logger.getInstance(XMakeModuleConfigurationEditorProvider::class.java.getName())
+    }
+}

+ 41 - 0
src/org/tboox/xmake/project/XMakeModuleType.kt

@@ -0,0 +1,41 @@
+package org.tboox.xmake.project
+
+import com.intellij.openapi.module.ModuleType
+import com.intellij.openapi.module.ModuleTypeManager
+import org.jetbrains.jps.model.module.JpsModuleSourceRootType
+import org.tboox.xmake.icons.XMakeIcons
+
+import javax.swing.*
+
+class XMakeModuleType : ModuleType<XMakeModuleBuilder>(MODULE_TYPE) {
+
+    override fun createModuleBuilder(): XMakeModuleBuilder {
+        return XMakeModuleBuilder()
+    }
+
+    override fun getName(): String {
+        return "XMake"
+    }
+
+    override fun getDescription(): String {
+        return "XMake Module"
+    }
+
+    override fun getNodeIcon(b: Boolean): Icon {
+        return XMakeIcons.XMAKE
+    }
+
+    override fun isMarkInnerSupportedFor(type: JpsModuleSourceRootType<*>?): Boolean {
+        return true
+    }
+
+    companion object {
+
+        // the module type name
+        private val MODULE_TYPE = "XMake.Module"
+
+        // the instance
+        val instance: XMakeModuleType
+            get() = ModuleTypeManager.getInstance().findByID(MODULE_TYPE) as XMakeModuleType
+    }
+}

+ 32 - 32
src/org/tboox/xmake/project/XMakeProjectConfigurable.kt

@@ -45,16 +45,16 @@ class XMakeProjectConfigurable(
     val xmakeConfiguration = project.xmakeConfiguration
 
     // the platforms ui
-    private val platformsModels = DefaultComboBoxModel<String>()
-    private val platformsComboBox = ComboBox<String>(platformsModels)
+    private val platformsModel = DefaultComboBoxModel<String>()
+    private val platformsComboBox = ComboBox<String>(platformsModel)
 
     // the architectures ui
-    private val architecturesModels = DefaultComboBoxModel<String>()
-    private val architecturesComboBox = ComboBox<String>(architecturesModels)
+    private val architecturesModel = DefaultComboBoxModel<String>()
+    private val architecturesComboBox = ComboBox<String>(architecturesModel)
 
     // the modes ui
-    private val modesModels = DefaultComboBoxModel<String>()
-    private val modesComboBox = ComboBox<String>(modesModels)
+    private val modesModel = DefaultComboBoxModel<String>()
+    private val modesComboBox = ComboBox<String>(modesModel)
 
     // the additional configuration
     private val additionalConfiguration = RawCommandLineEditor()
@@ -140,11 +140,11 @@ class XMakeProjectConfigurable(
         }
         configurationCommandText.setEditable(false)
 
-        platformsModels.addListDataListener(object: ListDataListener {
+        platformsModel.addListDataListener(object: ListDataListener {
             override fun contentsChanged(e: ListDataEvent) {
-                architecturesModels.removeAllElements()
-                for (architecture in XMakeConfiguration.getArchitecturesByPlatform(platformsModels.selectedItem.toString())) {
-                    architecturesModels.addElement(architecture)
+                architecturesModel.removeAllElements()
+                for (architecture in XMakeConfiguration.getArchitecturesByPlatform(platformsModel.selectedItem.toString())) {
+                    architecturesModel.addElement(architecture)
                 }
                 configurationCommandText.text = previewConfigurationCommand
             }
@@ -154,7 +154,7 @@ class XMakeProjectConfigurable(
             }
         })
 
-        architecturesModels.addListDataListener(object: ListDataListener {
+        architecturesModel.addListDataListener(object: ListDataListener {
             override fun contentsChanged(e: ListDataEvent) {
                 configurationCommandText.text = previewConfigurationCommand
             }
@@ -164,7 +164,7 @@ class XMakeProjectConfigurable(
             }
         })
 
-        modesModels.addListDataListener(object: ListDataListener {
+        modesModel.addListDataListener(object: ListDataListener {
             override fun contentsChanged(e: ListDataEvent) {
                 configurationCommandText.text = previewConfigurationCommand
             }
@@ -199,25 +199,25 @@ class XMakeProjectConfigurable(
     override fun reset() {
 
         // reset platforms
-        platformsModels.removeAllElements()
+        platformsModel.removeAllElements()
         for (platform in xmakeConfiguration.platforms) {
-            platformsModels.addElement(platform)
+            platformsModel.addElement(platform)
         }
-        platformsModels.selectedItem = xmakeConfiguration.data.currentPlatform
+        platformsModel.selectedItem = xmakeConfiguration.data.currentPlatform
 
         // reset architectures
-        architecturesModels.removeAllElements()
+        architecturesModel.removeAllElements()
         for (architecture in xmakeConfiguration.architectures) {
-            architecturesModels.addElement(architecture)
+            architecturesModel.addElement(architecture)
         }
-        architecturesModels.selectedItem = xmakeConfiguration.data.currentArchitecture
+        architecturesModel.selectedItem = xmakeConfiguration.data.currentArchitecture
 
         // reset modes
-        modesModels.removeAllElements()
+        modesModel.removeAllElements()
         for (mode in xmakeConfiguration.modes) {
-            modesModels.addElement(mode)
+            modesModel.addElement(mode)
         }
-        modesModels.selectedItem = xmakeConfiguration.data.currentMode
+        modesModel.selectedItem = xmakeConfiguration.data.currentMode
 
         // reset additional configuration
         additionalConfiguration.text = xmakeConfiguration.data.additionalConfiguration
@@ -241,9 +241,9 @@ class XMakeProjectConfigurable(
     @Throws(ConfigurationException::class)
     override fun apply() {
 
-        xmakeConfiguration.data.currentPlatform         = platformsModels.selectedItem.toString()
-        xmakeConfiguration.data.currentArchitecture     = architecturesModels.selectedItem.toString()
-        xmakeConfiguration.data.currentMode             = modesModels.selectedItem.toString()
+        xmakeConfiguration.data.currentPlatform         = platformsModel.selectedItem.toString()
+        xmakeConfiguration.data.currentArchitecture     = architecturesModel.selectedItem.toString()
+        xmakeConfiguration.data.currentMode             = modesModel.selectedItem.toString()
         xmakeConfiguration.data.additionalConfiguration = additionalConfiguration.text
         xmakeConfiguration.data.workingDirectory        = workingDirectory.component.text
         xmakeConfiguration.data.buildOutputDirectory    = buildOutputDirectory.component.text
@@ -253,9 +253,9 @@ class XMakeProjectConfigurable(
 
     override fun isModified(): Boolean {
 
-        if (xmakeConfiguration.data.currentPlatform != platformsModels.selectedItem.toString() ||
-            xmakeConfiguration.data.currentArchitecture != architecturesModels.selectedItem.toString() ||
-            xmakeConfiguration.data.currentMode != modesModels.selectedItem.toString() ||
+        if (xmakeConfiguration.data.currentPlatform != platformsModel.selectedItem.toString() ||
+            xmakeConfiguration.data.currentArchitecture != architecturesModel.selectedItem.toString() ||
+            xmakeConfiguration.data.currentMode != modesModel.selectedItem.toString() ||
             xmakeConfiguration.data.additionalConfiguration != additionalConfiguration.text ||
             xmakeConfiguration.data.workingDirectory != workingDirectory.component.text ||
             xmakeConfiguration.data.buildOutputDirectory != buildOutputDirectory.component.text ||
@@ -283,15 +283,15 @@ class XMakeProjectConfigurable(
     private val previewConfigurationCommand: String
         get() {
             var cmd = "xmake f"
-            var platformItem = platformsModels.selectedItem
+            var platformItem = platformsModel.selectedItem
             if (platformItem != null) {
                 cmd += " -p ${platformItem.toString()}"
             }
-            if (architecturesModels.selectedItem != null) {
-                cmd += " -a ${architecturesModels.selectedItem?.toString()}"
+            if (architecturesModel.selectedItem != null) {
+                cmd += " -a ${architecturesModel.selectedItem?.toString()}"
             }
-            if (modesModels.selectedItem != null) {
-                cmd += " -m ${modesModels.selectedItem?.toString()}"
+            if (modesModel.selectedItem != null) {
+                cmd += " -m ${modesModel.selectedItem?.toString()}"
             }
             if (platformItem?.toString() == "android" && androidNDKDirectory.component.text != "") {
                 cmd += " --ndk=\"${androidNDKDirectory.component.text}\""

+ 24 - 0
src/org/tboox/xmake/project/XMakeSdkSettingsStep.kt

@@ -0,0 +1,24 @@
+package org.tboox.xmake.project
+
+import com.intellij.ide.util.projectWizard.ModuleBuilder
+import com.intellij.ide.util.projectWizard.SettingsStep
+import com.intellij.ide.util.projectWizard.SdkSettingsStep
+import com.intellij.openapi.ui.ComboBox
+
+class XMakeSdkSettingsStep(settingsStep: SettingsStep, moduleBuilder: ModuleBuilder) : SdkSettingsStep(settingsStep, moduleBuilder, { sdkTypeId -> XMakeSdkType.instance === sdkTypeId }) {
+
+    // the module kinds
+    private val kindsComboBox = ComboBox<String>((moduleBuilder as XMakeModuleBuilder).kindsModel)
+
+    // the module languages
+    private val languagesComboBox = ComboBox<String>((moduleBuilder as XMakeModuleBuilder).languagesModel)
+
+    init {
+        settingsStep.addSettingsField("Module Language", languagesComboBox)
+        settingsStep.addSettingsField("Module Type", kindsComboBox)
+    }
+
+    override fun updateDataModel() {
+        super.updateDataModel()
+    }
+}

+ 67 - 0
src/org/tboox/xmake/project/XMakeSdkType.kt

@@ -0,0 +1,67 @@
+package org.tboox.xmake.project
+
+import com.intellij.openapi.application.PathManager
+import com.intellij.openapi.diagnostic.Logger
+import com.intellij.openapi.projectRoots.SdkType
+import com.intellij.openapi.projectRoots.SdkAdditionalData
+import com.intellij.openapi.projectRoots.SdkModificator
+import com.intellij.openapi.projectRoots.SdkModel
+import com.intellij.openapi.projectRoots.AdditionalDataConfigurable
+import com.intellij.openapi.projectRoots.Sdk
+import org.tboox.xmake.icons.XMakeIcons
+import org.jdom.Element
+import org.tboox.xmake.utils.SystemUtils
+import java.io.File
+import javax.swing.Icon
+
+class XMakeSdkType : SdkType("XMake SDK") {
+
+    override fun suggestHomePath(): String? {
+        val program = SystemUtils.xmakeProgram
+        if (program == "") {
+            return null
+        }
+        return program
+    }
+
+    override fun isValidSdkHome(s: String): Boolean {
+        return true
+    }
+
+    override fun suggestSdkName(currentSdkName: String?, sdkHome: String): String {
+        return "XMake"
+    }
+
+    override fun getVersionString(sdk: Sdk): String? {
+        return SystemUtils.xmakeVersion
+    }
+
+    override fun createAdditionalDataConfigurable(sdkModel: SdkModel, sdkModificator: SdkModificator): AdditionalDataConfigurable? {
+        return null
+    }
+
+    override fun getPresentableName(): String {
+        return "XMake SDK"
+    }
+
+    override fun saveAdditionalData(sdkAdditionalData: SdkAdditionalData, element: Element) {
+    }
+
+    override fun getIcon(): Icon {
+        return XMakeIcons.FILE
+    }
+
+    override fun getIconForAddAction(): Icon {
+        return XMakeIcons.FILE
+    }
+
+    companion object {
+
+        // the log
+        private val Log = Logger.getInstance(XMakeSdkType::class.java.getName())
+
+        // the instance
+        val instance: XMakeSdkType
+            get() = SdkType.findInstance(XMakeSdkType::class.java)
+    }
+}

+ 2 - 2
src/org/tboox/xmake/run/XMakeRunConfiguration.kt

@@ -78,12 +78,12 @@ class XMakeRunConfiguration(project: Project, name: String, factory: Configurati
         if (xmakeConfiguration.changed) {
             SystemUtils.runvInConsole(project, xmakeConfiguration.configurationCommandLine).addProcessListener(object: ProcessAdapter() {
                 override fun processTerminated(e: ProcessEvent) {
-                    SystemUtils.runvInConsole(project, runCommandLine, false, true)
+                    SystemUtils.runvInConsole(project, runCommandLine, false, true, true)
                 }
             })
             xmakeConfiguration.changed = false
         } else {
-            SystemUtils.runvInConsole(project, runCommandLine, true, true)
+            SystemUtils.runvInConsole(project, runCommandLine, true, true, true)
         }
 
         // does not use builtin run console panel

+ 6 - 6
src/org/tboox/xmake/run/XMakeRunConfigurationEditor.kt

@@ -30,8 +30,8 @@ class XMakeRunConfigurationEditor(private val project: Project) : SettingsEditor
     val xmakeConfiguration = project.xmakeConfiguration
 
     // the targets ui
-    private val targetsModels = DefaultComboBoxModel<String>()
-    private val targetsComboBox = ComboBox<String>(targetsModels)
+    private val targetsModel = DefaultComboBoxModel<String>()
+    private val targetsComboBox = ComboBox<String>(targetsModel)
 
     // the run arguments
     private val runArguments = RawCommandLineEditor()
@@ -43,11 +43,11 @@ class XMakeRunConfigurationEditor(private val project: Project) : SettingsEditor
     override fun resetEditorFrom(configuration: XMakeRunConfiguration) {
 
         // reset targets
-        targetsModels.removeAllElements()
+        targetsModel.removeAllElements()
         for (target in xmakeConfiguration.targets) {
-            targetsModels.addElement(target)
+            targetsModel.addElement(target)
         }
-        targetsModels.selectedItem = configuration.runTarget
+        targetsModel.selectedItem = configuration.runTarget
 
         // reset run arguments
         runArguments.text = configuration.runArguments
@@ -59,7 +59,7 @@ class XMakeRunConfigurationEditor(private val project: Project) : SettingsEditor
     // apply editor to configuration
     override fun applyEditorTo(configuration: XMakeRunConfiguration) {
 
-        configuration.runTarget         = targetsModels.selectedItem.toString()
+        configuration.runTarget         = targetsModel.selectedItem.toString()
         configuration.runArguments      = runArguments.text
         configuration.runEnvironment    = environmentVariables.envData
     }

+ 4 - 2
src/org/tboox/xmake/utils/ConsoleProcessHandler.kt

@@ -9,7 +9,7 @@ import com.intellij.execution.configurations.GeneralCommandLine
 import java.io.IOException
 import java.io.OutputStreamWriter
 
-class ConsoleProcessHandler(private val consoleView: ConsoleView, commandLine: GeneralCommandLine) : KillableColoredProcessHandler(commandLine) {
+class ConsoleProcessHandler(private val consoleView: ConsoleView, commandLine: GeneralCommandLine, showExitCode: Boolean = false) : KillableColoredProcessHandler(commandLine) {
 
     // the output content
     var outputContent = ""
@@ -25,7 +25,9 @@ class ConsoleProcessHandler(private val consoleView: ConsoleView, commandLine: G
         })
         
         // shows exit code upon termination
-        ProcessTerminatedListener.attach(this)
+        if (showExitCode) {
+            ProcessTerminatedListener.attach(this)
+        }
     }
 
     // append info to the console view

+ 52 - 4
src/org/tboox/xmake/utils/SystemUtils.kt

@@ -72,6 +72,20 @@ object SystemUtils {
         }
         set(value) { _xmakeProgram = value }
 
+    // the xmake version
+    private var _xmakeVersion:String = ""
+    var xmakeVersion:String
+        get() {
+            if (_xmakeVersion == "") {
+                val result = ioRunv(listOf(xmakeProgram, "--version")).split(',')
+                if (result.size > 0) {
+                    _xmakeVersion = result[0]
+                }
+            }
+            return _xmakeVersion
+        }
+        set(value) { _xmakeVersion = value }
+
     // get platform
     fun platform(): String = when {
         SystemInfo.isWindows -> "windows"
@@ -79,8 +93,37 @@ object SystemUtils {
         else -> "linux"
     }
 
+    // run command with arguments
+    fun Runv(argv: List<String>, workingDirectory: String? = null): Int {
+
+        var code = -1
+        try {
+
+            // init process builder
+            val processBuilder = ProcessBuilder(argv)
+
+            // init working directory
+            if (workingDirectory !== null) {
+                processBuilder.directory(File(workingDirectory))
+            }
+
+            // run process
+            val process = processBuilder.start()
+
+            // wait for process
+            code = process.waitFor()
+
+        } catch (e: IOException) {
+            e.printStackTrace()
+        } finally {
+        }
+
+        // ok?
+        return code
+    }
+
     // run command with arguments and return output
-    fun ioRunv(argv: List<String>, workingDirectory: String): String {
+    fun ioRunv(argv: List<String>, workingDirectory: String? = null): String {
 
         var result = ""
         var bufferReader: BufferedReader? = null
@@ -90,7 +133,12 @@ object SystemUtils {
             val processBuilder = ProcessBuilder(argv)
 
             // init working directory
-            processBuilder.directory(File(workingDirectory))
+            if (workingDirectory !== null) {
+                processBuilder.directory(File(workingDirectory))
+            }
+
+            // disable color for xmake
+            processBuilder.environment().put("COLORTERM", "nocolor")
 
             // run process
             val process = processBuilder.start()
@@ -164,10 +212,10 @@ object SystemUtils {
     }
 
     // run process in console
-    fun runvInConsole(project: Project, commandLine: GeneralCommandLine, showConsole: Boolean = true, showProblem: Boolean = false): ProcessHandler {
+    fun runvInConsole(project: Project, commandLine: GeneralCommandLine, showConsole: Boolean = true, showProblem: Boolean = false, showExitCode: Boolean = false): ProcessHandler {
 
         // create handler
-        val handler = ConsoleProcessHandler(project.xmakeConsoleView, commandLine)
+        val handler = ConsoleProcessHandler(project.xmakeConsoleView, commandLine, showExitCode)
 
         // show console?
         if (showConsole) {