use of org.jetbrains.jps.model.artifact.elements.JpsCompositePackagingElement in project intellij-community by JetBrains.
the class JpsPluginSyntheticArtifactProvider method createArtifact.
private static JpsArtifact createArtifact(JpsModule module, JpsPluginModuleProperties properties) {
JpsPackagingElementFactory factory = JpsPackagingElementFactory.getInstance();
JpsCompositePackagingElement root = factory.createArtifactRoot();
String pluginXmlUrl = properties.getPluginXmlUrl();
if (pluginXmlUrl != null) {
String pluginXmlPath = JpsPathUtil.urlToPath(pluginXmlUrl);
JpsCompositePackagingElement metaInfDir = factory.getOrCreateDirectory(root, "META-INF");
metaInfDir.addChild(factory.createFileCopy(pluginXmlPath, null));
File pluginXmlFile = JpsPathUtil.urlToFile(pluginXmlUrl);
if (pluginXmlFile.exists()) {
try {
Element rootElement = JDOMUtil.load(pluginXmlFile);
for (Element dependsElement : JDOMUtil.getChildren(rootElement, "depends")) {
String relativePath = dependsElement.getAttributeValue("config-file");
if (relativePath != null) {
File dependencyFile = new File(pluginXmlFile.getParent(), FileUtil.toSystemDependentName(relativePath));
String dependencyPath = FileUtil.toSystemIndependentName(dependencyFile.getAbsolutePath());
metaInfDir.addChild(factory.createFileCopy(dependencyPath, null));
}
}
} catch (JDOMException | IOException e) {
LOG.info(e);
}
}
}
JpsJavaDependenciesEnumerator enumerator = JpsJavaExtensionService.dependencies(module).recursively().includedIn(JpsJavaClasspathKind.PRODUCTION_RUNTIME);
JpsCompositePackagingElement classesDir = factory.getOrCreateDirectory(root, "classes");
for (JpsModule depModule : enumerator.getModules()) {
if (depModule.getModuleType().equals(JpsJavaModuleType.INSTANCE)) {
classesDir.addChild(JpsJavaExtensionService.getInstance().createProductionModuleOutput(depModule.createReference()));
}
}
classesDir.addChild(JpsJavaExtensionService.getInstance().createProductionModuleOutput(module.createReference()));
for (JpsLibrary library : enumerator.getLibraries()) {
JpsCompositePackagingElement parent;
if (hasDirsOnly(library)) {
parent = classesDir;
} else {
parent = factory.getOrCreateDirectory(root, "lib");
}
parent.addChild(factory.createLibraryElement(library.createReference()));
}
String name = module.getName() + ":plugin";
JpsArtifact artifact = JpsArtifactService.getInstance().createArtifact(name, root, DirectoryArtifactType.INSTANCE, JpsElementFactory.getInstance().createDummyElement());
JpsSdk<JpsSimpleElement<JpsIdeaSdkProperties>> sdk = module.getSdk(JpsIdeaSdkType.INSTANCE);
if (sdk != null) {
String sandboxHome = sdk.getSdkProperties().getData().getSandboxHome();
if (sandboxHome != null) {
artifact.setOutputPath(sandboxHome + "/plugins/" + module.getName());
}
}
return artifact;
}
use of org.jetbrains.jps.model.artifact.elements.JpsCompositePackagingElement in project intellij-community by JetBrains.
the class RebuildArtifactOnConfigurationChangeTest method testAddRootChangingRootIndices.
public void testAddRootChangingRootIndices() {
String file1 = createFile("d1/a/b/1.txt");
String file2 = createFile("d2/x/y/2.txt");
JpsArtifact a = addArtifact(root().fileCopy(file1).fileCopy(file2));
buildAll();
assertOutput(a, fs().file("1.txt").file("2.txt"));
JpsCompositePackagingElement root = a.getRootElement();
assertEquals(2, root.getChildren().size());
JpsPackagingElement last = root.getChildren().get(1);
root.removeChild(last);
String file3 = createFile("d3/1/2/3.txt");
root.addChild(JpsPackagingElementFactory.getInstance().createFileCopy(file3, null));
root.addChild(last);
buildAll();
assertOutput(a, fs().file("1.txt").file("2.txt").file("3.txt"));
}
use of org.jetbrains.jps.model.artifact.elements.JpsCompositePackagingElement in project intellij-community by JetBrains.
the class JpsArtifactOutputPackagingElementImpl method getSubstitution.
@Override
public List<JpsPackagingElement> getSubstitution() {
JpsArtifact artifact = getArtifactReference().resolve();
if (artifact == null)
return Collections.emptyList();
JpsCompositePackagingElement rootElement = artifact.getRootElement();
if (rootElement instanceof JpsArtifactRootElement) {
return new ArrayList<>(rootElement.getChildren());
} else {
return Collections.<JpsPackagingElement>singletonList(rootElement);
}
}
Aggregations