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; } }