blob: 802aae97391b8ce12698d53c5d2b0758322c4d3d [file] [log] [blame]
/*
* Copyright (C) 2014 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.
*/
package com.android.tools.idea.gradle.project;
import com.android.SdkConstants;
import com.android.tools.idea.gradle.eclipse.GradleImport;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.List;
/**
* Project import logic used by UI elements
*/
public final class ProjectImportUtil {
@NonNls private static final String ANDROID_NATURE_NAME = "com.android.ide.eclipse.adt.AndroidNature";
private static final Logger LOG = Logger.getInstance(ProjectImportUtil.class);
private ProjectImportUtil() {
// Do not instantiate
}
@Nullable
public static VirtualFile findImportTarget(@NotNull VirtualFile file) {
if (file.isDirectory()) {
VirtualFile target = findMatchingChild(file, SdkConstants.FN_BUILD_GRADLE, SdkConstants.FN_SETTINGS_GRADLE);
if (target != null) {
return target;
}
target = findMatchingChild(file, GradleImport.ECLIPSE_DOT_PROJECT);
if (target != null) {
return findImportTarget(target);
}
}
else {
if (GradleImport.ECLIPSE_DOT_PROJECT.equals(file.getName()) && hasAndroidNature(file)) {
return file;
}
if (GradleImport.ECLIPSE_DOT_CLASSPATH.equals(file.getName())) {
return findImportTarget(file.getParent());
}
}
return file;
}
@Nullable
private static VirtualFile findMatchingChild(@NotNull VirtualFile parent, @NotNull String... validNames) {
if (parent.isDirectory()) {
for (VirtualFile child : parent.getChildren()) {
for (String name : validNames) {
if (name.equals(child.getName())) {
return child;
}
}
}
}
return null;
}
private static boolean hasAndroidNature(@NotNull VirtualFile projectFile) {
File dotProjectFile = new File(projectFile.getPath());
try {
Element naturesElement = JDOMUtil.loadDocument(dotProjectFile).getRootElement().getChild("natures");
if (naturesElement != null) {
List<Element> naturesList = naturesElement.getChildren("nature");
for (Element nature : naturesList) {
String natureName = nature.getText();
if (ANDROID_NATURE_NAME.equals(natureName)) {
return true;
}
}
}
}
catch (Exception e) {
LOG.info(String.format("Unable to get natures for Eclipse project file '%1$s", projectFile.getPath()), e);
}
return false;
}
}