diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleConstants.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleConstants.kt deleted file mode 100644 index 0e47c8a1a5d..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleConstants.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2010-2017 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. - */ - -@file:JvmName("GradleKotlinDSLConstants") - -package org.jetbrains.kotlin.gradle.kdsl - -const val DEFAULT_SCRIPT_NAME = "build.gradle.kts" diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleFrameworksWizardStep.form b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleFrameworksWizardStep.form deleted file mode 100644 index 814609f97dd..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleFrameworksWizardStep.form +++ /dev/null @@ -1,55 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleFrameworksWizardStep.java b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleFrameworksWizardStep.java deleted file mode 100644 index 3cb08deadb5..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleFrameworksWizardStep.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2010-2017 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.gradle.kdsl; - -import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider; -import com.intellij.ide.util.newProjectWizard.AddSupportForFrameworksPanel; -import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelBase; -import com.intellij.ide.util.projectWizard.ModuleBuilder; -import com.intellij.ide.util.projectWizard.ModuleWizardStep; -import com.intellij.ide.util.projectWizard.WizardContext; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ModifiableRootModel; -import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; -import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.ui.components.JBLabel; -import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.gradle.kdsl.frameworkSupport.GradleFrameworkSupportProvider; -import org.jetbrains.kotlin.gradle.kdsl.frameworkSupport.GradleJavaFrameworkSupportProvider; - -import javax.swing.*; -import java.awt.*; -import java.util.Collections; -import java.util.List; - -public class GradleFrameworksWizardStep extends ModuleWizardStep implements Disposable { - - private JPanel myPanel; - private final AddSupportForFrameworksPanel myFrameworksPanel; - private JPanel myFrameworksPanelPlaceholder; - private JPanel myOptionsPanel; - @SuppressWarnings("unused") private JBLabel myFrameworksLabel; - - public GradleFrameworksWizardStep(WizardContext context, final ModuleBuilder builder) { - - Project project = context.getProject(); - final LibrariesContainer container = LibrariesContainerFactory.createContainer(context.getProject()); - FrameworkSupportModelBase model = new FrameworkSupportModelBase(project, null, container) { - @NotNull - @Override - public String getBaseDirectoryForLibrariesPath() { - return StringUtil.notNullize(builder.getContentEntryPath()); - } - }; - - myFrameworksPanel = - new AddSupportForFrameworksPanel(Collections.emptyList(), model, true, null); - - List providers = ContainerUtil.newArrayList(); - Collections.addAll(providers, GradleFrameworkSupportProvider.EP_NAME.getExtensions()); - - myFrameworksPanel.setProviders(providers, Collections.emptySet(), Collections.singleton(GradleJavaFrameworkSupportProvider.ID)); - Disposer.register(this, myFrameworksPanel); - myFrameworksPanelPlaceholder.add(myFrameworksPanel.getMainPanel()); - - ModuleBuilder.ModuleConfigurationUpdater configurationUpdater = new ModuleBuilder.ModuleConfigurationUpdater() { - @Override - public void update(@NotNull Module module, @NotNull ModifiableRootModel rootModel) { - myFrameworksPanel.addSupport(module, rootModel); - } - }; - builder.addModuleConfigurationUpdater(configurationUpdater); - - ((CardLayout)myOptionsPanel.getLayout()).show(myOptionsPanel, "frameworks card"); - } - - @Override - public JComponent getComponent() { - return myPanel; - } - - @Override - public void updateDataModel() { - } - - @Override - public void dispose() { - } - - @Override - public void disposeUIResources() { - Disposer.dispose(this); - } -} diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleBuilder.java b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleBuilder.java deleted file mode 100644 index a91d3d1b20d..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleBuilder.java +++ /dev/null @@ -1,495 +0,0 @@ -/* - * Copyright 2010-2017 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.gradle.kdsl; - -import com.intellij.ide.fileTemplates.FileTemplate; -import com.intellij.ide.fileTemplates.FileTemplateManager; -import com.intellij.ide.highlighter.ModuleFileType; -import com.intellij.ide.projectWizard.ProjectSettingsStep; -import com.intellij.ide.util.EditorHelper; -import com.intellij.ide.util.projectWizard.JavaModuleBuilder; -import com.intellij.ide.util.projectWizard.ModuleWizardStep; -import com.intellij.ide.util.projectWizard.SettingsStep; -import com.intellij.ide.util.projectWizard.WizardContext; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.components.StorageScheme; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager; -import com.intellij.openapi.externalSystem.importing.ImportSpec; -import com.intellij.openapi.externalSystem.importing.ImportSpecBuilder; -import com.intellij.openapi.externalSystem.model.ExternalSystemDataKeys; -import com.intellij.openapi.externalSystem.model.project.ProjectData; -import com.intellij.openapi.externalSystem.model.project.ProjectId; -import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode; -import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl; -import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalModuleBuilder; -import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep; -import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemSettings; -import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; -import com.intellij.openapi.externalSystem.util.ExternalSystemUtil; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.impl.LoadTextUtil; -import com.intellij.openapi.module.*; -import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ex.ProjectManagerEx; -import com.intellij.openapi.projectRoots.JavaSdkType; -import com.intellij.openapi.projectRoots.SdkTypeId; -import com.intellij.openapi.roots.ModifiableRootModel; -import com.intellij.openapi.roots.ui.configuration.ModulesProvider; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.Key; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.io.FileUtilRt; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.openapi.vfs.VfsUtilCore; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiManager; -import com.intellij.psi.codeStyle.CodeStyleSettingsManager; -import com.intellij.util.containers.ContainerUtil; -import org.gradle.util.GradleVersion; -import org.jdom.JDOMException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.gradle.kdsl.frameworkSupport.BuildScriptDataBuilder; -import org.jetbrains.kotlin.gradle.kdsl.frameworkSupport.KotlinBuildScriptDataBuilder; -import org.jetbrains.plugins.gradle.service.settings.GradleProjectSettingsControl; -import org.jetbrains.plugins.gradle.settings.DistributionType; -import org.jetbrains.plugins.gradle.settings.GradleProjectSettings; -import org.jetbrains.plugins.gradle.util.GradleConstants; - -import javax.swing.*; -import java.io.File; -import java.io.IOException; -import java.util.Map; - -import static org.jetbrains.kotlin.gradle.kdsl.GradleKotlinDSLConstants.DEFAULT_SCRIPT_NAME; - -public class GradleModuleBuilder extends AbstractExternalModuleBuilder { - - private static final Logger LOG = Logger.getInstance(GradleModuleBuilder.class); - - private static final String TEMPLATE_GRADLE_SETTINGS = "Gradle Kotlin DSL Settings.gradle"; - private static final String TEMPLATE_GRADLE_SETTINGS_MERGE = "Gradle Settings merge.gradle"; - private static final String TEMPLATE_GRADLE_BUILD_WITH_WRAPPER = "Gradle Build Script with wrapper.gradle"; - private static final String DEFAULT_TEMPLATE_GRADLE_BUILD = "Gradle Kotlin DSL Build Script.gradle"; - - private static final String TEMPLATE_ATTRIBUTE_PROJECT_NAME = "PROJECT_NAME"; - private static final String TEMPLATE_ATTRIBUTE_MODULE_PATH = "MODULE_PATH"; - private static final String TEMPLATE_ATTRIBUTE_MODULE_FLAT_DIR = "MODULE_FLAT_DIR"; - private static final String TEMPLATE_ATTRIBUTE_MODULE_NAME = "MODULE_NAME"; - private static final String TEMPLATE_ATTRIBUTE_MODULE_GROUP = "MODULE_GROUP"; - private static final String TEMPLATE_ATTRIBUTE_MODULE_VERSION = "MODULE_VERSION"; - private static final String TEMPLATE_ATTRIBUTE_GRADLE_VERSION = "GRADLE_VERSION"; - private static final String TEMPLATE_ATTRIBUTE_BUILD_FILE_NAME = "BUILD_FILE_NAME"; - private static final Key BUILD_SCRIPT_DATA = - Key.create("gradle.module.kotlinBuildScriptData"); - - private WizardContext myWizardContext; - - @Nullable - private ProjectData myParentProject; - private boolean myInheritGroupId; - private boolean myInheritVersion; - private ProjectId myProjectId; - private String rootProjectPath; - - public GradleModuleBuilder() { - super(GradleConstants.SYSTEM_ID, new GradleProjectSettings()); - } - - @Override - public String getPresentableName() { - return "Gradle (Kotlin DSL)"; - } - - @NotNull - @Override - public Module createModule(@NotNull ModifiableModuleModel moduleModel) - throws InvalidDataException, IOException, ModuleWithNameAlreadyExists, JDOMException, ConfigurationException { - LOG.assertTrue(getName() != null); - final String originModuleFilePath = getModuleFilePath(); - LOG.assertTrue(originModuleFilePath != null); - - String moduleName; - if (myProjectId == null) { - moduleName = getName(); - } - else { - moduleName = getExternalProjectSettings().isUseQualifiedModuleNames() && StringUtil.isNotEmpty(myProjectId.getGroupId()) - ? (myProjectId.getGroupId() + '.' + myProjectId.getArtifactId()) - : myProjectId.getArtifactId(); - } - Project contextProject = myWizardContext.getProject(); - String projectFileDirectory = null; - if (myWizardContext.isCreatingNewProject() || contextProject == null || contextProject.getBasePath() == null) { - projectFileDirectory = myWizardContext.getProjectFileDirectory(); - } - else if (myWizardContext.getProjectStorageFormat() == StorageScheme.DEFAULT) { - String moduleFileDirectory = getModuleFileDirectory(); - if (moduleFileDirectory != null) { - projectFileDirectory = moduleFileDirectory; - } - } - if (projectFileDirectory == null) { - projectFileDirectory = contextProject.getBasePath(); - } - if (myWizardContext.getProjectStorageFormat() == StorageScheme.DIRECTORY_BASED) { - projectFileDirectory += "/.idea/modules"; - } - String moduleFilePath = projectFileDirectory + "/" + moduleName + ModuleFileType.DOT_DEFAULT_EXTENSION; - deleteModuleFile(moduleFilePath); - final ModuleType moduleType = getModuleType(); - final Module module = moduleModel.newModule(moduleFilePath, moduleType.getId()); - setupModule(module); - return module; - } - - @Override - public void setupRootModel(final ModifiableRootModel modifiableRootModel) throws ConfigurationException { - String contentEntryPath = getContentEntryPath(); - if (StringUtil.isEmpty(contentEntryPath)) { - return; - } - File contentRootDir = new File(contentEntryPath); - FileUtilRt.createDirectory(contentRootDir); - LocalFileSystem fileSystem = LocalFileSystem.getInstance(); - VirtualFile modelContentRootDir = fileSystem.refreshAndFindFileByIoFile(contentRootDir); - if (modelContentRootDir == null) { - return; - } - - modifiableRootModel.addContentEntry(modelContentRootDir); - // todo this should be moved to generic ModuleBuilder - if (myJdk != null) { - modifiableRootModel.setSdk(myJdk); - } - else { - modifiableRootModel.inheritSdk(); - } - - final Project project = modifiableRootModel.getProject(); - if (myParentProject != null) { - rootProjectPath = myParentProject.getLinkedExternalProjectPath(); - } - else { - rootProjectPath = - FileUtil.toCanonicalPath(myWizardContext.isCreatingNewProject() ? project.getBasePath() : modelContentRootDir.getPath()); - } - assert rootProjectPath != null; - - final VirtualFile gradleBuildFile = setupGradleBuildFile(modelContentRootDir); - setupGradleSettingsFile( - rootProjectPath, modelContentRootDir, modifiableRootModel.getProject().getName(), - myProjectId == null ? modifiableRootModel.getModule().getName() : myProjectId.getArtifactId(), - myWizardContext.isCreatingNewProject() || myParentProject == null - ); - - if (gradleBuildFile != null) { - modifiableRootModel.getModule().putUserData( - BUILD_SCRIPT_DATA, new KotlinBuildScriptDataBuilder(gradleBuildFile)); - } - } - - @Override - protected void setupModule(Module module) throws ConfigurationException { - super.setupModule(module); - assert rootProjectPath != null; - - VirtualFile buildScriptFile = null; - final BuildScriptDataBuilder buildScriptDataBuilder = getBuildScriptData(module); - try { - if (buildScriptDataBuilder != null) { - buildScriptFile = buildScriptDataBuilder.getBuildScriptFile(); - String lineSeparator = lineSeparator(buildScriptFile); - String configurationPart = StringUtil.convertLineSeparators(buildScriptDataBuilder.buildConfigurationPart(), lineSeparator); - String existingText = StringUtil.trimTrailing(VfsUtilCore.loadText(buildScriptFile)); - String content = (!configurationPart.isEmpty() ? configurationPart + lineSeparator : "") + - (!existingText.isEmpty() ? existingText + lineSeparator : "") + - lineSeparator + - StringUtil.convertLineSeparators(buildScriptDataBuilder.buildMainPart(), lineSeparator); - VfsUtil.saveText(buildScriptFile, content); - } - } - catch (IOException e) { - LOG.warn("Unexpected exception on applying frameworks templates", e); - } - - // it will be set later in any case, but save is called immediately after project creation, so, to ensure that it will be properly saved as external system module - ExternalSystemModulePropertyManager.getInstance(module).setExternalId(GradleConstants.SYSTEM_ID); - - final Project project = module.getProject(); - if (myWizardContext.isCreatingNewProject()) { - getExternalProjectSettings().setExternalProjectPath(rootProjectPath); - AbstractExternalSystemSettings settings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID); - project.putUserData(ExternalSystemDataKeys.NEWLY_CREATED_PROJECT, Boolean.TRUE); - //noinspection unchecked - settings.linkProject(getExternalProjectSettings()); - } - else { - FileDocumentManager.getInstance().saveAllDocuments(); - final GradleProjectSettings gradleProjectSettings = getExternalProjectSettings(); - final VirtualFile finalBuildScriptFile = buildScriptFile; - Runnable runnable = () -> { - if (myParentProject == null) { - gradleProjectSettings.setExternalProjectPath(rootProjectPath); - AbstractExternalSystemSettings settings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID); - //noinspection unchecked - settings.linkProject(gradleProjectSettings); - } - - ImportSpec importSpec = new ImportSpecBuilder(project, GradleConstants.SYSTEM_ID) - .use(ProgressExecutionMode.IN_BACKGROUND_ASYNC) - .createDirectoriesForEmptyContentRoots() - .useDefaultCallback() - .build(); - ExternalSystemUtil.refreshProject(rootProjectPath, importSpec); - - final PsiFile psiFile; - if (finalBuildScriptFile != null) { - psiFile = PsiManager.getInstance(project).findFile(finalBuildScriptFile); - if (psiFile != null) { - EditorHelper.openInEditor(psiFile); - } - } - }; - - // execute when current dialog is closed - ExternalSystemUtil.invokeLater(project, ModalityState.NON_MODAL, runnable); - } - } - - @Override - public ModuleWizardStep[] createWizardSteps(@NotNull WizardContext wizardContext, @NotNull ModulesProvider modulesProvider) { - myWizardContext = wizardContext; - return new ModuleWizardStep[]{ - new GradleModuleWizardStep(this, wizardContext), - new ExternalModuleSettingsStep<>( - wizardContext, this, new GradleProjectSettingsControl(getExternalProjectSettings())) - }; - } - - @Nullable - @Override - public ModuleWizardStep getCustomOptionsStep(WizardContext context, Disposable parentDisposable) { - final GradleFrameworksWizardStep step = new GradleFrameworksWizardStep(context, this); - Disposer.register(parentDisposable, step); - return step; - } - - @Override - public boolean isSuitableSdkType(SdkTypeId sdk) { - return sdk instanceof JavaSdkType; - } - - @Override - public String getParentGroup() { - return JavaModuleType.BUILD_TOOLS_GROUP; - } - - @Override - public int getWeight() { - return JavaModuleBuilder.BUILD_SYSTEM_WEIGHT; - } - - @Override - public ModuleType getModuleType() { - return StdModuleTypes.JAVA; - } - - @Nullable - private VirtualFile setupGradleBuildFile(@NotNull VirtualFile modelContentRootDir) - throws ConfigurationException { - final VirtualFile file = getOrCreateExternalProjectConfigFile(modelContentRootDir.getPath(), GradleKotlinDSLConstants.DEFAULT_SCRIPT_NAME); - - if (file != null) { - final String templateName = getExternalProjectSettings().getDistributionType() == DistributionType.WRAPPED - ? TEMPLATE_GRADLE_BUILD_WITH_WRAPPER - : DEFAULT_TEMPLATE_GRADLE_BUILD; - Map attributes = ContainerUtil.newHashMap(); - if (myProjectId != null) { - attributes.put(TEMPLATE_ATTRIBUTE_MODULE_VERSION, myProjectId.getVersion()); - attributes.put(TEMPLATE_ATTRIBUTE_MODULE_GROUP, myProjectId.getGroupId()); - attributes.put(TEMPLATE_ATTRIBUTE_GRADLE_VERSION, GradleVersion.current().getVersion()); - } - saveFile(file, templateName, attributes); - } - return file; - } - - @Nullable - public static VirtualFile setupGradleSettingsFile(@NotNull String rootProjectPath, - @NotNull VirtualFile modelContentRootDir, - String projectName, - String moduleName, - boolean renderNewFile) - throws ConfigurationException { - final VirtualFile file = getOrCreateExternalProjectConfigFile(rootProjectPath, GradleConstants.SETTINGS_FILE_NAME); - if (file == null) return null; - - if (renderNewFile) { - final String moduleDirName = VfsUtilCore.getRelativePath(modelContentRootDir, file.getParent(), '/'); - - Map attributes = ContainerUtil.newHashMap(); - attributes.put(TEMPLATE_ATTRIBUTE_PROJECT_NAME, projectName); - attributes.put(TEMPLATE_ATTRIBUTE_MODULE_PATH, moduleDirName); - attributes.put(TEMPLATE_ATTRIBUTE_MODULE_NAME, moduleName); - attributes.put(TEMPLATE_ATTRIBUTE_BUILD_FILE_NAME, DEFAULT_SCRIPT_NAME); // TODO: gradle > 4.0 doesn't need this - saveFile(file, TEMPLATE_GRADLE_SETTINGS, attributes); - } - else { - char separatorChar = file.getParent() == null || !VfsUtilCore.isAncestor(file.getParent(), modelContentRootDir, true) ? '/' : ':'; - String modulePath = VfsUtil.getPath(file, modelContentRootDir, separatorChar); - - Map attributes = ContainerUtil.newHashMap(); - attributes.put(TEMPLATE_ATTRIBUTE_MODULE_NAME, moduleName); - // check for flat structure - final String flatStructureModulePath = - modulePath != null && StringUtil.startsWith(modulePath, "../") ? StringUtil.trimStart(modulePath, "../") : null; - if (StringUtil.equals(flatStructureModulePath, modelContentRootDir.getName())) { - attributes.put(TEMPLATE_ATTRIBUTE_MODULE_FLAT_DIR, "true"); - attributes.put(TEMPLATE_ATTRIBUTE_MODULE_PATH, flatStructureModulePath); - } - else { - attributes.put(TEMPLATE_ATTRIBUTE_MODULE_PATH, modulePath); - } - - appendToFile(file, TEMPLATE_GRADLE_SETTINGS_MERGE, attributes); - } - return file; - } - - private static void saveFile(@NotNull VirtualFile file, @NotNull String templateName, @Nullable Map templateAttributes) - throws ConfigurationException { - FileTemplateManager manager = FileTemplateManager.getDefaultInstance(); - FileTemplate template = manager.getInternalTemplate(templateName); - try { - appendToFile(file, templateAttributes != null ? template.getText(templateAttributes) : template.getText()); - } - catch (IOException e) { - LOG.warn(String.format("Unexpected exception on applying template %s config", GradleConstants.SYSTEM_ID.getReadableName()), e); - throw new ConfigurationException( - e.getMessage(), String.format("Can't apply %s template config text", GradleConstants.SYSTEM_ID.getReadableName()) - ); - } - } - - private static void appendToFile(@NotNull VirtualFile file, @NotNull String templateName, @Nullable Map templateAttributes) - throws ConfigurationException { - FileTemplateManager manager = FileTemplateManager.getDefaultInstance(); - FileTemplate template = manager.getInternalTemplate(templateName); - try { - appendToFile(file, templateAttributes != null ? template.getText(templateAttributes) : template.getText()); - } - catch (IOException e) { - LOG.warn(String.format("Unexpected exception on appending template %s config", GradleConstants.SYSTEM_ID.getReadableName()), e); - throw new ConfigurationException( - e.getMessage(), String.format("Can't append %s template config text", GradleConstants.SYSTEM_ID.getReadableName()) - ); - } - } - - - @Nullable - private static VirtualFile getOrCreateExternalProjectConfigFile(@NotNull String parent, @NotNull String fileName) { - File file = new File(parent, fileName); - FileUtilRt.createIfNotExists(file); - return LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file); - } - - public void setParentProject(@Nullable ProjectData parentProject) { - myParentProject = parentProject; - } - - public boolean isInheritGroupId() { - return myInheritGroupId; - } - - public void setInheritGroupId(boolean inheritGroupId) { - myInheritGroupId = inheritGroupId; - } - - public boolean isInheritVersion() { - return myInheritVersion; - } - - public void setInheritVersion(boolean inheritVersion) { - myInheritVersion = inheritVersion; - } - - public ProjectId getProjectId() { - return myProjectId; - } - - public void setProjectId(@NotNull ProjectId projectId) { - myProjectId = projectId; - } - - @Nullable - @Override - public ModuleWizardStep modifySettingsStep(@NotNull SettingsStep settingsStep) { - if (settingsStep instanceof ProjectSettingsStep) { - final ProjectSettingsStep projectSettingsStep = (ProjectSettingsStep)settingsStep; - if (myProjectId != null) { - final JTextField moduleNameField = settingsStep.getModuleNameField(); - if (moduleNameField != null) { - moduleNameField.setText(myProjectId.getArtifactId()); - } - projectSettingsStep.setModuleName(myProjectId.getArtifactId()); - } - projectSettingsStep.bindModuleSettings(); - } - return super.modifySettingsStep(settingsStep); - } - - public static void appendToFile(@NotNull VirtualFile file, @NotNull String text) throws IOException { - String lineSeparator = lineSeparator(file); - final String existingText = StringUtil.trimTrailing(VfsUtilCore.loadText(file)); - String content = (StringUtil.isNotEmpty(existingText) ? existingText + lineSeparator : "") + - StringUtil.convertLineSeparators(text, lineSeparator); - VfsUtil.saveText(file, content); - } - - @NotNull - private static String lineSeparator(@NotNull VirtualFile file) { - String lineSeparator = LoadTextUtil.detectLineSeparator(file, true); - if (lineSeparator == null) { - lineSeparator = CodeStyleSettingsManager.getSettings(ProjectManagerEx.getInstanceEx().getDefaultProject()).getLineSeparator(); - } - return lineSeparator; - } - - @Nullable - public static BuildScriptDataBuilder getBuildScriptData(@Nullable Module module) { - return module == null ? null : module.getUserData(BUILD_SCRIPT_DATA); - } - - @Nullable - @Override - public Project createProject(String name, String path) { - Project project = super.createProject(name, path); - if (project != null) { - GradleProjectSettings settings = getExternalProjectSettings(); - ExternalProjectsManagerImpl.getInstance(project).setStoreExternally(settings.isStoreProjectFilesExternally()); - } - return project; - } -} \ No newline at end of file diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleWizardStep.form b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleWizardStep.form deleted file mode 100644 index b94d1e0017f..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleWizardStep.form +++ /dev/null @@ -1,105 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleWizardStep.java b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleWizardStep.java deleted file mode 100644 index f540c42a4d1..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/GradleModuleWizardStep.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright 2010-2017 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.gradle.kdsl; - -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.ide.util.projectWizard.ModuleWizardStep; -import com.intellij.ide.util.projectWizard.WizardContext; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.externalSystem.model.project.ProjectData; -import com.intellij.openapi.externalSystem.model.project.ProjectId; -import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep; -import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.wm.IdeFocusManager; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.gradle.service.project.wizard.GradleParentProjectForm; -import org.jetbrains.plugins.gradle.util.GradleConstants; - -import javax.swing.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -public class GradleModuleWizardStep extends ModuleWizardStep { - private static final Icon WIZARD_ICON = null; - - private static final String INHERIT_GROUP_ID_KEY = "GradleModuleWizard.inheritGroupId"; - private static final String INHERIT_VERSION_KEY = "GradleModuleWizard.inheritVersion"; - private static final String DEFAULT_VERSION = "1.0-SNAPSHOT"; - - @Nullable - private final Project myProjectOrNull; - @NotNull - private final GradleModuleBuilder myBuilder; - @NotNull - private final WizardContext myContext; - @NotNull - private final GradleParentProjectForm myParentProjectForm; - - private String myInheritedGroupId; - private String myInheritedVersion; - - private JPanel myMainPanel; - - private JTextField myGroupIdField; - private JCheckBox myInheritGroupIdCheckBox; - private JTextField myArtifactIdField; - private JTextField myVersionField; - private JCheckBox myInheritVersionCheckBox; - private JPanel myAddToPanel; - - public GradleModuleWizardStep(@NotNull GradleModuleBuilder builder, @NotNull WizardContext context) { - myProjectOrNull = context.getProject(); - myBuilder = builder; - myContext = context; - myParentProjectForm = new GradleParentProjectForm(context, parentProject -> updateComponents()); - initComponents(); - loadSettings(); - } - - private void initComponents() { - myAddToPanel.add(myParentProjectForm.getComponent()); - ActionListener updatingListener = new ActionListener() { - public void actionPerformed(ActionEvent e) { - updateComponents(); - } - }; - myInheritGroupIdCheckBox.addActionListener(updatingListener); - myInheritVersionCheckBox.addActionListener(updatingListener); - } - - @Override - public JComponent getPreferredFocusedComponent() { - return myGroupIdField; - } - - @Override - public void onStepLeaving() { - saveSettings(); - } - - private void loadSettings() { - myBuilder.setInheritGroupId(getSavedValue(INHERIT_GROUP_ID_KEY, true)); - myBuilder.setInheritVersion(getSavedValue(INHERIT_VERSION_KEY, true)); - } - - private void saveSettings() { - saveValue(INHERIT_GROUP_ID_KEY, myInheritGroupIdCheckBox.isSelected()); - saveValue(INHERIT_VERSION_KEY, myInheritVersionCheckBox.isSelected()); - } - - private static boolean getSavedValue(String key, boolean defaultValue) { - return getSavedValue(key, String.valueOf(defaultValue)).equals(String.valueOf(true)); - } - - private static String getSavedValue(String key, String defaultValue) { - String value = PropertiesComponent.getInstance().getValue(key); - return value == null ? defaultValue : value; - } - - private static void saveValue(String key, boolean value) { - saveValue(key, String.valueOf(value)); - } - - private static void saveValue(String key, String value) { - PropertiesComponent.getInstance().setValue(key, value); - } - - public JComponent getComponent() { - return myMainPanel; - } - - @Override - public boolean validate() throws ConfigurationException { - if (StringUtil.isEmptyOrSpaces(myArtifactIdField.getText())) { - ApplicationManager.getApplication().invokeLater( - () -> IdeFocusManager.getInstance(myProjectOrNull).requestFocus(myArtifactIdField, true)); - throw new ConfigurationException("Please, specify artifactId"); - } - - return true; - } - - @Override - public void updateStep() { - ProjectData parentProject = myParentProjectForm.getParentProject(); - ProjectId projectId = myBuilder.getProjectId(); - - if (projectId == null) { - setTestIfEmpty(myArtifactIdField, myBuilder.getName()); - setTestIfEmpty(myGroupIdField, parentProject == null ? myBuilder.getName() : parentProject.getGroup()); - setTestIfEmpty(myVersionField, parentProject == null ? DEFAULT_VERSION : parentProject.getVersion()); - } - else { - setTestIfEmpty(myArtifactIdField, projectId.getArtifactId()); - setTestIfEmpty(myGroupIdField, projectId.getGroupId()); - setTestIfEmpty(myVersionField, projectId.getVersion()); - } - - myInheritGroupIdCheckBox.setSelected(myBuilder.isInheritGroupId()); - myInheritVersionCheckBox.setSelected(myBuilder.isInheritVersion()); - - updateComponents(); - } - - - private void updateComponents() { - final boolean isAddToVisible = myParentProjectForm.isVisible(); - - myInheritGroupIdCheckBox.setVisible(isAddToVisible); - myInheritVersionCheckBox.setVisible(isAddToVisible); - - myParentProjectForm.updateComponents(); - ProjectData parentProject = myParentProjectForm.getParentProject(); - if (parentProject == null) { - myContext.putUserData(ExternalModuleSettingsStep.SKIP_STEP_KEY, Boolean.FALSE); - myGroupIdField.setEnabled(true); - myVersionField.setEnabled(true); - myInheritGroupIdCheckBox.setEnabled(false); - myInheritVersionCheckBox.setEnabled(false); - - setTestIfEmpty(myArtifactIdField, myBuilder.getName()); - setTestIfEmpty(myGroupIdField, ""); - setTestIfEmpty(myVersionField, DEFAULT_VERSION); - } - else { - myContext.putUserData(ExternalModuleSettingsStep.SKIP_STEP_KEY, Boolean.TRUE); - myGroupIdField.setEnabled(!myInheritGroupIdCheckBox.isSelected()); - myVersionField.setEnabled(!myInheritVersionCheckBox.isSelected()); - - if (myInheritGroupIdCheckBox.isSelected() - || myGroupIdField.getText().equals(myInheritedGroupId)) { - myGroupIdField.setText(parentProject.getGroup()); - } - if (myInheritVersionCheckBox.isSelected() - || myVersionField.getText().equals(myInheritedVersion)) { - myVersionField.setText(parentProject.getVersion()); - } - myInheritedGroupId = myGroupIdField.getText(); - myInheritedVersion = myVersionField.getText(); - - myInheritGroupIdCheckBox.setEnabled(true); - myInheritVersionCheckBox.setEnabled(true); - } - } - - public static boolean isGradleModuleExist(WizardContext myContext) { - for (Module module : myContext.getModulesProvider().getModules()) { - if (ExternalSystemApiUtil.isExternalSystemAwareModule(GradleConstants.SYSTEM_ID, module)) return true; - } - return false; - } - - @Override - public void updateDataModel() { - myContext.setProjectBuilder(myBuilder); - ProjectData parentProject = myParentProjectForm.getParentProject(); - myBuilder.setParentProject(parentProject); - - myBuilder.setProjectId(new ProjectId(myGroupIdField.getText(), - myArtifactIdField.getText(), - myVersionField.getText())); - myBuilder.setInheritGroupId(myInheritGroupIdCheckBox.isSelected()); - myBuilder.setInheritVersion(myInheritVersionCheckBox.isSelected()); - - if (StringUtil.isNotEmpty(myBuilder.getProjectId().getArtifactId())) { - myContext.setProjectName(myBuilder.getProjectId().getArtifactId()); - } - if (parentProject != null) { - myContext.setProjectFileDirectory(parentProject.getLinkedExternalProjectPath() + '/' + myContext.getProjectName()); - } - else { - if (myProjectOrNull != null) { - myContext.setProjectFileDirectory(myProjectOrNull.getBaseDir().getPath() + '/' + myContext.getProjectName()); - } - } - } - - @Override - public Icon getIcon() { - return WIZARD_ICON; - } - - private static void setTestIfEmpty(@NotNull JTextField field, @Nullable String text) { - if (StringUtil.isEmpty(field.getText())) { - field.setText(StringUtil.notNullize(text)); - } - } - - @Override - public String getHelpId() { - return "Gradle_Archetype_Dialog"; - } - - @Override - public void disposeUIResources() { - Disposer.dispose(myParentProjectForm); - } -} - diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/BuildScriptDataBuilder.java b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/BuildScriptDataBuilder.java deleted file mode 100644 index 679e583b4c3..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/BuildScriptDataBuilder.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2000-2017 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.gradle.kdsl.frameworkSupport; - -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.annotations.NotNull; - -import java.util.List; -import java.util.Set; - -public class BuildScriptDataBuilder { - @NotNull private final VirtualFile myBuildScriptFile; - private final Set plugins = ContainerUtil.newTreeSet(); - private final Set pluginsInGroup = ContainerUtil.newTreeSet(); - private final Set repositories = ContainerUtil.newTreeSet(); - private final Set dependencies = ContainerUtil.newTreeSet(); - private final Set properties = ContainerUtil.newTreeSet(); - private final Set buildScriptProperties = ContainerUtil.newTreeSet(); - private final Set buildScriptRepositories = ContainerUtil.newTreeSet(); - private final Set buildScriptDependencies = ContainerUtil.newTreeSet(); - private final Set other = ContainerUtil.newTreeSet(); - - public BuildScriptDataBuilder(@NotNull VirtualFile buildScriptFile) { - myBuildScriptFile = buildScriptFile; - } - - @NotNull - public VirtualFile getBuildScriptFile() { - return myBuildScriptFile; - } - - public String buildConfigurationPart() { - List lines = ContainerUtil.newArrayList(); - addBuildscriptLines(lines, BuildScriptDataBuilder::padding); - if (!pluginsInGroup.isEmpty()) { - lines.add("plugins {"); - lines.addAll(ContainerUtil.map(pluginsInGroup, BuildScriptDataBuilder::padding)); - lines.add("}"); - lines.add(""); - } - return StringUtil.join(lines, "\n"); - } - - public String buildMainPart() { - List lines = ContainerUtil.newArrayList(); - if (!plugins.isEmpty()) { - lines.addAll(plugins); - lines.add(""); - } - if (!properties.isEmpty()) { - lines.addAll(properties); - lines.add(""); - } - if (!repositories.isEmpty()) { - lines.add("repositories {"); - lines.addAll(ContainerUtil.map(repositories, BuildScriptDataBuilder::padding)); - lines.add("}"); - lines.add(""); - } - if (!dependencies.isEmpty()) { - lines.add("dependencies {"); - lines.addAll(ContainerUtil.map(dependencies, BuildScriptDataBuilder::padding)); - lines.add("}"); - lines.add(""); - } - if (!other.isEmpty()) { - lines.addAll(other); - } - return StringUtil.join(lines, "\n"); - } - - private void addBuildscriptLines(@NotNull List lines, @NotNull Function padding) { - if (!buildScriptRepositories.isEmpty() || !buildScriptDependencies.isEmpty() || !buildScriptProperties.isEmpty()) { - lines.add("buildscript {"); - final List buildScriptLines = ContainerUtil.newSmartList(); - if (!buildScriptProperties.isEmpty()) { - buildScriptLines.addAll(buildScriptProperties); - buildScriptLines.add(""); - } - if (!buildScriptRepositories.isEmpty()) { - buildScriptLines.add("repositories {"); - buildScriptLines.addAll(ContainerUtil.map(buildScriptRepositories, padding)); - buildScriptLines.add("}"); - } - if (!buildScriptDependencies.isEmpty()) { - buildScriptLines.add("dependencies {"); - buildScriptLines.addAll(ContainerUtil.map(buildScriptDependencies, padding)); - buildScriptLines.add("}"); - } - lines.addAll(ContainerUtil.map(buildScriptLines, padding)); - lines.add("}"); - lines.add(""); - } - } - - public BuildScriptDataBuilder addBuildscriptPropertyDefinition(@NotNull String definition) { - buildScriptProperties.add(definition.trim()); - return this; - } - - public BuildScriptDataBuilder addBuildscriptRepositoriesDefinition(@NotNull String definition) { - buildScriptRepositories.add(definition.trim()); - return this; - } - - public BuildScriptDataBuilder addBuildscriptDependencyNotation(@NotNull String notation) { - buildScriptDependencies.add(notation.trim()); - return this; - } - - public BuildScriptDataBuilder addPluginDefinitionInPluginsGroup(@NotNull String definition) { - pluginsInGroup.add(definition.trim()); - return this; - } - - public BuildScriptDataBuilder addPluginDefinition(@NotNull String definition) { - plugins.add(definition.trim()); - return this; - } - - public BuildScriptDataBuilder addRepositoriesDefinition(@NotNull String definition) { - repositories.add(definition.trim()); - return this; - } - - public BuildScriptDataBuilder addDependencyNotation(@NotNull String notation) { - dependencies.add(notation.trim()); - return this; - } - - public BuildScriptDataBuilder addPropertyDefinition(@NotNull String definition) { - properties.add(definition.trim()); - return this; - } - - public BuildScriptDataBuilder addOther(@NotNull String definition) { - other.add(definition.trim()); - return this; - } - - private static String padding(String s) {return StringUtil.isNotEmpty(s) ? " " + s : "";} -} diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleFrameworkSupportProvider.java b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleFrameworkSupportProvider.java deleted file mode 100644 index cfe1c3eef59..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleFrameworkSupportProvider.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2010-2017 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.gradle.kdsl.frameworkSupport; - -import com.intellij.framework.addSupport.FrameworkSupportInModuleConfigurable; -import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider; -import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel; -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleType; -import com.intellij.openapi.roots.ModifiableModelsProvider; -import com.intellij.openapi.roots.ModifiableRootModel; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; - -import static org.jetbrains.kotlin.gradle.kdsl.GradleModuleBuilder.getBuildScriptData; - -public abstract class GradleFrameworkSupportProvider extends FrameworkSupportInModuleProvider { - - public static final ExtensionPointName EP_NAME = - ExtensionPointName.create("org.jetbrains.kotlin.gradleFrameworkSupport"); - - public abstract void addSupport(@NotNull Module module, @NotNull ModifiableRootModel rootModel, - @NotNull ModifiableModelsProvider modifiableModelsProvider, - @NotNull BuildScriptDataBuilder buildScriptData); - - public JComponent createComponent() { - return null; - } - - @NotNull - @Override - public FrameworkSupportInModuleConfigurable createConfigurable(@NotNull FrameworkSupportModel model) { - return new FrameworkSupportInModuleConfigurable() { - @Nullable - @Override - public JComponent createComponent() { - return GradleFrameworkSupportProvider.this.createComponent(); - } - - @Override - public void addSupport(@NotNull Module module, - @NotNull ModifiableRootModel rootModel, - @NotNull ModifiableModelsProvider modifiableModelsProvider) { - final BuildScriptDataBuilder buildScriptData = getBuildScriptData(module); - if (buildScriptData != null) { - GradleFrameworkSupportProvider.this.addSupport(module, rootModel, modifiableModelsProvider, buildScriptData); - } - } - }; - } - - @Override - public boolean isEnabledForModuleType(@NotNull ModuleType moduleType) { - return false; - } -} diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleGroovyFrameworkSupportProvider.java b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleGroovyFrameworkSupportProvider.java deleted file mode 100644 index 7d9daced59c..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleGroovyFrameworkSupportProvider.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2010-2017 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.gradle.kdsl.frameworkSupport; - -import com.intellij.framework.FrameworkTypeEx; -import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.roots.ModifiableModelsProvider; -import com.intellij.openapi.roots.ModifiableRootModel; -import icons.JetgroovyIcons; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; - -public class GradleGroovyFrameworkSupportProvider extends GradleFrameworkSupportProvider { - - public static final String ID = "groovy"; - - @NotNull - @Override - public FrameworkTypeEx getFrameworkType() { - return new FrameworkTypeEx(ID) { - @NotNull - @Override - public FrameworkSupportInModuleProvider createProvider() { - return GradleGroovyFrameworkSupportProvider.this; - } - - @NotNull - @Override - public String getPresentableName() { - return "Groovy"; - } - - @NotNull - @Override - public Icon getIcon() { - return JetgroovyIcons.Groovy.Groovy_16x16; - } - }; - } - - @Override - public void addSupport(@NotNull Module module, - @NotNull ModifiableRootModel rootModel, - @NotNull ModifiableModelsProvider modifiableModelsProvider, - @NotNull BuildScriptDataBuilder buildScriptData) { - buildScriptData - .addPluginDefinition("plugin(\"groovy\")") - .addRepositoriesDefinition("mavenCentral()") - .addDependencyNotation("compile(\"org.codehaus.groovy:groovy-all:2.3.11\")") - .addDependencyNotation("testCompile(\"junit\", \"junit\", \"4.12\")"); - } -} \ No newline at end of file diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleJavaFrameworkSupportProvider.java b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleJavaFrameworkSupportProvider.java deleted file mode 100644 index 0bde690ccc1..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleJavaFrameworkSupportProvider.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2000-2015 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.gradle.kdsl.frameworkSupport; - -import com.intellij.framework.FrameworkTypeEx; -import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider; -import com.intellij.icons.AllIcons; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.roots.ModifiableModelsProvider; -import com.intellij.openapi.roots.ModifiableRootModel; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; - -public class GradleJavaFrameworkSupportProvider extends GradleFrameworkSupportProvider { - - public static final String ID = "java"; - - @NotNull - @Override - public FrameworkTypeEx getFrameworkType() { - return new FrameworkTypeEx(ID) { - @NotNull - @Override - public FrameworkSupportInModuleProvider createProvider() { - return GradleJavaFrameworkSupportProvider.this; - } - - @NotNull - @Override - public String getPresentableName() { - return "Java"; - } - - @NotNull - @Override - public Icon getIcon() { - return AllIcons.Nodes.Module; - } - }; - } - - @Override - public void addSupport(@NotNull Module module, - @NotNull ModifiableRootModel rootModel, - @NotNull ModifiableModelsProvider modifiableModelsProvider, - @NotNull BuildScriptDataBuilder buildScriptData) { - buildScriptData - .addPluginDefinition("plugin(\"java\")") - // TODO: in gradle > 4.0 it is just 'java { ... }' - .addOther("configure {\n sourceCompatibility = JavaVersion.VERSION_1_8\n}") - .addRepositoriesDefinition("mavenCentral()") - .addDependencyNotation("testCompile(\"junit\", \"junit\", \"4.12\")"); - } -} diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/KotlinBuildScriptDataBuilder.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/KotlinBuildScriptDataBuilder.kt deleted file mode 100644 index 950eb9ae738..00000000000 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/KotlinBuildScriptDataBuilder.kt +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2010-2017 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.gradle.kdsl.frameworkSupport - -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.util.containers.ContainerUtil - -class KotlinBuildScriptDataBuilder(buildScriptFile: VirtualFile) : BuildScriptDataBuilder(buildScriptFile) { - private val plugins: MutableSet = ContainerUtil.newTreeSet() - private val properties: MutableSet = ContainerUtil.newTreeSet() - private val repositories: MutableSet = ContainerUtil.newTreeSet() - private val dependencies: MutableSet = ContainerUtil.newTreeSet() - - private val buildScriptProperties: MutableSet = ContainerUtil.newTreeSet() - private val buildScriptRepositories: MutableSet = ContainerUtil.newTreeSet() - private val buildScriptDependencies: MutableSet = ContainerUtil.newTreeSet() - private val other: MutableSet = ContainerUtil.newTreeSet() - - override fun addPluginDefinition(definition: String): BuildScriptDataBuilder = apply { plugins.add(definition) } - - override fun addRepositoriesDefinition(definition: String): BuildScriptDataBuilder = apply { repositories.add(definition) } - - override fun addPropertyDefinition(definition: String): BuildScriptDataBuilder = apply { properties.add(definition) } - - override fun addDependencyNotation(notation: String): BuildScriptDataBuilder = apply { dependencies.add(notation) } - - override fun addBuildscriptPropertyDefinition(definition: String): BuildScriptDataBuilder = apply { buildScriptProperties.add(definition) } - - override fun addBuildscriptRepositoriesDefinition(definition: String): BuildScriptDataBuilder = apply { buildScriptRepositories.add(definition) } - - override fun addBuildscriptDependencyNotation(notation: String): BuildScriptDataBuilder = apply { buildScriptDependencies.add(notation) } - - override fun addOther(definition: String): BuildScriptDataBuilder = apply { other.add(definition) } - - override fun buildMainPart(): String = buildString { - - appendlnIfNotNull(buildBuildScriptBlock()) - - appendlnIfNotNull(buildBlock("apply", plugins)) - - if (properties.isNotEmpty()) { - properties.forEach { appendln(it) } - appendln() - } - - appendlnIfNotNull(buildBlock("repositories", repositories)) - - appendlnIfNotNull(buildBlock("dependencies", dependencies)) - - other.forEach { appendln(it) } - } - - private fun buildBuildScriptBlock(): String? = buildString { - if (buildScriptProperties.isEmpty() || buildScriptRepositories.isEmpty() || buildScriptDependencies.isEmpty()) { - return null - } - - appendln("buildscript {") - buildScriptProperties.forEach { appendln(it.withMargin) } - appendln() - appendlnIfNotNull(buildBlock("repositories", buildScriptRepositories)?.withMargin) - appendlnIfNotNull(buildBlock("dependencies", buildScriptDependencies)?.withMargin) - appendln("}") - } - - private fun buildBlock(name: String, lines: Set): String? = buildString { - if (lines.isEmpty()) { - return null - } - - appendln("$name {") - lines.forEach { appendln(it.withMargin) } - appendln("}") - } - - private val String.withMargin: String - get() = lines().joinToString(separator = "\n") { " " + it } - - private fun StringBuilder.appendlnIfNotNull(text: String?) = text?.let { appendln(it) } -} diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleKotlinFrameworkSupportProvider.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslGradleKotlinFrameworkSupportProvider.kt similarity index 81% rename from idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleKotlinFrameworkSupportProvider.kt rename to idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslGradleKotlinFrameworkSupportProvider.kt index 2a63a1bba12..561734dbeff 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/gradle/kdsl/frameworkSupport/GradleKotlinFrameworkSupportProvider.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslGradleKotlinFrameworkSupportProvider.kt @@ -14,34 +14,36 @@ * limitations under the License. */ -package org.jetbrains.kotlin.gradle.kdsl.frameworkSupport +package org.jetbrains.kotlin.idea.configuration import com.intellij.framework.FrameworkTypeEx import com.intellij.framework.addSupport.FrameworkSupportInModuleProvider +import com.intellij.openapi.externalSystem.model.project.ProjectId import com.intellij.openapi.module.Module import com.intellij.openapi.roots.ModifiableModelsProvider import com.intellij.openapi.roots.ModifiableRootModel -import com.intellij.openapi.vfs.VfsUtil import org.jetbrains.kotlin.idea.KotlinIcons -import org.jetbrains.kotlin.idea.configuration.* import org.jetbrains.kotlin.idea.configuration.KotlinBuildScriptManipulator.Companion.GSK_KOTLIN_VERSION_PROPERTY_NAME import org.jetbrains.kotlin.idea.configuration.KotlinBuildScriptManipulator.Companion.getCompileDependencySnippet import org.jetbrains.kotlin.idea.configuration.KotlinBuildScriptManipulator.Companion.getKotlinGradlePluginClassPathSnippet import org.jetbrains.kotlin.idea.versions.* +import org.jetbrains.plugins.gradle.frameworkSupport.BuildScriptDataBuilder +import org.jetbrains.plugins.gradle.frameworkSupport.KotlinDslGradleFrameworkSupportProvider import javax.swing.Icon -abstract class GradleKotlinDSLKotlinFrameworkSupportProvider( +abstract class KotlinDslGradleKotlinFrameworkSupportProvider( val frameworkTypeId: String, val displayName: String, val frameworkIcon: Icon -) : GradleFrameworkSupportProvider() { +) : KotlinDslGradleFrameworkSupportProvider() { override fun getFrameworkType(): FrameworkTypeEx = object : FrameworkTypeEx(frameworkTypeId) { override fun getIcon(): Icon = frameworkIcon override fun getPresentableName(): String = displayName - override fun createProvider(): FrameworkSupportInModuleProvider = this@GradleKotlinDSLKotlinFrameworkSupportProvider + override fun createProvider(): FrameworkSupportInModuleProvider = this@KotlinDslGradleKotlinFrameworkSupportProvider } - override fun addSupport(module: Module, + override fun addSupport(projectId: ProjectId, + module: Module, rootModel: ModifiableRootModel, modifiableModelsProvider: ModifiableModelsProvider, buildScriptData: BuildScriptDataBuilder) { @@ -74,8 +76,8 @@ abstract class GradleKotlinDSLKotlinFrameworkSupportProvider( protected abstract fun getPluginDefinition(): String } -class GradleKotlinDSLKotlinJavaFrameworkSupportProvider : - GradleKotlinDSLKotlinFrameworkSupportProvider("KOTLIN", "Kotlin (Java)", KotlinIcons.SMALL_LOGO) { +class KotlinDslGradleKotlinJavaFrameworkSupportProvider : + KotlinDslGradleKotlinFrameworkSupportProvider("KOTLIN", "Kotlin (Java)", KotlinIcons.SMALL_LOGO) { override fun getPluginDefinition() = "plugin(\"${KotlinGradleModuleConfigurator.KOTLIN}\")" @@ -83,28 +85,24 @@ class GradleKotlinDSLKotlinJavaFrameworkSupportProvider : getCompileDependencySnippet(KOTLIN_GROUP_ID, getStdlibArtifactId(rootModel.sdk, bundledRuntimeVersion())) override fun addSupport( + projectId: ProjectId, module: Module, rootModel: ModifiableRootModel, modifiableModelsProvider: ModifiableModelsProvider, buildScriptData: BuildScriptDataBuilder ) { - super.addSupport(module, rootModel, modifiableModelsProvider, buildScriptData) + super.addSupport(projectId, module, rootModel, modifiableModelsProvider, buildScriptData) val jvmTarget = getDefaultJvmTarget(rootModel.sdk, bundledRuntimeVersion()) if (jvmTarget != null) { buildScriptData - .addImports("import org.jetbrains.kotlin.gradle.tasks.KotlinCompile") + .addImport("import org.jetbrains.kotlin.gradle.tasks.KotlinCompile") .addOther("tasks.withType {\n kotlinOptions.jvmTarget = \"1.8\"\n}\n") } } - - private fun BuildScriptDataBuilder.addImports(vararg import: String): BuildScriptDataBuilder = apply { - val text = VfsUtil.loadText(buildScriptFile) - VfsUtil.saveText(buildScriptFile, import.joinToString(separator = "\n") + "\n\n" + text) - } } -class GradleKotlinDSLKotlinJSFrameworkSupportProvider : - GradleKotlinDSLKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin (JavaScript)", KotlinIcons.JS) { +class KotlinDslGradleKotlinJSFrameworkSupportProvider : + KotlinDslGradleKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin (JavaScript)", KotlinIcons.JS) { override fun getPluginDefinition(): String = "plugin(\"${KotlinJsGradleModuleConfigurator.KOTLIN_JS}\")" diff --git a/idea/src/META-INF/gradle.xml b/idea/src/META-INF/gradle.xml index d130dd02dec..f60b25fe28e 100644 --- a/idea/src/META-INF/gradle.xml +++ b/idea/src/META-INF/gradle.xml @@ -2,6 +2,8 @@ + +