/*
* Copyright 2003-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 jetbrains.mps.excluded;
import jetbrains.mps.util.JDOMUtil;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map.Entry;
class CompilerXml {
// compiler.xml constants
private static final String PATH_START_PROJECT = "file://$PROJECT_DIR$/";
private static final String COMPILER_CONFIGURATION = "CompilerConfiguration";
private static final String DIRECTORY = "directory";
private static final String URL = "url";
// excludes generated dirs of the sourceDirs. also excludes explicitly the excludeDirs
public static void updateCompilerExcludes(File compilerXmlFile, File[] sourceDirs, File[] excludeDirs) throws JDOMException, IOException {
Document compiler = JDOMUtil.loadDocument(compilerXmlFile);
Element rootElement = Utils.getComponentWithName(compiler, COMPILER_CONFIGURATION);
Element excludeXml = rootElement.getChild("excludeFromCompile");
excludeXml.removeChildren(DIRECTORY);
List<String> paths = new ArrayList<String>();
for (Entry<String, Collection<String>> module : Utils.collectMPSCompiledModulesInfo(sourceDirs).entrySet()) {
for (String sourcePath : module.getValue()) {
paths.add(convertRelPathToProject(sourcePath));
}
}
Collections.sort(paths);
for (File excludedDir : excludeDirs) {
paths.add(convertRelPathToProject(excludedDir.getAbsolutePath()));
}
for (String path : paths) {
Element excludedDir = new Element(DIRECTORY);
excludedDir.setAttribute(URL, path);
excludedDir.setAttribute("includeSubdirectories", "true");
excludeXml.addContent(excludedDir);
}
JDOMUtil.writeDocument(compiler, compilerXmlFile);
}
@NotNull
private static String convertRelPathToProject(String sourcePath) {
return PATH_START_PROJECT + Utils.getRelativeProjectPath(sourcePath);
}
}