From cb0b1a1c3260bc0328ba6142981f82c1aee68d60 Mon Sep 17 00:00:00 2001 From: Steve Messick Date: Thu, 27 May 2021 16:13:41 -0700 Subject: [PATCH] Misc changes to coverage --- resources/META-INF/flutter-coverage.xml | 2 +- .../FlutterCoverageEnabledConfiguration.java | 24 +++++++++++++++---- .../FlutterCoverageProgramRunner.java | 5 ++++ src/io/flutter/run/coverage/LcovInfo.java | 14 ++++++++--- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/resources/META-INF/flutter-coverage.xml b/resources/META-INF/flutter-coverage.xml index fbf684bc5f..78c801bf3b 100644 --- a/resources/META-INF/flutter-coverage.xml +++ b/resources/META-INF/flutter-coverage.xml @@ -1,5 +1,5 @@ - + diff --git a/src/io/flutter/run/coverage/FlutterCoverageEnabledConfiguration.java b/src/io/flutter/run/coverage/FlutterCoverageEnabledConfiguration.java index 6b092e6b04..984f792de3 100644 --- a/src/io/flutter/run/coverage/FlutterCoverageEnabledConfiguration.java +++ b/src/io/flutter/run/coverage/FlutterCoverageEnabledConfiguration.java @@ -10,6 +10,8 @@ import com.intellij.execution.configurations.RunConfigurationBase; import com.intellij.execution.configurations.coverage.CoverageEnabledConfiguration; import com.intellij.openapi.application.ModalityState; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.GuiUtils; import io.flutter.FlutterBundle; import io.flutter.pub.PubRoot; @@ -20,20 +22,31 @@ import java.util.List; public class FlutterCoverageEnabledConfiguration extends CoverageEnabledConfiguration { + private static final Logger LOG = Logger.getInstance(FlutterCoverageEnabledConfiguration.class.getName()); public FlutterCoverageEnabledConfiguration(@NotNull RunConfigurationBase configuration) { super(configuration); super.setCoverageRunner(CoverageRunner.getInstance(FlutterCoverageRunner.class)); - final List roots = PubRoots.forProject(configuration.getProject()); - if (roots.isEmpty()) { - throw new RuntimeException(FlutterBundle.message("project.root.not.found")); - } - myCoverageFilePath = roots.get(0).getRoot().getCanonicalPath() + "/coverage/lcov.info"; + createCoverageFile(); GuiUtils.invokeLaterIfNeeded( () -> setCurrentCoverageSuite(CoverageDataManager.getInstance(configuration.getProject()).addCoverageSuite(this)), ModalityState.any()); } + @Override + protected String createCoverageFile() { + if (myCoverageFilePath == null) { + final List roots = PubRoots.forProject(getConfiguration().getProject()); + if (roots.isEmpty()) { + throw new RuntimeException(FlutterBundle.message("project.root.not.found")); + } + final VirtualFile root = roots.get(0).getRoot(); + myCoverageFilePath = root.getPath() + "/coverage/lcov.info"; + } + return myCoverageFilePath; + } + + @Override public void setCoverageRunner(@Nullable final CoverageRunner coverageRunner) { // Save and restore myCoverageFilePath because the super method clears it. final String path = myCoverageFilePath; @@ -41,6 +54,7 @@ public void setCoverageRunner(@Nullable final CoverageRunner coverageRunner) { myCoverageFilePath = path; } + @Override public void coverageRunnerExtensionRemoved(@NotNull CoverageRunner runner) { final String path = myCoverageFilePath; super.coverageRunnerExtensionRemoved(runner); diff --git a/src/io/flutter/run/coverage/FlutterCoverageProgramRunner.java b/src/io/flutter/run/coverage/FlutterCoverageProgramRunner.java index db56be5e2c..439cbbba01 100644 --- a/src/io/flutter/run/coverage/FlutterCoverageProgramRunner.java +++ b/src/io/flutter/run/coverage/FlutterCoverageProgramRunner.java @@ -22,6 +22,8 @@ import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtil; import io.flutter.FlutterBundle; import io.flutter.run.test.TestConfig; import org.jetbrains.annotations.NonNls; @@ -79,6 +81,9 @@ private static void processCoverage(ExecutionEnvironment env) { if (configuration.getCoverageFilePath() == null) return; final Path path = Paths.get(configuration.getCoverageFilePath()); + final Path cov = path.getParent(); + VfsUtil.markDirtyAndRefresh(false, false, true, LocalFileSystem.getInstance().findFileByPath(cov.getParent().toString())); + VfsUtil.markDirtyAndRefresh(false, true, true, LocalFileSystem.getInstance().findFileByPath(cov.toString())); if (Files.exists(path)) { @Nullable final RunnerSettings settings = env.getRunnerSettings(); if (settings != null) { diff --git a/src/io/flutter/run/coverage/LcovInfo.java b/src/io/flutter/run/coverage/LcovInfo.java index 2add7cadc8..93d2fdfe26 100644 --- a/src/io/flutter/run/coverage/LcovInfo.java +++ b/src/io/flutter/run/coverage/LcovInfo.java @@ -5,6 +5,8 @@ */ package io.flutter.run.coverage; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.SystemInfo; import com.intellij.rt.coverage.data.ClassData; import com.intellij.rt.coverage.data.LineData; import com.intellij.rt.coverage.data.ProjectData; @@ -22,6 +24,7 @@ import java.util.stream.Stream; public class LcovInfo { + private static final Logger LOG = Logger.getInstance(LcovInfo.class.getName()); private static final String FILE_LABEL = "SF:"; private static final String DATA_LABEL = "DA:"; @@ -58,7 +61,7 @@ public static void readInto(ProjectData data, File file) throws IOException { final LineData lineData = new LineData(line.lineNum, null); lineData.setHits(line.execCount); lines[line.lineNum] = lineData; - //classData.registerMethodSignature(lineData); + classData.registerMethodSignature(lineData); } classData.setLines(lines); } @@ -96,7 +99,8 @@ private void addLineCount(String data) { private static int safelyParse(String val) { try { return Integer.parseInt(val); - } catch (NumberFormatException ex) { + } + catch (NumberFormatException ex) { return 0; } } @@ -107,7 +111,11 @@ private void storeLineCounts() { } private static String fullPath(String path) { - return new File(path).getAbsolutePath(); + String absPath = new File(path).getAbsolutePath(); + if (SystemInfo.isWindows) { + absPath = absPath.replaceAll("\\\\", "/"); + } + return absPath; } private static class LineCount {