|  | /* | 
|  | * Copyright (C) 2008 The Android Open Source Project | 
|  | * | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | import java.io.File; | 
|  | import java.io.IOException; | 
|  | import java.util.SortedSet; | 
|  |  | 
|  | /** | 
|  | * Generates an IntelliJ project. | 
|  | */ | 
|  | public class IntelliJ { | 
|  |  | 
|  | private static final String IDEA_IML = "android.iml"; | 
|  | private static final String IDEA_IPR = "android.ipr"; | 
|  |  | 
|  | /** | 
|  | * Generates IntelliJ configuration files from the given configuration. | 
|  | */ | 
|  | public static void generateFrom(Configuration c) throws IOException { | 
|  | File templatesDirectory = new File(c.toolDirectory, "templates"); | 
|  | String ipr = Files.toString(new File(templatesDirectory, IDEA_IPR)); | 
|  | Files.toFile(ipr, new File(IDEA_IPR)); | 
|  |  | 
|  | String iml = Files.toString(new File(templatesDirectory, IDEA_IML)); | 
|  |  | 
|  | StringBuilder sourceRootsXml = new StringBuilder(); | 
|  | for (File sourceRoot : c.sourceRoots) { | 
|  | sourceRootsXml.append("<sourceFolder url=\"file://$MODULE_DIR$/") | 
|  | .append(sourceRoot.getPath()) | 
|  | .append("\" isTestSource=\"").append(isTests(sourceRoot)) | 
|  | .append("\"/>\n"); | 
|  | } | 
|  |  | 
|  | /* | 
|  | * IntelliJ excludes are module-wide. We explicitly exclude directories | 
|  | * under source roots but leave the rest in so you can still pull | 
|  | * up random non-Java files. | 
|  | */ | 
|  | StringBuilder excludeXml = new StringBuilder(); | 
|  | for (File excludedDir : c.excludesUnderSourceRoots()) { | 
|  | sourceRootsXml.append("<excludeFolder url=\"file://$MODULE_DIR$/") | 
|  | .append(excludedDir.getPath()) | 
|  | .append("\"/>\n"); | 
|  | } | 
|  |  | 
|  | // Exclude Eclipse's output directory. | 
|  | sourceRootsXml.append("<excludeFolder " | 
|  | + "url=\"file://$MODULE_DIR$/out/eclipse\"/>\n"); | 
|  |  | 
|  | StringBuilder jarsXml = new StringBuilder(); | 
|  | for (File jar : c.jarFiles) { | 
|  | jarsXml.append("<orderEntry type=\"module-library\">" | 
|  | + "<library><CLASSES><root url=\"jar://$MODULE_DIR$/") | 
|  | .append(jar.getPath()) | 
|  | .append("!/\"/></CLASSES><JAVADOC/><SOURCES/></library>" | 
|  | + "</orderEntry>\n"); | 
|  | } | 
|  |  | 
|  | iml = iml.replace("SOURCE_FOLDERS", | 
|  | sourceRootsXml.toString() + excludeXml.toString()); | 
|  | iml = iml.replace("JAR_ENTRIES", jarsXml.toString()); | 
|  |  | 
|  | Files.toFile(iml, new File(IDEA_IML)); | 
|  | } | 
|  |  | 
|  | private static boolean isTests(File file) { | 
|  | String path = file.getPath(); | 
|  |  | 
|  | // test-runner is testing infrastructure, not test code. | 
|  | if (path.contains("test-runner")) { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | return path.toUpperCase().contains("TEST"); | 
|  | } | 
|  | } |