From 08c9640432f131c5f24ab5548ab33154d4454784 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Thu, 21 Oct 2010 22:12:23 +0400 Subject: [PATCH] enable "copy resources from artifacts" behavior only if there are any "apksources" dependencies in a maven project --- .../android/maven/AndroidFacetImporter.java | 4 ++- .../maven/AndroidMavenProviderImpl.java | 33 ++++++++++++++++--- .../android/maven/AndroidMavenUtil.java | 3 ++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/plugins/android/src/org/jetbrains/android/maven/AndroidFacetImporter.java b/plugins/android/src/org/jetbrains/android/maven/AndroidFacetImporter.java index fce124738c9c..86791983416a 100644 --- a/plugins/android/src/org/jetbrains/android/maven/AndroidFacetImporter.java +++ b/plugins/android/src/org/jetbrains/android/maven/AndroidFacetImporter.java @@ -67,12 +67,14 @@ public class AndroidFacetImporter extends FacetImporter result, SupportedRequestType type) { - result.add("apksources"); + result.add(AndroidMavenUtil.APKSOURCES_DEPENDENCY_TYPE); } @Override protected void setupFacet(AndroidFacet facet, MavenProject mavenProject) { AndroidMavenProviderImpl.setPathsToDefault(mavenProject, facet.getModule(), facet.getConfiguration()); + AndroidMavenProviderImpl.configureAaptCompilation(mavenProject, facet.getModule(), facet.getConfiguration(), + AndroidMavenProviderImpl.hasApkSourcesDependency(mavenProject)); } @Override diff --git a/plugins/android/src/org/jetbrains/android/maven/AndroidMavenProviderImpl.java b/plugins/android/src/org/jetbrains/android/maven/AndroidMavenProviderImpl.java index 7af72f7490eb..5e93aae716eb 100644 --- a/plugins/android/src/org/jetbrains/android/maven/AndroidMavenProviderImpl.java +++ b/plugins/android/src/org/jetbrains/android/maven/AndroidMavenProviderImpl.java @@ -44,14 +44,27 @@ public class AndroidMavenProviderImpl implements AndroidMavenProvider { if (genRelativePath != null) { configuration.GEN_FOLDER_RELATIVE_PATH_APT = '/' + genRelativePath + "/r"; configuration.GEN_FOLDER_RELATIVE_PATH_AIDL = '/' + genRelativePath + "/aidl"; + } + } + } - configuration.USE_CUSTOM_APK_RESOURCE_FOLDER = true; + public static void configureAaptCompilation(MavenProject mavenProject, + Module module, + AndroidFacetConfiguration configuration, + boolean hasApkSources) { + String moduleDirPath = FileUtil.toSystemIndependentName(new File(module.getModuleFilePath()).getParent()); + String genSources = FileUtil.toSystemIndependentName(mavenProject.getGeneratedSourcesDirectory(false)); + + if (VfsUtil.isAncestor(new File(moduleDirPath), new File(genSources), true)) { + String genRelativePath = FileUtil.getRelativePath(moduleDirPath, genSources, '/'); + if (genRelativePath != null) { + configuration.USE_CUSTOM_APK_RESOURCE_FOLDER = hasApkSources; configuration.CUSTOM_APK_RESOURCE_FOLDER = '/' + genRelativePath + "/combined-resources/" + SdkConstants.FD_RES; } } - configuration.COPY_RESOURCES_FROM_ARTIFACTS = true; - configuration.ENABLE_AAPT_COMPILER = false; + configuration.COPY_RESOURCES_FROM_ARTIFACTS = hasApkSources; + configuration.ENABLE_AAPT_COMPILER = !hasApkSources; } @Override @@ -66,7 +79,7 @@ public class AndroidMavenProviderImpl implements AndroidMavenProvider { List result = new ArrayList(); if (mavenProject != null) { for (MavenArtifact depArtifact : mavenProject.getDependencies()) { - if ("apksources".equals(depArtifact.getType())) { + if (AndroidMavenUtil.APKSOURCES_DEPENDENCY_TYPE.equals(depArtifact.getType())) { result.add(MavenArtifactUtil.getArtifactFile(mavenProject.getLocalRepository(), depArtifact.getMavenId())); } } @@ -79,6 +92,18 @@ public class AndroidMavenProviderImpl implements AndroidMavenProvider { MavenProject mavenProject = MavenProjectsManager.getInstance(module.getProject()).findProject(module); if (mavenProject != null) { setPathsToDefault(mavenProject, module, facetConfiguration); + if (hasApkSourcesDependency(mavenProject)) { + configureAaptCompilation(mavenProject, module, facetConfiguration, true); + } } } + + public static boolean hasApkSourcesDependency(MavenProject mavenProject) { + for (MavenArtifact artifact : mavenProject.getDependencies()) { + if (AndroidMavenUtil.APKSOURCES_DEPENDENCY_TYPE.equals(artifact.getType())) { + return true; + } + } + return false; + } } diff --git a/plugins/android/src/org/jetbrains/android/maven/AndroidMavenUtil.java b/plugins/android/src/org/jetbrains/android/maven/AndroidMavenUtil.java index 03153019e620..3017203cd8a1 100644 --- a/plugins/android/src/org/jetbrains/android/maven/AndroidMavenUtil.java +++ b/plugins/android/src/org/jetbrains/android/maven/AndroidMavenUtil.java @@ -16,6 +16,7 @@ package org.jetbrains.android.maven; import com.intellij.openapi.module.Module; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -23,6 +24,8 @@ import org.jetbrains.annotations.Nullable; * @author Eugene.Kudelevsky */ public class AndroidMavenUtil { + @NonNls public static final String APKSOURCES_DEPENDENCY_TYPE = "apksources"; + private AndroidMavenUtil() { }