blob: db14436f6be06c3191f2b937fcbe6f9c2bdf4724 [file] [log] [blame]
package org.jetbrains.android.newProject;
import com.android.SdkConstants;
import com.intellij.ide.util.importProject.ModuleDescriptor;
import com.intellij.ide.util.importProject.ProjectDescriptor;
import com.intellij.ide.util.projectWizard.importSources.DetectedProjectRoot;
import com.intellij.ide.util.projectWizard.importSources.DetectedSourceRoot;
import com.intellij.ide.util.projectWizard.importSources.ProjectFromSourcesBuilder;
import com.intellij.ide.util.projectWizard.importSources.ProjectStructureDetector;
import com.intellij.openapi.module.JavaModuleType;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidProjectStructureDetector extends ProjectStructureDetector {
@NotNull
@Override
public DirectoryProcessingResult detectRoots(@NotNull File dir,
@NotNull File[] children,
@NotNull File base,
@NotNull List<DetectedProjectRoot> result) {
for (File child : children) {
if (child.isFile() && SdkConstants.FN_ANDROID_MANIFEST_XML.equals(child.getName())) {
result.add(new AndroidProjectRoot(dir));
return DirectoryProcessingResult.SKIP_CHILDREN;
}
}
return DirectoryProcessingResult.PROCESS_CHILDREN;
}
@Override
public void setupProjectStructure(@NotNull Collection<DetectedProjectRoot> roots,
@NotNull ProjectDescriptor projectDescriptor,
@NotNull ProjectFromSourcesBuilder builder) {
final List<File> existingRoots = new ArrayList<File>();
for (ProjectStructureDetector detector : ProjectStructureDetector.EP_NAME.getExtensions()) {
if (detector != this) {
for (DetectedProjectRoot root : builder.getProjectRoots(detector)) {
existingRoots.add(root.getDirectory());
}
}
}
final List<ModuleDescriptor> modules = new ArrayList<ModuleDescriptor>();
for (DetectedProjectRoot root : roots) {
final File dir = root.getDirectory();
boolean javaSrcRootInside = false;
for (File javaSourceRoot : existingRoots) {
if (FileUtil.isAncestor(dir, javaSourceRoot, false)) {
javaSrcRootInside = true;
}
}
if (!javaSrcRootInside) {
modules.add(new ModuleDescriptor(root.getDirectory(), JavaModuleType.getModuleType(), Collections.<DetectedSourceRoot>emptyList()));
}
}
projectDescriptor.setModules(modules);
}
private static class AndroidProjectRoot extends DetectedProjectRoot {
public AndroidProjectRoot(@NotNull File directory) {
super(directory);
}
@NotNull
@Override
public String getRootTypeName() {
return "Android";
}
}
}