mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-86800 do not get dom for filtered manifest, because it can be in excluded folder; use nano xml parser instead
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
</extensions>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<compiler implementation="org.jetbrains.android.compiler.AndroidExternalApklibExtractingCompiler" order="first"/>
|
||||
<compiler implementation="org.jetbrains.android.compiler.AndroidMavenResourcesCompiler"/>
|
||||
<compiler implementation="org.jetbrains.android.compiler.AndroidMavenResourcesCompiler" order="first"/>
|
||||
</extensions>
|
||||
<extensions defaultExtensionNs="org.jetbrains">
|
||||
<android.mavenProvider implementation="org.jetbrains.android.maven.AndroidMavenProviderImpl"/>
|
||||
|
||||
+36
-8
@@ -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<String> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user