Kotlin Facet: Add compiler settings to facet configuration
This commit is contained in:
+35
-1
@@ -20,6 +20,7 @@ import com.intellij.util.SmartList;
|
|||||||
import com.sampullara.cli.Argument;
|
import com.sampullara.cli.Argument;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class CommonCompilerArguments {
|
public abstract class CommonCompilerArguments {
|
||||||
@@ -72,11 +73,44 @@ public abstract class CommonCompilerArguments {
|
|||||||
|
|
||||||
public List<String> unknownExtraFlags = new SmartList<String>();
|
public List<String> unknownExtraFlags = new SmartList<String>();
|
||||||
|
|
||||||
|
public CommonCompilerArguments() {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected CommonCompilerArguments(CommonCompilerArguments arguments) {
|
||||||
|
this.languageVersion = arguments.languageVersion;
|
||||||
|
this.apiVersion = arguments.apiVersion;
|
||||||
|
this.suppressWarnings = arguments.suppressWarnings;
|
||||||
|
this.verbose = arguments.verbose;
|
||||||
|
this.version = arguments.version;
|
||||||
|
this.help = arguments.help;
|
||||||
|
this.extraHelp = arguments.extraHelp;
|
||||||
|
this.noInline = arguments.noInline;
|
||||||
|
this.repeat = arguments.repeat;
|
||||||
|
this.pluginClasspaths = arguments.pluginClasspaths != null ? Arrays.copyOf(arguments.pluginClasspaths, arguments.pluginClasspaths.length) : null;
|
||||||
|
this.pluginOptions = arguments.pluginOptions != null ? Arrays.copyOf(arguments.pluginOptions, arguments.pluginOptions.length) : null;
|
||||||
|
this.freeArgs.addAll(arguments.freeArgs);
|
||||||
|
this.unknownExtraFlags.addAll(arguments.unknownExtraFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract CommonCompilerArguments copy();
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public String executableScriptFileName() {
|
public String executableScriptFileName() {
|
||||||
return "kotlinc";
|
return "kotlinc";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used only for serialize and deserialize settings. Don't use in other places!
|
// Used only for serialize and deserialize settings. Don't use in other places!
|
||||||
public static final class DummyImpl extends CommonCompilerArguments {}
|
public static final class DummyImpl extends CommonCompilerArguments {
|
||||||
|
public DummyImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public DummyImpl(DummyImpl arguments) {
|
||||||
|
super(arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonCompilerArguments copy() {
|
||||||
|
return new DummyImpl(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+25
@@ -20,6 +20,8 @@ import com.sampullara.cli.Argument;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants.CALL;
|
import static org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants.CALL;
|
||||||
import static org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants.NO_CALL;
|
import static org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants.NO_CALL;
|
||||||
|
|
||||||
@@ -73,6 +75,29 @@ public class K2JSCompilerArguments extends CommonCompilerArguments {
|
|||||||
@ValueDescription("<path>")
|
@ValueDescription("<path>")
|
||||||
public String outputPostfix;
|
public String outputPostfix;
|
||||||
|
|
||||||
|
public K2JSCompilerArguments() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private K2JSCompilerArguments(K2JSCompilerArguments arguments) {
|
||||||
|
super(arguments);
|
||||||
|
this.outputFile = arguments.outputFile;
|
||||||
|
this.noStdlib = arguments.noStdlib;
|
||||||
|
this.libraryFiles = arguments.libraryFiles != null ? Arrays.copyOf(arguments.libraryFiles, arguments.libraryFiles.length) : null;
|
||||||
|
this.sourceMap = arguments.sourceMap;
|
||||||
|
this.metaInfo = arguments.metaInfo;
|
||||||
|
this.kjsm = arguments.kjsm;
|
||||||
|
this.target = arguments.target;
|
||||||
|
this.moduleKind = arguments.moduleKind;
|
||||||
|
this.main = arguments.main;
|
||||||
|
this.outputPrefix = arguments.outputPrefix;
|
||||||
|
this.outputPostfix = arguments.outputPostfix;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public K2JSCompilerArguments copy() {
|
||||||
|
return new K2JSCompilerArguments(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public String executableScriptFileName() {
|
public String executableScriptFileName() {
|
||||||
|
|||||||
+6
@@ -107,6 +107,12 @@ public class K2JVMCompilerArguments extends CommonCompilerArguments {
|
|||||||
// Paths to output directories for friend modules.
|
// Paths to output directories for friend modules.
|
||||||
public String[] friendPaths;
|
public String[] friendPaths;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonCompilerArguments copy() {
|
||||||
|
// No need to copy these arguments yet
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public String executableScriptFileName() {
|
public String executableScriptFileName() {
|
||||||
|
|||||||
@@ -23,6 +23,16 @@ class CompilerSettings {
|
|||||||
var copyJsLibraryFiles: Boolean = true
|
var copyJsLibraryFiles: Boolean = true
|
||||||
var outputDirectoryForJsLibraryFiles: String = DEFAULT_OUTPUT_DIRECTORY
|
var outputDirectoryForJsLibraryFiles: String = DEFAULT_OUTPUT_DIRECTORY
|
||||||
|
|
||||||
|
constructor()
|
||||||
|
|
||||||
|
constructor(settings: CompilerSettings) {
|
||||||
|
additionalArguments = settings.additionalArguments
|
||||||
|
scriptTemplates = settings.scriptTemplates
|
||||||
|
scriptTemplatesClasspath = settings.scriptTemplatesClasspath
|
||||||
|
copyJsLibraryFiles = settings.copyJsLibraryFiles
|
||||||
|
outputDirectoryForJsLibraryFiles = settings.outputDirectoryForJsLibraryFiles
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val DEFAULT_ADDITIONAL_ARGUMENTS = "-version"
|
private val DEFAULT_ADDITIONAL_ARGUMENTS = "-version"
|
||||||
private val DEFAULT_OUTPUT_DIRECTORY = "lib"
|
private val DEFAULT_OUTPUT_DIRECTORY = "lib"
|
||||||
|
|||||||
+2
-2
@@ -92,7 +92,7 @@
|
|||||||
</component>
|
</component>
|
||||||
</children>
|
</children>
|
||||||
</grid>
|
</grid>
|
||||||
<grid id="2f977" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="2f977" binding="k2jvmPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
</component>
|
</component>
|
||||||
</children>
|
</children>
|
||||||
</grid>
|
</grid>
|
||||||
<grid id="98e8a" layout-manager="GridLayoutManager" row-count="6" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
<grid id="98e8a" binding="k2jsPanel" layout-manager="GridLayoutManager" row-count="6" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||||
<margin top="0" left="0" bottom="0" right="0"/>
|
<margin top="0" left="0" bottom="0" right="0"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
||||||
|
|||||||
+47
-14
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants;
|
|||||||
import org.jetbrains.kotlin.config.CompilerSettings;
|
import org.jetbrains.kotlin.config.CompilerSettings;
|
||||||
import org.jetbrains.kotlin.idea.KotlinBundle;
|
import org.jetbrains.kotlin.idea.KotlinBundle;
|
||||||
import org.jetbrains.kotlin.idea.PluginStartupComponent;
|
import org.jetbrains.kotlin.idea.PluginStartupComponent;
|
||||||
|
import org.jetbrains.kotlin.idea.facet.KotlinFacetConfiguration;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.event.ChangeEvent;
|
import javax.swing.event.ChangeEvent;
|
||||||
@@ -50,6 +51,7 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
|
|||||||
private final CommonCompilerArguments commonCompilerArguments;
|
private final CommonCompilerArguments commonCompilerArguments;
|
||||||
private final K2JSCompilerArguments k2jsCompilerArguments;
|
private final K2JSCompilerArguments k2jsCompilerArguments;
|
||||||
private final CompilerSettings compilerSettings;
|
private final CompilerSettings compilerSettings;
|
||||||
|
@Nullable
|
||||||
private final KotlinCompilerWorkspaceSettings compilerWorkspaceSettings;
|
private final KotlinCompilerWorkspaceSettings compilerWorkspaceSettings;
|
||||||
private final Project project;
|
private final Project project;
|
||||||
private JPanel contentPane;
|
private JPanel contentPane;
|
||||||
@@ -71,6 +73,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
|
|||||||
private JTextField scriptTemplatesClasspathField;
|
private JTextField scriptTemplatesClasspathField;
|
||||||
private JLabel scriptTemplatesLabel;
|
private JLabel scriptTemplatesLabel;
|
||||||
private JLabel scriptTemplatesClasspathLabel;
|
private JLabel scriptTemplatesClasspathLabel;
|
||||||
|
private JPanel k2jvmPanel;
|
||||||
|
private JPanel k2jsPanel;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
moduleKindDescriptions.put(K2JsArgumentConstants.MODULE_PLAIN, "Plain (put to global scope)");
|
moduleKindDescriptions.put(K2JsArgumentConstants.MODULE_PLAIN, "Plain (put to global scope)");
|
||||||
@@ -79,12 +83,18 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
|
|||||||
moduleKindDescriptions.put(K2JsArgumentConstants.MODULE_UMD, "UMD (detect AMD or CommonJS if available, fallback to plain)");
|
moduleKindDescriptions.put(K2JsArgumentConstants.MODULE_UMD, "UMD (detect AMD or CommonJS if available, fallback to plain)");
|
||||||
}
|
}
|
||||||
|
|
||||||
public KotlinCompilerConfigurableTab(Project project) {
|
public KotlinCompilerConfigurableTab(
|
||||||
this.commonCompilerArguments = KotlinCommonCompilerArgumentsHolder.getInstance(project).getSettings();
|
Project project,
|
||||||
this.k2jsCompilerArguments = Kotlin2JsCompilerArgumentsHolder.getInstance(project).getSettings();
|
CommonCompilerArguments commonCompilerArguments,
|
||||||
this.compilerSettings = KotlinCompilerSettings.getInstance(project).getSettings();
|
K2JSCompilerArguments k2jsCompilerArguments,
|
||||||
this.compilerWorkspaceSettings = ServiceManager.getService(project, KotlinCompilerWorkspaceSettings.class);
|
CompilerSettings compilerSettings,
|
||||||
|
@Nullable KotlinCompilerWorkspaceSettings compilerWorkspaceSettings
|
||||||
|
) {
|
||||||
this.project = project;
|
this.project = project;
|
||||||
|
this.commonCompilerArguments = commonCompilerArguments;
|
||||||
|
this.k2jsCompilerArguments = k2jsCompilerArguments;
|
||||||
|
this.compilerSettings = compilerSettings;
|
||||||
|
this.compilerWorkspaceSettings = compilerWorkspaceSettings;
|
||||||
|
|
||||||
additionalArgsOptionsField.attachLabel(additionalArgsLabel);
|
additionalArgsOptionsField.attachLabel(additionalArgsLabel);
|
||||||
|
|
||||||
@@ -103,6 +113,24 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
|
|||||||
});
|
});
|
||||||
|
|
||||||
fillModuleKindList();
|
fillModuleKindList();
|
||||||
|
|
||||||
|
if (compilerWorkspaceSettings == null) {
|
||||||
|
keepAliveCheckBox.setVisible(false);
|
||||||
|
k2jvmPanel.setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetPlatform(@Nullable KotlinFacetConfiguration.TargetPlatform targetPlatform) {
|
||||||
|
k2jsPanel.setVisible(targetPlatform == KotlinFacetConfiguration.TargetPlatform.JS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public KotlinCompilerConfigurableTab(Project project) {
|
||||||
|
this(project,
|
||||||
|
KotlinCommonCompilerArgumentsHolder.getInstance(project).getSettings(),
|
||||||
|
Kotlin2JsCompilerArgumentsHolder.getInstance(project).getSettings(),
|
||||||
|
KotlinCompilerSettings.getInstance(project).getSettings(),
|
||||||
|
ServiceManager.getService(project, KotlinCompilerWorkspaceSettings.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@@ -152,8 +180,9 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
|
|||||||
ComparingUtils.isModified(copyRuntimeFilesCheckBox, compilerSettings.getCopyJsLibraryFiles()) ||
|
ComparingUtils.isModified(copyRuntimeFilesCheckBox, compilerSettings.getCopyJsLibraryFiles()) ||
|
||||||
ComparingUtils.isModified(outputDirectory, compilerSettings.getOutputDirectoryForJsLibraryFiles()) ||
|
ComparingUtils.isModified(outputDirectory, compilerSettings.getOutputDirectoryForJsLibraryFiles()) ||
|
||||||
|
|
||||||
ComparingUtils.isModified(enablePreciseIncrementalCheckBox, compilerWorkspaceSettings.getPreciseIncrementalEnabled()) ||
|
(compilerWorkspaceSettings != null &&
|
||||||
ComparingUtils.isModified(keepAliveCheckBox, compilerWorkspaceSettings.getEnableDaemon()) ||
|
(ComparingUtils.isModified(enablePreciseIncrementalCheckBox, compilerWorkspaceSettings.getPreciseIncrementalEnabled()) ||
|
||||||
|
ComparingUtils.isModified(keepAliveCheckBox, compilerWorkspaceSettings.getEnableDaemon()))) ||
|
||||||
|
|
||||||
ComparingUtils.isModified(generateSourceMapsCheckBox, k2jsCompilerArguments.sourceMap) ||
|
ComparingUtils.isModified(generateSourceMapsCheckBox, k2jsCompilerArguments.sourceMap) ||
|
||||||
isModified(outputPrefixFile, k2jsCompilerArguments.outputPrefix) ||
|
isModified(outputPrefixFile, k2jsCompilerArguments.outputPrefix) ||
|
||||||
@@ -175,12 +204,14 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
|
|||||||
compilerSettings.setCopyJsLibraryFiles(copyRuntimeFilesCheckBox.isSelected());
|
compilerSettings.setCopyJsLibraryFiles(copyRuntimeFilesCheckBox.isSelected());
|
||||||
compilerSettings.setOutputDirectoryForJsLibraryFiles(outputDirectory.getText());
|
compilerSettings.setOutputDirectoryForJsLibraryFiles(outputDirectory.getText());
|
||||||
|
|
||||||
compilerWorkspaceSettings.setPreciseIncrementalEnabled(enablePreciseIncrementalCheckBox.isSelected());
|
if (compilerWorkspaceSettings != null) {
|
||||||
|
compilerWorkspaceSettings.setPreciseIncrementalEnabled(enablePreciseIncrementalCheckBox.isSelected());
|
||||||
|
|
||||||
boolean oldEnableDaemon = compilerWorkspaceSettings.getEnableDaemon();
|
boolean oldEnableDaemon = compilerWorkspaceSettings.getEnableDaemon();
|
||||||
compilerWorkspaceSettings.setEnableDaemon(keepAliveCheckBox.isSelected());
|
compilerWorkspaceSettings.setEnableDaemon(keepAliveCheckBox.isSelected());
|
||||||
if (keepAliveCheckBox.isSelected() != oldEnableDaemon) {
|
if (keepAliveCheckBox.isSelected() != oldEnableDaemon) {
|
||||||
PluginStartupComponent.getInstance().resetAliveFlag();
|
PluginStartupComponent.getInstance().resetAliveFlag();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
k2jsCompilerArguments.sourceMap = generateSourceMapsCheckBox.isSelected();
|
k2jsCompilerArguments.sourceMap = generateSourceMapsCheckBox.isSelected();
|
||||||
@@ -208,8 +239,10 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
|
|||||||
copyRuntimeFilesCheckBox.setSelected(compilerSettings.getCopyJsLibraryFiles());
|
copyRuntimeFilesCheckBox.setSelected(compilerSettings.getCopyJsLibraryFiles());
|
||||||
outputDirectory.setText(compilerSettings.getOutputDirectoryForJsLibraryFiles());
|
outputDirectory.setText(compilerSettings.getOutputDirectoryForJsLibraryFiles());
|
||||||
|
|
||||||
enablePreciseIncrementalCheckBox.setSelected(compilerWorkspaceSettings.getPreciseIncrementalEnabled());
|
if (compilerWorkspaceSettings != null) {
|
||||||
keepAliveCheckBox.setSelected(compilerWorkspaceSettings.getEnableDaemon());
|
enablePreciseIncrementalCheckBox.setSelected(compilerWorkspaceSettings.getPreciseIncrementalEnabled());
|
||||||
|
keepAliveCheckBox.setSelected(compilerWorkspaceSettings.getEnableDaemon());
|
||||||
|
}
|
||||||
|
|
||||||
generateSourceMapsCheckBox.setSelected(k2jsCompilerArguments.sourceMap);
|
generateSourceMapsCheckBox.setSelected(k2jsCompilerArguments.sourceMap);
|
||||||
outputPrefixFile.setText(k2jsCompilerArguments.outputPrefix);
|
outputPrefixFile.setText(k2jsCompilerArguments.outputPrefix);
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ import com.intellij.facet.ui.FacetEditorTab
|
|||||||
import com.intellij.facet.ui.FacetValidatorsManager
|
import com.intellij.facet.ui.FacetValidatorsManager
|
||||||
import com.intellij.openapi.components.PersistentStateComponent
|
import com.intellij.openapi.components.PersistentStateComponent
|
||||||
import org.jdom.Element
|
import org.jdom.Element
|
||||||
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
|
import org.jetbrains.kotlin.config.CompilerSettings
|
||||||
import org.jetbrains.kotlin.idea.util.DescriptionAware
|
import org.jetbrains.kotlin.idea.util.DescriptionAware
|
||||||
|
|
||||||
class KotlinFacetConfiguration : FacetConfiguration, PersistentStateComponent<KotlinFacetConfiguration.Settings> {
|
class KotlinFacetConfiguration : FacetConfiguration, PersistentStateComponent<KotlinFacetConfiguration.Settings> {
|
||||||
@@ -42,8 +45,15 @@ class KotlinFacetConfiguration : FacetConfiguration, PersistentStateComponent<Ko
|
|||||||
var targetPlatformKind: TargetPlatform? = null
|
var targetPlatformKind: TargetPlatform? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class CompilerInfo {
|
||||||
|
var commonCompilerArguments: CommonCompilerArguments? = null
|
||||||
|
var k2jsCompilerArguments: K2JSCompilerArguments? = null
|
||||||
|
var compilerSettings: CompilerSettings? = null
|
||||||
|
}
|
||||||
|
|
||||||
class Settings {
|
class Settings {
|
||||||
val versionInfo = VersionInfo()
|
val versionInfo = VersionInfo()
|
||||||
|
val compilerInfo = CompilerInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
private var settings = Settings()
|
private var settings = Settings()
|
||||||
@@ -68,7 +78,11 @@ class KotlinFacetConfiguration : FacetConfiguration, PersistentStateComponent<Ko
|
|||||||
editorContext: FacetEditorContext,
|
editorContext: FacetEditorContext,
|
||||||
validatorsManager: FacetValidatorsManager
|
validatorsManager: FacetValidatorsManager
|
||||||
): Array<FacetEditorTab> {
|
): Array<FacetEditorTab> {
|
||||||
val tabs = arrayListOf<FacetEditorTab>(KotlinFacetEditorTab(this, editorContext, validatorsManager))
|
state.initializeIfNeeded(editorContext.module, editorContext.rootModel)
|
||||||
|
|
||||||
|
val compilerTab = KotlinFacetEditorCompilerTab(state.compilerInfo, editorContext)
|
||||||
|
val generalTab = KotlinFacetEditorGeneralTab(this, editorContext, validatorsManager, compilerTab)
|
||||||
|
val tabs = arrayListOf(generalTab, compilerTab)
|
||||||
KotlinFacetConfigurationExtension.EP_NAME.extensions.flatMapTo(tabs) { it.createEditorTabs(editorContext, validatorsManager) }
|
KotlinFacetConfigurationExtension.EP_NAME.extensions.flatMapTo(tabs) { it.createEditorTabs(editorContext, validatorsManager) }
|
||||||
return tabs.toTypedArray()
|
return tabs.toTypedArray()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2016 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.idea.facet
|
||||||
|
|
||||||
|
import com.intellij.facet.ui.FacetEditorContext
|
||||||
|
import com.intellij.facet.ui.FacetEditorTab
|
||||||
|
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerConfigurableTab
|
||||||
|
|
||||||
|
class KotlinFacetEditorCompilerTab(
|
||||||
|
compilerInfo: KotlinFacetConfiguration.CompilerInfo,
|
||||||
|
editorContext: FacetEditorContext
|
||||||
|
) : FacetEditorTab() {
|
||||||
|
val compilerConfigurable = KotlinCompilerConfigurableTab(
|
||||||
|
editorContext.project,
|
||||||
|
compilerInfo.commonCompilerArguments,
|
||||||
|
compilerInfo.k2jsCompilerArguments,
|
||||||
|
compilerInfo.compilerSettings,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun apply() = compilerConfigurable.apply()
|
||||||
|
|
||||||
|
override fun getDisplayName() = "Compiler"
|
||||||
|
|
||||||
|
override fun createComponent() = compilerConfigurable.createComponent()!!
|
||||||
|
|
||||||
|
override fun disposeUIResources() = compilerConfigurable.disposeUIResources()
|
||||||
|
|
||||||
|
override fun isModified() = compilerConfigurable.isModified
|
||||||
|
|
||||||
|
override fun reset() = compilerConfigurable.reset()
|
||||||
|
}
|
||||||
+12
-5
@@ -25,10 +25,11 @@ import java.awt.BorderLayout
|
|||||||
import java.awt.Component
|
import java.awt.Component
|
||||||
import javax.swing.*
|
import javax.swing.*
|
||||||
|
|
||||||
class KotlinFacetEditorTab(
|
class KotlinFacetEditorGeneralTab(
|
||||||
private val configuration: KotlinFacetConfiguration,
|
private val configuration: KotlinFacetConfiguration,
|
||||||
private val editorContext: FacetEditorContext,
|
private val editorContext: FacetEditorContext,
|
||||||
validatorsManager: FacetValidatorsManager
|
validatorsManager: FacetValidatorsManager,
|
||||||
|
private val compilerTab: KotlinFacetEditorCompilerTab
|
||||||
) : FacetEditorTab() {
|
) : FacetEditorTab() {
|
||||||
class DescriptionListCellRenderer : DefaultListCellRenderer() {
|
class DescriptionListCellRenderer : DefaultListCellRenderer() {
|
||||||
override fun getListCellRendererComponent(list: JList<*>?, value: Any?, index: Int, isSelected: Boolean, cellHasFocus: Boolean): Component {
|
override fun getListCellRendererComponent(list: JList<*>?, value: Any?, index: Int, isSelected: Boolean, cellHasFocus: Boolean): Component {
|
||||||
@@ -51,8 +52,6 @@ class KotlinFacetEditorTab(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private val languageVersionComboBox =
|
private val languageVersionComboBox =
|
||||||
JComboBox<KotlinFacetConfiguration.LanguageLevel>(KotlinFacetConfiguration.LanguageLevel.values()).apply {
|
JComboBox<KotlinFacetConfiguration.LanguageLevel>(KotlinFacetConfiguration.LanguageLevel.values()).apply {
|
||||||
setRenderer(DescriptionListCellRenderer())
|
setRenderer(DescriptionListCellRenderer())
|
||||||
@@ -83,13 +82,18 @@ class KotlinFacetEditorTab(
|
|||||||
|
|
||||||
targetPlatformComboBox.addActionListener {
|
targetPlatformComboBox.addActionListener {
|
||||||
validatorsManager.validate()
|
validatorsManager.validate()
|
||||||
|
updateCompilerTab()
|
||||||
}
|
}
|
||||||
|
|
||||||
configuration.state.versionInfo.initializeIfNeeded(editorContext.module, editorContext.rootModel)
|
updateCompilerTab()
|
||||||
|
|
||||||
reset()
|
reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateCompilerTab() {
|
||||||
|
compilerTab.compilerConfigurable.setTargetPlatform(chosenPlatform)
|
||||||
|
}
|
||||||
|
|
||||||
override fun isModified(): Boolean {
|
override fun isModified(): Boolean {
|
||||||
return with(configuration.state.versionInfo) {
|
return with(configuration.state.versionInfo) {
|
||||||
languageVersionComboBox.selectedItem != languageLevel
|
languageVersionComboBox.selectedItem != languageLevel
|
||||||
@@ -131,4 +135,7 @@ class KotlinFacetEditorTab(
|
|||||||
override fun disposeUIResources() {
|
override fun disposeUIResources() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val chosenPlatform: KotlinFacetConfiguration.TargetPlatform?
|
||||||
|
get() = targetPlatformComboBox.selectedItem as KotlinFacetConfiguration.TargetPlatform?
|
||||||
}
|
}
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.facet
|
package org.jetbrains.kotlin.idea.facet
|
||||||
|
|
||||||
|
import com.intellij.openapi.components.ServiceManager
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.projectRoots.JavaSdk
|
import com.intellij.openapi.projectRoots.JavaSdk
|
||||||
import com.intellij.openapi.projectRoots.JavaSdkVersion
|
import com.intellij.openapi.projectRoots.JavaSdkVersion
|
||||||
@@ -23,6 +24,11 @@ import com.intellij.openapi.roots.LibraryOrderEntry
|
|||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
import com.intellij.openapi.roots.ModuleRootModel
|
import com.intellij.openapi.roots.ModuleRootModel
|
||||||
import com.intellij.util.text.VersionComparatorUtil
|
import com.intellij.util.text.VersionComparatorUtil
|
||||||
|
import org.jetbrains.kotlin.config.CompilerSettings
|
||||||
|
import org.jetbrains.kotlin.idea.compiler.configuration.Kotlin2JsCompilerArgumentsHolder
|
||||||
|
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder
|
||||||
|
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerSettings
|
||||||
|
import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerWorkspaceSettings
|
||||||
import org.jetbrains.kotlin.idea.framework.JSLibraryStdPresentationProvider
|
import org.jetbrains.kotlin.idea.framework.JSLibraryStdPresentationProvider
|
||||||
import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider
|
import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider
|
||||||
import org.jetbrains.kotlin.idea.framework.getLibraryProperties
|
import org.jetbrains.kotlin.idea.framework.getLibraryProperties
|
||||||
@@ -95,24 +101,42 @@ internal fun getLibraryLanguageLevel(
|
|||||||
return getDefaultLanguageLevel(module, minVersion)
|
return getDefaultLanguageLevel(module, minVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun KotlinFacetConfiguration.VersionInfo.initializeIfNeeded(module: Module, rootModel: ModuleRootModel?) {
|
internal fun KotlinFacetConfiguration.Settings.initializeIfNeeded(module: Module, rootModel: ModuleRootModel?) {
|
||||||
if (targetPlatformKind == null) {
|
val project = module.project
|
||||||
targetPlatformKind = getDefaultTargetPlatform(module, rootModel)
|
|
||||||
|
with(versionInfo) {
|
||||||
|
if (targetPlatformKind == null) {
|
||||||
|
targetPlatformKind = getDefaultTargetPlatform(module, rootModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (languageLevel == null) {
|
||||||
|
languageLevel = getDefaultLanguageLevel(module)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apiLevel == null) {
|
||||||
|
apiLevel = languageLevel!!.coerceAtMost(getLibraryLanguageLevel(module, rootModel, targetPlatformKind!!))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (languageLevel == null) {
|
with(compilerInfo) {
|
||||||
languageLevel = getDefaultLanguageLevel(module)
|
if (commonCompilerArguments == null) {
|
||||||
}
|
commonCompilerArguments = KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.copy()
|
||||||
|
}
|
||||||
|
|
||||||
if (apiLevel == null) {
|
if (compilerSettings == null) {
|
||||||
apiLevel = languageLevel!!.coerceAtMost(getLibraryLanguageLevel(module, rootModel, targetPlatformKind!!))
|
compilerSettings = CompilerSettings(KotlinCompilerSettings.getInstance(project).settings)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (k2jsCompilerArguments == null) {
|
||||||
|
k2jsCompilerArguments = Kotlin2JsCompilerArgumentsHolder.getInstance (project).settings.copy()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun Module.getKotlinVersionInfo(rootModel: ModuleRootModel? = null): KotlinFacetConfiguration.VersionInfo {
|
internal fun Module.getKotlinSettings(rootModel: ModuleRootModel? = null): KotlinFacetConfiguration.Settings {
|
||||||
val versionInfo = KotlinFacet.get(this)?.configuration?.state?.versionInfo ?: KotlinFacetConfiguration.VersionInfo()
|
val settings = KotlinFacet.get(this)?.configuration?.state ?: KotlinFacetConfiguration.Settings()
|
||||||
versionInfo.initializeIfNeeded(this, rootModel)
|
settings.initializeIfNeeded(this, rootModel)
|
||||||
return versionInfo
|
return settings
|
||||||
}
|
}
|
||||||
|
|
||||||
val KotlinFacetConfiguration.TargetPlatform.mavenLibraryId: String
|
val KotlinFacetConfiguration.TargetPlatform.mavenLibraryId: String
|
||||||
|
|||||||
Reference in New Issue
Block a user