From df403553da5a796ab0085d29fa9c108a3bc26f83 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Mon, 29 Oct 2012 16:44:13 +0400 Subject: [PATCH] exclude gen roots in android-jps --- ...ilders.java.ExcludedJavaSourceRootProvider | 1 + ...AndroidExcludedJavaSourceRootProvider.java | 38 +++++++++++++++++++ .../jetbrains/jps/android/AndroidJpsUtil.java | 2 +- .../compiler/AndroidPrecompileTask.java | 3 +- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 plugins/android/jps-plugin/src/META-INF/services/org.jetbrains.jps.builders.java.ExcludedJavaSourceRootProvider create mode 100644 plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidExcludedJavaSourceRootProvider.java diff --git a/plugins/android/jps-plugin/src/META-INF/services/org.jetbrains.jps.builders.java.ExcludedJavaSourceRootProvider b/plugins/android/jps-plugin/src/META-INF/services/org.jetbrains.jps.builders.java.ExcludedJavaSourceRootProvider new file mode 100644 index 000000000000..9b9e5d46534c --- /dev/null +++ b/plugins/android/jps-plugin/src/META-INF/services/org.jetbrains.jps.builders.java.ExcludedJavaSourceRootProvider @@ -0,0 +1 @@ +org.jetbrains.jps.android.AndroidExcludedJavaSourceRootProvider \ No newline at end of file diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidExcludedJavaSourceRootProvider.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidExcludedJavaSourceRootProvider.java new file mode 100644 index 000000000000..c3d5f0ac5e5f --- /dev/null +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidExcludedJavaSourceRootProvider.java @@ -0,0 +1,38 @@ +package org.jetbrains.jps.android; + +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.io.FileUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jps.android.model.JpsAndroidModuleExtension; +import org.jetbrains.jps.builders.java.ExcludedJavaSourceRootProvider; +import org.jetbrains.jps.model.module.JpsModule; +import org.jetbrains.jps.model.module.JpsModuleSourceRoot; + +import java.io.IOException; + +/** + * @author Eugene.Kudelevsky + */ +public class AndroidExcludedJavaSourceRootProvider extends ExcludedJavaSourceRootProvider { + private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.android.AndroidExcludedJavaSourceRootProvider"); + + @Override + public boolean isExcludedFromCompilation(@NotNull JpsModule module, @NotNull JpsModuleSourceRoot root) { + final JpsAndroidModuleExtension extension = AndroidJpsUtil.getExtension(module); + + if (extension == null) { + return false; + } + try { + for (String genDir : AndroidJpsUtil.getGenDirs(extension)) { + if (FileUtil.pathsEqual(genDir, root.getFile().getPath())) { + return true; + } + } + } + catch (IOException e) { + LOG.info(e); + } + return false; + } +} diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidJpsUtil.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidJpsUtil.java index efb06df0be52..cc310e8c1c0a 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidJpsUtil.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidJpsUtil.java @@ -652,7 +652,7 @@ public class AndroidJpsUtil { } - @Nullable + @NotNull public static Set getGenDirs(@NotNull JpsAndroidModuleExtension extension) throws IOException { final Set result = new HashSet(); File dir = extension.getAaptGenDir(); diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidPrecompileTask.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidPrecompileTask.java index 7e5b11d4473c..066b34bed60a 100644 --- a/plugins/android/src/org/jetbrains/android/compiler/AndroidPrecompileTask.java +++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidPrecompileTask.java @@ -72,7 +72,8 @@ public class AndroidPrecompileTask implements CompileTask { public boolean execute(CompileContext context) { final Project project = context.getProject(); - // todo: add gen roots to excludes in android-jps and then remove this line + // in out-of-process mode gen roots will be excluded by AndroidExcludedJavaSourceRootProvider + // we do it here for internal mode and also to make there roots 'visibly excluded' in IDE settings createGenModulesAndSourceRoots(project); if (!CompilerWorkspaceConfiguration.getInstance(project).useOutOfProcessBuild()) {