diff --git a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/Findings.kt b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/Findings.kt index 312e69517..8ee28c108 100644 --- a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/Findings.kt +++ b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/Findings.kt @@ -1,6 +1,7 @@ package io.gitlab.arturbosch.detekt.api import com.intellij.psi.PsiElement +import com.intellij.testFramework.LightVirtualFile import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getTextWithLocation @@ -101,7 +102,7 @@ data class Location(val source: SourceLocation, val file: String) : Compactable { override fun compact(): String { - return "Line/Column=$source - CharRange=$text - $file" + return "Line/Column=$source - CharRange=$text - Path=$file" } companion object { @@ -109,8 +110,13 @@ data class Location(val source: SourceLocation, val start = startLineAndColumn(element) val sourceLocation = SourceLocation(start.line, start.column) val textLocation = TextLocation(element.startOffset, element.endOffset) + val fileName = element.originalFilePath() ?: element.containingFile.name return Location(sourceLocation, textLocation, - element.getTextWithLocation(), element.containingFile.name) + element.getTextWithLocation(), fileName) + } + + private fun PsiElement.originalFilePath(): String? { + return (this.containingFile.viewProvider.virtualFile as LightVirtualFile).originalFile?.name } private fun startLineAndColumn(element: PsiElement) = DiagnosticUtils.getLineAndColumnInPsiFile( diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/KtCompiler.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/KtCompiler.kt index 780c25538..a6bbd97cf 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/KtCompiler.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/KtCompiler.kt @@ -2,6 +2,7 @@ package io.gitlab.arturbosch.detekt.core import com.intellij.openapi.util.Disposer import com.intellij.psi.PsiFileFactory +import com.intellij.testFramework.LightVirtualFile import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.CompilerConfiguration @@ -25,9 +26,10 @@ class KtCompiler { fun compile(path: Path): KtFile { require(path.isFile()) { "Given path should be a regular file!" } - val file = path.normalize() + val file = path.normalize().toAbsolutePath() val content = String(Files.readAllBytes(file)) - return psiFileFactory.createFileFromText(file.fileName.toString(), KotlinLanguage.INSTANCE, content) as KtFile + return psiFileFactory.createFileFromText(file.fileName.toString(), KotlinLanguage.INSTANCE, + content, true, true, false, LightVirtualFile(file.toString())) as KtFile } fun compileFromText(content: String): KtFile {