summaryrefslogtreecommitdiff
path: root/plugins/devkit/src/build/PluginBuildParticipant.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/devkit/src/build/PluginBuildParticipant.java')
-rw-r--r--plugins/devkit/src/build/PluginBuildParticipant.java213
1 files changed, 0 insertions, 213 deletions
diff --git a/plugins/devkit/src/build/PluginBuildParticipant.java b/plugins/devkit/src/build/PluginBuildParticipant.java
deleted file mode 100644
index 75f6c7cf3046..000000000000
--- a/plugins/devkit/src/build/PluginBuildParticipant.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright 2000-2012 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.idea.devkit.build;
-
-import com.intellij.openapi.compiler.CompileContext;
-import com.intellij.openapi.compiler.CompilerMessageCategory;
-import com.intellij.openapi.compiler.make.BuildParticipant;
-import com.intellij.openapi.deployment.DeploymentUtil;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.roots.ModuleRootManager;
-import com.intellij.openapi.roots.OrderRootType;
-import com.intellij.openapi.roots.libraries.Library;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.JarFileSystem;
-import com.intellij.openapi.vfs.VfsUtil;
-import com.intellij.openapi.vfs.VfsUtilCore;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.packaging.artifacts.Artifact;
-import com.intellij.packaging.elements.ArtifactRootElement;
-import com.intellij.packaging.elements.CompositePackagingElement;
-import com.intellij.packaging.elements.PackagingElement;
-import com.intellij.packaging.elements.PackagingElementFactory;
-import com.intellij.packaging.impl.artifacts.ArtifactImpl;
-import com.intellij.packaging.impl.artifacts.PlainArtifactType;
-import com.intellij.psi.xml.XmlDocument;
-import com.intellij.psi.xml.XmlFile;
-import com.intellij.psi.xml.XmlTag;
-import com.intellij.util.descriptors.ConfigFile;
-import com.intellij.util.xml.DomElement;
-import com.intellij.util.xml.DomManager;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.idea.devkit.DevKitBundle;
-import org.jetbrains.idea.devkit.dom.Dependency;
-import org.jetbrains.idea.devkit.dom.IdeaPlugin;
-import org.jetbrains.idea.devkit.module.PluginModuleType;
-import org.jetbrains.idea.devkit.projectRoots.IdeaJdk;
-import org.jetbrains.idea.devkit.util.DescriptorUtil;
-
-import java.util.HashSet;
-import java.util.List;
-
-/**
- * @author peter
-*/
-public class PluginBuildParticipant extends BuildParticipant {
- @NonNls private static final String CLASSES = "/classes";
- @NonNls private static final String LIB = "/lib/";
- @NonNls private static final String LIB_DIRECTORY = "lib";
- private final Module myModule;
- private final PluginBuildConfiguration myPluginBuildConfiguration;
-
- public PluginBuildParticipant(final Module module, final PluginBuildConfiguration pluginBuildConfiguration) {
- super();
- myModule = module;
- myPluginBuildConfiguration = pluginBuildConfiguration;
- }
-
- @Override
- public Artifact createArtifact(CompileContext context) {
- Sdk sdk = IdeaJdk.findIdeaJdk(ModuleRootManager.getInstance(myModule).getSdk());
- if (sdk != null && IdeaJdk.isFromIDEAProject(sdk.getHomePath())) {
- return null;
- }
-
- if (sdk == null) {
- context.addMessage(CompilerMessageCategory.ERROR, DevKitBundle.message("sdk.type.incorrect", myModule.getName()), null, -1, -1);
- return null;
- }
-
- final String outputPath = PluginBuildUtil.getPluginExPath(myModule);
- if (outputPath == null) {
- return null;
- }
-
- if (!checkDependencies(context)) {
- return null;
- }
-
-
- final PackagingElementFactory factory = PackagingElementFactory.getInstance();
- final ArtifactRootElement<?> root = factory.createArtifactRootElement();
-
- ConfigFile configFile = myPluginBuildConfiguration.getPluginXML();
- if (configFile != null) {
- DeploymentUtil.getInstance().checkConfigFile(configFile, context, myModule);
- factory.addFileCopy(root, "META-INF/", VfsUtil.urlToPath(configFile.getUrl()));
-
- final XmlFile xmlFile = configFile.getXmlFile();
- if (xmlFile != null) {
- final XmlDocument document = xmlFile.getDocument();
- if (document != null) {
- final DomElement domElement = DomManager.getDomManager(xmlFile.getProject()).getDomElement(document.getRootTag());
- if (domElement instanceof IdeaPlugin) {
- for(Dependency dependency: ((IdeaPlugin)domElement).getDependencies()) {
- final String file = dependency.getConfigFile().getStringValue();
- if (file != null) {
- final VirtualFile virtualFile = configFile.getVirtualFile();
- assert virtualFile != null;
- final VirtualFile parent = virtualFile.getParent();
- assert parent != null;
- final String url = parent.getUrl();
- factory.addFileCopy(root, "META-INF/", VfsUtil.urlToPath(url) + "/" + file);
- }
- }
- }
- }
- }
- }
-
- HashSet<Module> modules = new HashSet<Module>();
- PluginBuildUtil.getDependencies(myModule, modules);
-
- final CompositePackagingElement<?> classesDir = factory.getOrCreateDirectory(root, CLASSES);
- for (Module dep : modules) {
- classesDir.addOrFindChild(factory.createModuleOutput(dep));
- }
- classesDir.addOrFindChild(factory.createModuleOutput(myModule));
-
- HashSet<Library> libs = new HashSet<Library>();
- PluginBuildUtil.getLibraries(myModule, libs);
- for (Module dependentModule : modules) {
- PluginBuildUtil.getLibraries(dependentModule, libs);
- }
-
-
- // libraries
- final VirtualFile libDir = sdk.getHomeDirectory().findFileByRelativePath(LIB_DIRECTORY);
- for (Library library : libs) {
- boolean hasDirsOnly = true;
- VirtualFile[] files = library.getFiles(OrderRootType.CLASSES);
- for (VirtualFile file : files) {
- if (file.getFileSystem() instanceof JarFileSystem) {
- hasDirsOnly = false;
- file = ((JarFileSystem)file.getFileSystem()).getVirtualFileForJar(file);
- }
- if (libDir != null && file != null && VfsUtilCore.isAncestor(libDir, file, false)) {
- context.addMessage(CompilerMessageCategory.ERROR, DevKitBundle.message("dont.add.idea.libs.to.classpath", file.getName()), null,
- -1, -1);
- }
- }
-
- final List<? extends PackagingElement<?>> elements = factory.createLibraryElements(library);
- if (hasDirsOnly) {
- //todo split one lib into 2 separate libs if there are jars and dirs
- classesDir.addOrFindChildren(elements);
- }
- else {
- factory.getOrCreateDirectory(root, LIB).addOrFindChildren(elements);
- }
- }
-
- return new ArtifactImpl(getArtifactName(), PlainArtifactType.getInstance(), false, root, FileUtil.toSystemIndependentName(outputPath));
- }
-
- private String getArtifactName() {
- return myModule.getName() + ":plugin";
- }
-
- private boolean checkDependencies(CompileContext context) {
- final Module[] wrongSetDependencies = PluginBuildUtil.getWrongSetDependencies(myModule);
- if (wrongSetDependencies.length != 0) {
- boolean realProblems = false;
- final String pluginId = DescriptorUtil.getPluginId(myModule);
-
- for (Module dependency : wrongSetDependencies) {
- if (!PluginModuleType.isOfType(dependency)) {
- realProblems = true;
- context.addMessage(CompilerMessageCategory.ERROR,
- DevKitBundle.message("incorrect.dependency.non-plugin-module", dependency.getName(), myModule.getName()), null,
- -1, -1);
- }
- else {
- final XmlFile pluginXml = PluginModuleType.getPluginXml(dependency);
- boolean isDeclared = false;
- if (pluginXml != null) {
- final XmlTag rootTag = pluginXml.getDocument().getRootTag();
- final XmlTag[] dependencies = rootTag != null ? rootTag.findSubTags("depends") : XmlTag.EMPTY;
- for (XmlTag dep : dependencies) {
- if (dep.getValue().getTrimmedText().equals(pluginId)) {
- isDeclared = true;
- break;
- }
- }
- }
- if (!isDeclared) {
- // make this a warning instead?
- realProblems = true;
- context.addMessage(CompilerMessageCategory.ERROR,
- DevKitBundle.message("incorrect.dependency.not-declared", dependency.getName(), myModule.getName()), null, -1,
- -1);
- }
- }
- }
- if (realProblems) return false;
- }
- return true;
- }
-
-}