Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import spp.jetbrains.marker.source.SourceFileMarker
import spp.protocol.artifact.ArtifactQualifiedName

data class LiveLocationContext(
val lineNumber: Int,
val qualifiedName: ArtifactQualifiedName,
val fileMarker: SourceFileMarker,
val element: PsiElement,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package spp.jetbrains.marker.js
import com.intellij.codeInsight.daemon.LineMarkerInfo
import com.intellij.lang.javascript.psi.JSFile
import com.intellij.psi.PsiElement
import spp.jetbrains.marker.SourceMarker
import spp.jetbrains.marker.plugin.SourceLineMarkerProvider
import spp.jetbrains.marker.source.SourceFileMarker
import spp.jetbrains.marker.source.mark.gutter.GutterMark
Expand All @@ -40,7 +39,6 @@ class JavascriptLineMarkerProvider : SourceLineMarkerProvider() {
}

override fun getLineMarkerInfo(parent: PsiElement?, element: PsiElement): LineMarkerInfo<PsiElement>? {
val fileMarker = SourceMarker.getInstance(element.project).getSourceFileMarker(element.containingFile)
return null //todo: this
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,8 @@ class JavascriptArtifactCreationService : IArtifactCreationService {
SourceMark.Type.GUTTER
) as ExpressionGutterMark
return if (autoApply) {
if (gutterMark.canApply()) {
gutterMark.apply(true)
gutterMark
} else {
null
}
gutterMark.apply(true)
gutterMark
} else {
gutterMark
}
Expand Down Expand Up @@ -151,12 +147,8 @@ class JavascriptArtifactCreationService : IArtifactCreationService {
SourceMark.Type.INLAY
) as ExpressionInlayMark
return if (autoApply) {
if (inlayMark.canApply()) {
inlayMark.apply(true)
inlayMark
} else {
error("Could not apply inlay mark: $inlayMark")
}
inlayMark.apply(true)
inlayMark
} else {
inlayMark
}
Expand Down Expand Up @@ -188,12 +180,8 @@ class JavascriptArtifactCreationService : IArtifactCreationService {
SourceMark.Type.INLAY
) as ExpressionInlayMark
return if (autoApply) {
if (inlayMark.canApply()) {
inlayMark.apply(true)
inlayMark
} else {
null
}
inlayMark.apply(true)
inlayMark
} else {
inlayMark
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,15 +79,18 @@ class JavascriptArtifactNamingService : IArtifactNamingService {

override fun getFullyQualifiedName(element: PsiElement): ArtifactQualifiedName {
return when (element) {
is JSClass -> {
ArtifactQualifiedName(element.qualifiedName!!, null, ArtifactType.CLASS)
}
is JSClass -> ArtifactQualifiedName(
element.qualifiedName!!,
type = ArtifactType.CLASS,
lineNumber = SourceMarkerUtils.getLineNumber(element)
)

is JSFunctionExpression -> getStatementOrExpressionQualifiedName(element, ArtifactType.EXPRESSION)

is JSFunction -> {
ArtifactQualifiedName(element.qualifiedName!!, null, ArtifactType.METHOD)
}
is JSFunction -> ArtifactQualifiedName(
element.qualifiedName!!,
type = ArtifactType.METHOD,
lineNumber = SourceMarkerUtils.getLineNumber(element)
)

is JSStatement, is JSStatementList -> getStatementOrExpressionQualifiedName(element, ArtifactType.STATEMENT)
else -> getStatementOrExpressionQualifiedName(element, ArtifactType.EXPRESSION)
Expand All @@ -104,12 +107,14 @@ class JavascriptArtifactNamingService : IArtifactNamingService {
val parentElement = element.parentOfType<JSNamedElement>()
return if (parentElement != null) {
ArtifactQualifiedName(
"${getFullyQualifiedName(parentElement).identifier}.${name}", null, type,
"${getFullyQualifiedName(parentElement).identifier}.${name}",
type = type,
lineNumber = SourceMarkerUtils.getLineNumber(element)
)
} else {
ArtifactQualifiedName(
"${element.containingFile.virtualFile.path}#$name", null, type,
"${element.containingFile.virtualFile.path}#$name",
type = type,
lineNumber = SourceMarkerUtils.getLineNumber(element)
)
}
Expand All @@ -120,7 +125,13 @@ class JavascriptArtifactNamingService : IArtifactNamingService {
psiFile.acceptChildren(object : JSRecursiveWalkingElementVisitor() {
override fun visitJSClass(node: JSClass) { // TODO: check this also works for typescript classes, otherwise use visitTypescriptClass
super.visitJSClass(node)
classQualifiedNames.add(ArtifactQualifiedName(node.qualifiedName!!, type = ArtifactType.CLASS))
classQualifiedNames.add(
ArtifactQualifiedName(
node.qualifiedName!!,
type = ArtifactType.CLASS,
lineNumber = SourceMarkerUtils.getLineNumber(node)
)
)
}
})
return classQualifiedNames
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package spp.jetbrains.marker.jvm

import com.intellij.codeInsight.daemon.GutterIconNavigationHandler
import com.intellij.codeInsight.daemon.LineMarkerInfo
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.editor.markup.GutterIconRenderer
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
Expand All @@ -27,13 +26,11 @@ import com.intellij.psi.PsiJavaFile
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile
import org.jetbrains.uast.UClass
import org.jetbrains.uast.UMethod
import org.jetbrains.uast.toUElement
import org.jetbrains.uast.toUElementOfType
import spp.jetbrains.marker.SourceMarker
import spp.jetbrains.marker.impl.ArtifactCreationService
import spp.jetbrains.marker.plugin.SourceLineMarkerProvider
import spp.jetbrains.marker.jvm.service.utils.JVMMarkerUtils
import spp.jetbrains.marker.plugin.SourceLineMarkerProvider
import spp.jetbrains.marker.source.SourceFileMarker.Companion.SUPPORTED_FILE_TYPES
import spp.jetbrains.marker.source.mark.api.SourceMark
import spp.jetbrains.marker.source.mark.api.key.SourceKey
Expand All @@ -49,10 +46,6 @@ import spp.jetbrains.marker.source.mark.gutter.MethodGutterMark
*/
abstract class JVMLineMarkerProvider : SourceLineMarkerProvider() {

companion object {
private val log = logger<JVMLineMarkerProvider>()
}

override fun getLineMarkerInfo(
parent: PsiElement?,
element: PsiElement
Expand All @@ -65,9 +58,8 @@ abstract class JVMLineMarkerProvider : SourceLineMarkerProvider() {
}

private fun getClassGutterMark(element: PsiIdentifier): LineMarkerInfo<PsiElement>? {
val fileMarker = SourceMarker.getInstance(element.project).getSourceFileMarker(element.containingFile) ?: return null
val fileMarker = SourceMarker.getSourceFileMarker(element.containingFile) ?: return null
val artifactQualifiedName = JVMMarkerUtils.getFullyQualifiedName(element.parent.toUElement() as UClass)
if (!SourceMarker.getInstance(element.project).configuration.createSourceMarkFilter.test(artifactQualifiedName)) return null

//check by artifact name first due to user can erroneously name same class twice
var gutterMark = fileMarker.getSourceMark(artifactQualifiedName, SourceMark.Type.GUTTER) as ClassGutterMark?
Expand Down Expand Up @@ -95,14 +87,8 @@ abstract class JVMLineMarkerProvider : SourceLineMarkerProvider() {
}

private fun getMethodGutterMark(element: PsiElement): LineMarkerInfo<PsiElement>? {
val fileMarker = SourceMarker.getInstance(element.project).getSourceFileMarker(element.containingFile) ?: return null
val uMethod = element.parent.toUElementOfType<UMethod>()
if (uMethod == null) {
log.warn("Unable to transform to UMethod: ${element.parent}")
return null
}
val artifactQualifiedName = JVMMarkerUtils.getFullyQualifiedName(uMethod)
if (!SourceMarker.getInstance(element.project).configuration.createSourceMarkFilter.test(artifactQualifiedName)) return null
val fileMarker = SourceMarker.getSourceFileMarker(element.containingFile) ?: return null
val artifactQualifiedName = JVMMarkerUtils.getFullyQualifiedName(element)

//check by artifact name first due to user can erroneously name same method twice
var gutterMark = fileMarker.getSourceMark(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,9 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiMethodCallExpression
import com.intellij.psi.PsiStatement
import org.jetbrains.uast.UExpression
import org.jetbrains.uast.UMethod
import org.jetbrains.uast.toUElement
import spp.jetbrains.marker.SourceMarker
import spp.jetbrains.marker.plugin.SourceInlayHintProvider
import spp.jetbrains.marker.jvm.service.utils.JVMMarkerUtils
import spp.jetbrains.marker.plugin.SourceInlayHintProvider
import spp.jetbrains.marker.source.mark.inlay.InlayMark
import spp.jetbrains.marker.source.mark.inlay.config.InlayMarkVirtualText

Expand All @@ -44,19 +41,11 @@ class JVMSourceInlayHintProvider : SourceInlayHintProvider() {
if ((parent is PsiMethod && element === parent.nameIdentifier)
|| (JVMMarkerUtils.getNameIdentifier(parent) === element)
) {
val fileMarker = SourceMarker.getInstance(element.project).getSourceFileMarker(element.containingFile)!!
val artifactQualifiedName = JVMMarkerUtils.getFullyQualifiedName(parent.toUElement() as UMethod)
return if (!SourceMarker.getInstance(element.project).configuration.createSourceMarkFilter.test(artifactQualifiedName)) null else {
JVMMarkerUtils.getOrCreateMethodInlayMark(fileMarker, element)
}
val fileMarker = SourceMarker.getSourceFileMarker(element.containingFile)!!
return JVMMarkerUtils.getOrCreateMethodInlayMark(fileMarker, element)
} else if (element is PsiStatement) {
val fileMarker = SourceMarker.getInstance(element.project).getSourceFileMarker(element.containingFile)!!
val artifactQualifiedName = JVMMarkerUtils.getFullyQualifiedName(
JVMMarkerUtils.getUniversalExpression(element).toUElement() as UExpression
)
return if (!SourceMarker.getInstance(element.project).configuration.createSourceMarkFilter.test(artifactQualifiedName)) null else {
JVMMarkerUtils.getOrCreateExpressionInlayMark(fileMarker, element)
}
val fileMarker = SourceMarker.getSourceFileMarker(element.containingFile)!!
return JVMMarkerUtils.getOrCreateExpressionInlayMark(fileMarker, element)
}
return null
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,8 @@ class JVMArtifactCreationService : IArtifactCreationService {
SourceMark.Type.GUTTER
) as MethodGutterMark
return if (autoApply) {
if (gutterMark.canApply()) {
gutterMark.apply(true)
gutterMark
} else {
null
}
gutterMark.apply(true)
gutterMark
} else {
gutterMark
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.project.Project
import com.intellij.psi.*
import com.intellij.psi.util.ClassUtil
import org.jetbrains.uast.*
import spp.jetbrains.marker.IArtifactNamingService
import spp.jetbrains.marker.SourceMarker
import spp.jetbrains.marker.jvm.service.utils.JVMMarkerUtils
Expand Down Expand Up @@ -84,14 +83,7 @@ class JVMArtifactNamingService : IArtifactNamingService {
}

override fun getFullyQualifiedName(element: PsiElement): ArtifactQualifiedName {
return when (val uElement = element.toUElement()) {
is UClass -> JVMMarkerUtils.getFullyQualifiedName(uElement)
is UMethod -> JVMMarkerUtils.getFullyQualifiedName(uElement)
is UExpression -> JVMMarkerUtils.getFullyQualifiedName(element)
is UDeclaration -> JVMMarkerUtils.getFullyQualifiedName(element)
is UIdentifier -> JVMMarkerUtils.getFullyQualifiedName(element)
else -> TODO("Not yet implemented")
}
return JVMMarkerUtils.getFullyQualifiedName(element)
}

override fun getQualifiedClassNames(psiFile: PsiFile): List<ArtifactQualifiedName> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.intellij.psi.scope.util.PsiScopesUtil
import com.intellij.psi.util.parentOfTypes
import com.siyeh.ig.psiutils.ControlFlowUtils
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.joor.Reflect
import spp.jetbrains.marker.IArtifactScopeService
import spp.jetbrains.marker.SourceMarkerUtils
import spp.jetbrains.marker.source.SourceFileMarker
Expand All @@ -34,14 +35,6 @@ import spp.jetbrains.marker.source.SourceFileMarker
*/
class JVMArtifactScopeService : IArtifactScopeService {

fun isMethodAtLine(psiFile: PsiFile, lineNumber: Int): Boolean {
var el = SourceMarkerUtils.getElementAtLine(psiFile, lineNumber)
while (el is PsiKeyword || el is PsiModifierList) {
el = el.parent
}
return el is PsiMethod
}

override fun getScopeVariables(fileMarker: SourceFileMarker, lineNumber: Int): List<String> {
//determine available vars
var checkLine = lineNumber
Expand Down Expand Up @@ -73,4 +66,15 @@ class JVMArtifactScopeService : IArtifactScopeService {
}

override fun isJVM(element: PsiElement): Boolean = true

override fun canShowControlBar(psiElement: PsiElement): Boolean {
return when (psiElement::class.java.name) {
"org.jetbrains.kotlin.psi.KtObjectDeclaration" -> false
"org.jetbrains.kotlin.psi.KtProperty" -> {
Reflect.on(psiElement).call("isLocal").get<Boolean>() == true
}

else -> super.canShowControlBar(psiElement)
}
}
}
Loading