blob: ea9657baa16466553fd15db07e7d516be34d6a94 [file] [log] [blame]
package org.jetbrains.android.newProject;
import com.android.SdkConstants;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.HashSet;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.facet.AndroidFrameworkDetector;
import org.jetbrains.android.importDependencies.ImportDependenciesUtil;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.eclipse.importWizard.EclipseNatureImporter;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
/**
* @author Eugene.Kudelevsky
*/
public class AndroidEclipseNatureImporter extends EclipseNatureImporter {
private static final Set<String> ADT_INTERNAL_LIBS = new HashSet<String>(Arrays.asList(
"com.android.ide.eclipse.adt.ANDROID_FRAMEWORK",
"com.android.ide.eclipse.adt.LIBRARIES"));
@NotNull
@Override
public String getNatureName() {
return "com.android.ide.eclipse.adt.AndroidNature";
}
@Override
public Set<String> getProvidedCons() {
return ADT_INTERNAL_LIBS;
}
@Override
public void doImport(@NotNull Project project, @NotNull List<Module> modules) {
for (Module module : modules) {
final VirtualFile contentRoot = chooseMainContentRoot(module);
if (contentRoot == null) {
AndroidUtils.reportImportErrorToEventLog("Cannot find content root containing " +
SdkConstants.FN_ANDROID_MANIFEST_XML + " file", module.getName(), project);
continue;
}
final AndroidFacet facet = AndroidUtils.addAndroidFacetInWriteAction(module, contentRoot, false);
final ModifiableRootModel modifiableModel = ModuleRootManager.getInstance(module).getModifiableModel();
AndroidFrameworkDetector.doImportSdkAndFacetConfiguration(facet, modifiableModel);
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
modifiableModel.commit();
}
});
}
ImportDependenciesUtil.doImportDependencies(project, modules, true);
}
@Nullable
private static VirtualFile chooseMainContentRoot(@NotNull Module module) {
final VirtualFile[] roots = ModuleRootManager.getInstance(module).getContentRoots();
if (roots.length == 0) {
return null;
}
if (roots.length == 1) {
return roots[0];
}
for (VirtualFile root : roots) {
if (root.findChild(SdkConstants.FN_ANDROID_MANIFEST_XML) != null) {
return root;
}
}
return null;
}
}