Use absolute path for location's file property - Closes#6

This commit is contained in:
ArtiSmarti
2016-10-22 21:14:31 +02:00
parent 1c112e6982
commit 37769d6962
2 changed files with 12 additions and 4 deletions

View File

@@ -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(

View File

@@ -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 {