[Gradle, JS] Add index.html to Kotlin DSL wizard

^KT-39275 fixed
This commit is contained in:
Ilya Goncharov
2020-06-02 19:51:52 +03:00
parent 6cb0190fad
commit bd194686df
3 changed files with 81 additions and 77 deletions
@@ -1,17 +1,6 @@
/* /*
* Copyright 2010-2017 JetBrains s.r.o. * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
* 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.configuration package org.jetbrains.kotlin.idea.configuration
@@ -25,8 +14,6 @@ import com.intellij.openapi.module.Module
import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ModifiableModelsProvider import com.intellij.openapi.roots.ModifiableModelsProvider
import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.roots.ModifiableRootModel
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtil.createDirectoryIfMissing
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import org.jetbrains.annotations.Nls import org.jetbrains.annotations.Nls
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
@@ -39,8 +26,6 @@ import org.jetbrains.kotlin.idea.util.isSnapshot
import org.jetbrains.kotlin.idea.versions.* import org.jetbrains.kotlin.idea.versions.*
import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder
import org.jetbrains.plugins.gradle.frameworkSupport.GradleFrameworkSupportProvider import org.jetbrains.plugins.gradle.frameworkSupport.GradleFrameworkSupportProvider
import java.io.File
import java.io.Writer
import javax.swing.Icon import javax.swing.Icon
import javax.swing.JComponent import javax.swing.JComponent
import javax.swing.JTextPane import javax.swing.JTextPane
@@ -257,53 +242,7 @@ open class GradleKotlinJSBrowserFrameworkSupportProvider(
explicitPluginVersion: String? explicitPluginVersion: String?
) { ) {
super.addSupport(buildScriptData, module, sdk, specifyPluginVersionIfNeeded, explicitPluginVersion) super.addSupport(buildScriptData, module, sdk, specifyPluginVersionIfNeeded, explicitPluginVersion)
addBrowserSupport(module)
getNewFileWriter(module, "src/main/resources", "index.html")?.use {
it.write(
"""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>${module.name}</title>
<script src="${module.name}.js"></script>
</head>
<body>
</body>
</html>
""".trimIndent().trim()
)
}
getNewFileWriter(module, "src/main/kotlin", "main.kt")?.use {
it.write(
"""
import kotlin.browser.document
fun main() {
document.write("Hello, world!")
}
""".trimIndent().trim()
)
}
}
/**
* create parent directories and file
* @return null if file already exists
*/
private fun getNewFileWriter(module: Module, relativeDir: String, fileName: String): Writer? {
val contentEntryPath = module.gradleModuleBuilder?.contentEntryPath ?: return null
if (contentEntryPath.isEmpty()) return null
val contentRootDir = File(contentEntryPath)
val modelContentRootDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(contentRootDir) ?: return null
val dir = createDirectoryIfMissing(modelContentRootDir, relativeDir) ?: return null
if (dir.findChild(fileName) != null) return null
val file = dir.createChildData(null, fileName)
return file.getOutputStream(null).writer()
} }
} }
@@ -0,0 +1,65 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.configuration
import com.intellij.openapi.module.Module
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtil
import java.io.File
import java.io.Writer
/**
* create parent directories and file
* @return null if file already exists
*/
internal fun getNewFileWriter(
module: Module,
relativeDir: String,
fileName: String
): Writer? {
val contentEntryPath = module.gradleModuleBuilder?.contentEntryPath ?: return null
if (contentEntryPath.isEmpty()) return null
val contentRootDir = File(contentEntryPath)
val modelContentRootDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(contentRootDir) ?: return null
val dir = VfsUtil.createDirectoryIfMissing(modelContentRootDir, relativeDir) ?: return null
if (dir.findChild(fileName) != null) return null
val file = dir.createChildData(null, fileName)
return file.getOutputStream(null).writer()
}
internal fun addBrowserSupport(module: Module) {
getNewFileWriter(module, "src/main/resources", "index.html")?.use {
it.write(
"""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>${module.name}</title>
<script src="${module.name}.js"></script>
</head>
<body>
</body>
</html>
""".trimIndent().trim()
)
}
getNewFileWriter(module, "src/main/kotlin", "main.kt")?.use {
it.write(
"""
import kotlin.browser.document
fun main() {
document.write("Hello, world!")
}
""".trimIndent().trim()
)
}
}
@@ -1,17 +1,6 @@
/* /*
* Copyright 2010-2017 JetBrains s.r.o. * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
* 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.configuration package org.jetbrains.kotlin.idea.configuration
@@ -216,6 +205,17 @@ class KotlinDslGradleKotlinJSBrowserFrameworkSupportProvider :
) { ) {
override val jsSubTargetName: String override val jsSubTargetName: String
get() = "browser" get() = "browser"
override fun addSupport(
projectId: ProjectId,
module: Module,
rootModel: ModifiableRootModel,
modifiableModelsProvider: ModifiableModelsProvider,
buildScriptData: BuildScriptDataBuilder
) {
super.addSupport(projectId, module, rootModel, modifiableModelsProvider, buildScriptData)
addBrowserSupport(module)
}
} }
class KotlinDslGradleKotlinJSNodeFrameworkSupportProvider : class KotlinDslGradleKotlinJSNodeFrameworkSupportProvider :