@@ -20,120 +20,23 @@ import com.intellij.facet.FacetConfiguration
20
20
import com.intellij.facet.ui.FacetEditorContext
21
21
import com.intellij.facet.ui.FacetEditorTab
22
22
import com.intellij.facet.ui.FacetValidatorsManager
23
- import com.intellij.util.xmlb.SkipDefaultsSerializationFilter
24
- import com.intellij.util.xmlb.XmlSerializer
25
- import org.jdom.DataConversionException
26
23
import org.jdom.Element
27
- import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
28
- import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
29
- import org.jetbrains.kotlin.config.*
24
+ import org.jetbrains.kotlin.config.KotlinFacetSettings
25
+ import org.jetbrains.kotlin.config.deserializeFacetSettings
26
+ import org.jetbrains.kotlin.config.serializeFacetSettings
30
27
31
28
class KotlinFacetConfiguration : FacetConfiguration {
32
29
var settings = KotlinFacetSettings ()
33
30
private set
34
31
35
- private fun Element.getOption (name : String ) = getChildren(" option" ).firstOrNull { it.getAttribute(" name" ).value == name }
36
-
37
- private fun Element.getOptionValue (name : String ) = getOption(name)?.getAttribute(" value" )?.value
38
-
39
- private fun Element.getOptionBody (name : String ) = getOption(name)?.children?.firstOrNull()
40
-
41
- private fun readV1Config (element : Element ) {
42
- val useProjectSettings = element.getOptionValue(" useProjectSettings" )?.toBoolean()
43
-
44
- val targetPlatformName = element.getOptionBody(" versionInfo" )?.getOptionValue(" targetPlatformName" )
45
- val targetPlatform = TargetPlatformKind .ALL_PLATFORMS .firstOrNull { it.description == targetPlatformName }
46
- ? : TargetPlatformKind .Jvm .get(JvmTarget .DEFAULT )
47
-
48
- val compilerInfoElement = element.getOptionBody(" compilerInfo" )
49
-
50
- val compilerSettings = CompilerSettings ().apply {
51
- compilerInfoElement?.getOptionBody(" compilerSettings" )?.let { compilerSettingsElement ->
52
- XmlSerializer .deserializeInto(this , compilerSettingsElement)
53
- }
54
- }
55
-
56
- val commonArgumentsElement = compilerInfoElement?.getOptionBody(" _commonCompilerArguments" )
57
- val jvmArgumentsElement = compilerInfoElement?.getOptionBody(" k2jvmCompilerArguments" )
58
- val jsArgumentsElement = compilerInfoElement?.getOptionBody(" k2jsCompilerArguments" )
59
-
60
- val compilerArguments = targetPlatform.createCompilerArguments()
61
-
62
- commonArgumentsElement?.let { XmlSerializer .deserializeInto(compilerArguments, it) }
63
- when (compilerArguments) {
64
- is K2JVMCompilerArguments -> jvmArgumentsElement?.let { XmlSerializer .deserializeInto(compilerArguments, it) }
65
- is K2JSCompilerArguments -> jsArgumentsElement?.let { XmlSerializer .deserializeInto(compilerArguments, it) }
66
- }
67
-
68
- if (useProjectSettings != null ) {
69
- settings.useProjectSettings = useProjectSettings
70
- }
71
- else {
72
- // Migration problem workaround for pre-1.1-beta releases (mainly 1.0.6) -> 1.1-rc+
73
- // Problematic cases: 1.1-beta/1.1-beta2 -> 1.1-rc+ (useProjectSettings gets reset to false)
74
- // This heuristic detects old enough configurations:
75
- if (jvmArgumentsElement == null ) {
76
- settings.useProjectSettings = false
77
- }
78
- }
79
-
80
- settings.compilerSettings = compilerSettings
81
- settings.compilerArguments = compilerArguments
82
- }
83
-
84
- private fun readV2Config (element : Element ) {
85
- element.getAttributeValue(" useProjectSettings" )?.let { settings.useProjectSettings = it.toBoolean() }
86
- val platformName = element.getAttributeValue(" platform" )
87
- val platformKind = TargetPlatformKind .ALL_PLATFORMS .firstOrNull { it.description == platformName } ? : TargetPlatformKind .DEFAULT_PLATFORM
88
- element.getChild(" compilerSettings" )?.let {
89
- settings.compilerSettings = CompilerSettings ()
90
- XmlSerializer .deserializeInto(settings.compilerSettings!! , it)
91
- }
92
- element.getChild(" compilerArguments" )?.let {
93
- settings.compilerArguments = platformKind.createCompilerArguments()
94
- XmlSerializer .deserializeInto(settings.compilerArguments!! , it)
95
- }
96
- }
97
-
98
32
@Suppress(" OverridingDeprecatedMember" )
99
33
override fun readExternal (element : Element ) {
100
- val version =
101
- try {
102
- element.getAttribute(" version" )?.intValue
103
- }
104
- catch (e: DataConversionException ) {
105
- null
106
- } ? : KotlinFacetSettings .DEFAULT_VERSION
107
- when (version) {
108
- 1 -> readV1Config(element)
109
- 2 -> readV2Config(element)
110
- else -> settings = KotlinFacetSettings () // Reset facet configuration if versions don't match
111
- }
34
+ settings = deserializeFacetSettings(element)
112
35
}
113
36
114
37
@Suppress(" OverridingDeprecatedMember" )
115
38
override fun writeExternal (element : Element ) {
116
- val filter = SkipDefaultsSerializationFilter ()
117
-
118
- element.setAttribute(" version" , KotlinFacetSettings .CURRENT_VERSION .toString())
119
- settings.targetPlatformKind?.let {
120
- element.setAttribute(" platform" , it.description)
121
- }
122
- if (! settings.useProjectSettings) {
123
- element.setAttribute(" useProjectSettings" , settings.useProjectSettings.toString())
124
- }
125
- settings.compilerSettings?.let {
126
- Element (" compilerSettings" ).apply {
127
- XmlSerializer .serializeInto(it, this , filter)
128
- element.addContent(this )
129
- }
130
- }
131
- settings.compilerArguments?.let {
132
- Element (" compilerArguments" ).apply {
133
- XmlSerializer .serializeInto(it, this , filter)
134
- element.addContent(this )
135
- }
136
- }
39
+ settings.serializeFacetSettings(element)
137
40
}
138
41
139
42
override fun createEditorTabs (
0 commit comments