Search in sources :

Example 16 with SourceFilePosition

use of com.android.ide.common.blame.SourceFilePosition in project android by JetBrains.

the class AndroidManifestMergingBuilder method doMergeManifests.

private static boolean doMergeManifests(final CompileContext context, File manifestFile, List<File> libManifests, File outputFile) throws IOException {
    final AndroidBuildTestingManager testingManager = AndroidBuildTestingManager.getTestingManager();
    if (testingManager != null) {
        final StringBuilder messageBuilder = new StringBuilder("manifest_merging\n");
        messageBuilder.append(manifestFile.getPath()).append('\n');
        Collections.sort(libManifests);
        for (File libManifest : libManifests) {
            messageBuilder.append(libManifest.getPath()).append('\n');
        }
        messageBuilder.append(outputFile.getPath());
        testingManager.getCommandExecutor().log(messageBuilder.toString());
    }
    ImmutableList.Builder<Pair<String, File>> libraryFiles = ImmutableList.builder();
    for (File f : libManifests) {
        libraryFiles.add(Pair.of(f.getName(), f));
    }
    final ManifestMerger2.Invoker manifestMergerInvoker = ManifestMerger2.newMerger(manifestFile, NullLogger.getLogger(), ManifestMerger2.MergeType.APPLICATION).addBundleManifests(libraryFiles.build());
    MergingReport mergingReport;
    try {
        mergingReport = manifestMergerInvoker.merge();
    } catch (ManifestMerger2.MergeFailureException e) {
        context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.ERROR, e.getMessage()));
        return false;
    }
    MergingReport.Result result = mergingReport.getResult();
    for (MergingReport.Record record : mergingReport.getLoggingRecords()) {
        SourceFilePosition position = record.getSourceLocation();
        File sourceFile = position.getFile().getSourceFile();
        String sourceFilePath = sourceFile != null ? sourceFile.getAbsolutePath() : null;
        SourcePosition pos = position.getPosition();
        MergingReport.Record.Severity severity = record.getSeverity();
        if (severity != MergingReport.Record.Severity.INFO) {
            context.processMessage(new CompilerMessage(BUILDER_NAME, toBuildMessageKind(record.getSeverity()), record.getMessage(), sourceFilePath, pos.getStartOffset(), pos.getEndOffset(), pos.getEndOffset(), pos.getEndLine(), pos.getEndColumn()));
        }
    }
    if (!result.isError()) {
        String xmlDocument = mergingReport.getMergedDocument(MergingReport.MergedManifestKind.MERGED);
        Files.write(xmlDocument, outputFile, Charsets.UTF_8);
    }
    return result.isSuccess();
}
Also used : MergingReport(com.android.manifmerger.MergingReport) AndroidBuildTestingManager(org.jetbrains.android.util.AndroidBuildTestingManager) CompilerMessage(org.jetbrains.jps.incremental.messages.CompilerMessage) ImmutableList(com.google.common.collect.ImmutableList) ManifestMerger2(com.android.manifmerger.ManifestMerger2) SourceFilePosition(com.android.ide.common.blame.SourceFilePosition) SourcePosition(com.android.ide.common.blame.SourcePosition) File(java.io.File) Pair(com.android.utils.Pair)

Aggregations

SourceFilePosition (com.android.ide.common.blame.SourceFilePosition)16 SourcePosition (com.android.ide.common.blame.SourcePosition)12 Message (com.android.ide.common.blame.Message)11 File (java.io.File)11 SourceFile (com.android.ide.common.blame.SourceFile)7 VirtualFile (com.intellij.openapi.vfs.VirtualFile)5 Matcher (java.util.regex.Matcher)4 Actions (com.android.manifmerger.Actions)3 Module (com.intellij.openapi.module.Module)3 XmlFile (com.intellij.psi.xml.XmlFile)3 NotNull (org.jetbrains.annotations.NotNull)3 MergingReport (com.android.manifmerger.MergingReport)2 GradleBuildFile (com.android.tools.idea.gradle.parser.GradleBuildFile)2 SyncMessage (com.android.tools.idea.gradle.project.sync.messages.SyncMessage)2 SyncMessageSubject.syncMessage (com.android.tools.idea.gradle.project.sync.messages.SyncMessageSubject.syncMessage)2 IdeActions (com.intellij.openapi.actionSystem.IdeActions)2 ArrayList (java.util.ArrayList)2 CompilerMessage (org.jetbrains.jps.incremental.messages.CompilerMessage)2 ParsingFailedException (com.android.ide.common.blame.parser.ParsingFailedException)1 ManifestMerger2 (com.android.manifmerger.ManifestMerger2)1