diff --git a/plugins/android/src/META-INF/maven-support.xml b/plugins/android/src/META-INF/maven-support.xml
index fbf44ffad17a..6363ad8ba509 100644
--- a/plugins/android/src/META-INF/maven-support.xml
+++ b/plugins/android/src/META-INF/maven-support.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/plugins/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java b/plugins/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java
index c012114e7b38..98a8c3319a14 100644
--- a/plugins/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java
+++ b/plugins/android/src/org/jetbrains/android/compiler/AndroidBuildConfigGeneratingCompiler.java
@@ -7,13 +7,13 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.util.Computable;
+import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.android.dom.manifest.Manifest;
+import com.intellij.util.xml.NanoXmlUtil;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.facet.AndroidRootUtil;
import org.jetbrains.android.util.AndroidBundle;
-import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -55,13 +55,16 @@ public class AndroidBuildConfigGeneratingCompiler implements SourceGeneratingCom
continue;
}
- final Manifest manifest = AndroidUtils.loadDomElement(module, manifestFile, Manifest.class);
- if (manifest == null) {
- context.addMessage(CompilerMessageCategory.ERROR, "Cannot parse file", manifestFile.getUrl(), -1, -1);
+ String packageName;
+ try {
+ // we cannot use DOM here because custom manifest file can be excluded (ex. it can be located in /target/ folder)
+ packageName = parsePackageName(manifestFile);
+ }
+ catch (IOException e) {
+ context.addMessage(CompilerMessageCategory.ERROR, "I/O error: " + e.getMessage(), null, -1, -1);
continue;
}
- String packageName = manifest.getPackage().getValue();
if (packageName != null) {
packageName = packageName.trim();
}
@@ -113,6 +116,31 @@ public class AndroidBuildConfigGeneratingCompiler implements SourceGeneratingCom
return result.toArray(new GenerationItem[result.size()]);
}
+ @Nullable
+ private static String parsePackageName(@NotNull VirtualFile manifestFile) throws IOException {
+ final Ref packageNameRef = Ref.create(null);
+
+ NanoXmlUtil.parse(manifestFile.getInputStream(), new NanoXmlUtil.BaseXmlBuilder() {
+ @Override
+ public void addAttribute(String key, String nsPrefix, String nsURI, String value, String type)
+ throws Exception {
+ super.addAttribute(key, nsPrefix, nsURI, value, type);
+
+ if ("package".equals(key) && NanoXmlUtil.createLocation("manifest").equals(getLocation())) {
+ packageNameRef.set(value);
+ stop();
+ }
+ }
+
+ @Override
+ public void elementAttributesProcessed(String name, String nsPrefix, String nsURI) throws Exception {
+ super.elementAttributesProcessed(name, nsPrefix, nsURI);
+ stop();
+ }
+ });
+ return packageNameRef.get();
+ }
+
@NotNull
@Override
public String getDescription() {
@@ -129,7 +157,7 @@ public class AndroidBuildConfigGeneratingCompiler implements SourceGeneratingCom
return new MyValidityState(in);
}
- private static class MyGenerationItem implements GenerationItem{
+ private static class MyGenerationItem implements GenerationItem {
final Module myModule;
final String myPackage;
final boolean myDebug;
@@ -190,4 +218,4 @@ public class AndroidBuildConfigGeneratingCompiler implements SourceGeneratingCom
out.writeBoolean(myDebug);
}
}
-}
+}
\ No newline at end of file
diff --git a/plugins/android/src/org/jetbrains/android/facet/AndroidRootUtil.java b/plugins/android/src/org/jetbrains/android/facet/AndroidRootUtil.java
index 6eeb95037884..21ab9753fbd9 100644
--- a/plugins/android/src/org/jetbrains/android/facet/AndroidRootUtil.java
+++ b/plugins/android/src/org/jetbrains/android/facet/AndroidRootUtil.java
@@ -71,6 +71,7 @@ public class AndroidRootUtil {
return getFileByRelativeModulePath(facet.getModule(), facet.getConfiguration().CUSTOM_COMPILER_MANIFEST, false);
}
+ // DO NOT get PSI or DOM from this file, because it may be excluded (f.ex. it can be in /target/ directory)
@Nullable
public static VirtualFile getManifestFileForCompiler(@NotNull AndroidFacet facet) {
return facet.getConfiguration().USE_CUSTOM_COMPILER_MANIFEST