in model/src/org/jetbrains/jps/idea/ArtifactLoader.groovy [26:80]
LayoutElement loadLayoutElement(Node tag, String artifactName) {
String id = tag."@id";
switch (id) {
case "root":
return new RootElement(loadChildren(tag, artifactName));
case "directory":
return new DirectoryElement(tag."@name", loadChildren(tag, artifactName));
case "archive":
return new ArchiveElement(tag."@name", loadChildren(tag, artifactName));
case "artifact":
return new ArtifactLayoutElement(artifactName: tag."@artifact-name", errorReporter: errorReporter)
case "file-copy":
def path = macroExpander.expandMacros(tag."@path")
if (!new File(path).exists()) {
errorReporter.warning("Error in '$artifactName' artifact: file '$path' doesn't exist")
}
return new FileCopyElement(filePath: path,
outputFileName: tag."@output-file-name");
case "dir-copy":
def path = macroExpander.expandMacros(tag."@path")
if (!new File(path).exists()) {
errorReporter.warning("Error in '$artifactName' artifact: directory '$path' doesn't exist")
}
return new DirectoryCopyElement(dirPath: path);
case "extracted-dir":
def jarPath = macroExpander.expandMacros(tag."@path")
String pathInJar = tag."@path-in-jar"
if (pathInJar == null) pathInJar = "/"
if (!new File(jarPath).exists()) {
errorReporter.warning("Error in '$artifactName' artifact: file '$jarPath' doesn't exist")
}
return new ExtractedDirectoryElement(jarPath: jarPath, pathInJar: pathInJar)
case "module-output":
def name = tag."@name"
if (project.modules[name] == null) {
errorReporter.error("Unknown module '$name' in '$artifactName' artifact")
}
return new ModuleOutputElement(moduleName: name);
case "module-test-output":
def name = tag."@name"
if (project.modules[name] == null) {
errorReporter.error("Unknown module '$name' in '$artifactName' artifact")
}
return new ModuleTestOutputElement(moduleName: name);
case "library":
return new LibraryFilesElement(libraryLevel: tag."@level", libraryName: tag."@name", moduleName: tag."@module-name");
}
LayoutElementTypeService type = findType(id)
if (type != null) {
return type.createElement(project, tag, macroExpander, errorReporter)
}
errorReporter.error("unknown element in '$artifactName' artifact: $id");
}