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 @@ -16,6 +16,7 @@
*/
package spp.jetbrains.marker.js

import spp.jetbrains.marker.SourceMarkerUtils
import spp.jetbrains.marker.impl.*
import spp.jetbrains.marker.js.service.*

Expand All @@ -37,11 +38,11 @@ object JavascriptMarker {
}

fun setup() {
ArtifactCreationService.addService(JavascriptArtifactCreationService(), "JavaScript", "ECMAScript 6")
ArtifactNamingService.addService(JavascriptArtifactNamingService(), "JavaScript", "ECMAScript 6")
ArtifactScopeService.addService(JavascriptArtifactScopeService(), "JavaScript", "ECMAScript 6")
ArtifactConditionService.addService(JavascriptArtifactConditionService(), "JavaScript", "ECMAScript 6")
ArtifactTypeService.addService(JavascriptArtifactTypeService(), "JavaScript", "ECMAScript 6")
SourceGuideProvider.addProvider(JavascriptGuideProvider(), "JavaScript", "ECMAScript 6")
ArtifactCreationService.addService(JavascriptArtifactCreationService(), SourceMarkerUtils.getJavaScriptLanguages())
ArtifactNamingService.addService(JavascriptArtifactNamingService(), SourceMarkerUtils.getJavaScriptLanguages())
ArtifactScopeService.addService(JavascriptArtifactScopeService(), SourceMarkerUtils.getJavaScriptLanguages())
ArtifactConditionService.addService(JavascriptArtifactConditionService(), SourceMarkerUtils.getJavaScriptLanguages())
ArtifactTypeService.addService(JavascriptArtifactTypeService(), SourceMarkerUtils.getJavaScriptLanguages())
SourceGuideProvider.addProvider(JavascriptGuideProvider(), SourceMarkerUtils.getJavaScriptLanguages())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package spp.jetbrains.marker.js.service

import com.intellij.lang.Language
import com.intellij.lang.javascript.psi.*
import com.intellij.lang.javascript.psi.ecmal4.JSClass
import com.intellij.openapi.project.Project
Expand Down Expand Up @@ -60,7 +61,7 @@ class JavascriptArtifactNamingService : IArtifactNamingService {
return LiveSourceLocation(locationSource, lineNumber, service = serviceName)
}

override fun getLocation(language: String, artifactQualifiedName: ArtifactQualifiedName): String {
override fun getLocation(language: Language, artifactQualifiedName: ArtifactQualifiedName): String {
return if (artifactQualifiedName.identifier.contains("(")) {
artifactQualifiedName.identifier
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package spp.jetbrains.marker.jvm.service

import com.intellij.lang.Language
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.project.Project
import com.intellij.psi.*
Expand Down Expand Up @@ -57,7 +58,7 @@ class JVMArtifactNamingService : IArtifactNamingService {
return LiveSourceLocation(locationSource, lineNumber, service = serviceName)
}

override fun getLocation(language: String, artifactQualifiedName: ArtifactQualifiedName): String {
override fun getLocation(language: Language, artifactQualifiedName: ArtifactQualifiedName): String {
var fullyQualified = artifactQualifiedName.identifier
if (fullyQualified.contains("#")) {
fullyQualified = fullyQualified.substring(0, fullyQualified.indexOf("#"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package spp.jetbrains.marker.py.service

import com.intellij.lang.Language
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
Expand Down Expand Up @@ -47,7 +48,7 @@ class PythonArtifactNamingService : IArtifactNamingService {
return LiveSourceLocation(locationSource, lineNumber, service = serviceName)
}

override fun getLocation(language: String, artifactQualifiedName: ArtifactQualifiedName): String {
override fun getLocation(language: Language, artifactQualifiedName: ArtifactQualifiedName): String {
return artifactQualifiedName.identifier
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package spp.jetbrains.marker

import com.intellij.lang.Language
import spp.protocol.artifact.ArtifactLanguage

abstract class AbstractSourceMarkerService<T : ISourceMarkerService> {
Expand All @@ -31,10 +32,14 @@ abstract class AbstractSourceMarkerService<T : ISourceMarkerService> {
languages.forEach { services[it] = service }
}

internal fun getService(language: String): T {
private fun getService(language: String): T {
return services[language] ?: throw IllegalArgumentException("No service for language $language")
}

internal fun getService(language: Language): T {
return getService(language.baseLanguage?.id ?: language.id)
}

fun getService(language: ArtifactLanguage): T {
return when (language) {
ArtifactLanguage.JVM -> getService("JAVA")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package spp.jetbrains.marker

import com.intellij.lang.Language
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
Expand All @@ -39,7 +40,7 @@ interface IArtifactNamingService : ISourceMarkerService {
serviceName: String?
): LiveSourceLocation?

fun getLocation(language: String, artifactQualifiedName: ArtifactQualifiedName): String
fun getLocation(language: Language, artifactQualifiedName: ArtifactQualifiedName): String
fun getVariableName(element: PsiElement): String?
fun getFullyQualifiedName(element: PsiElement): ArtifactQualifiedName
fun getQualifiedClassNames(psiFile: PsiFile): List<ArtifactQualifiedName>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,8 @@ object SourceMarkerUtils {
fun getJvmLanguages(): List<String> {
return listOf("JAVA", "kotlin", "Groovy", "Scala")
}

fun getJavaScriptLanguages(): List<String> {
return listOf("JavaScript", "ECMAScript 6")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,6 @@ object ArtifactConditionService : AbstractSourceMarkerService<IArtifactCondition
}

override fun getCondition(condition: String, context: PsiElement): String {
return getService(context.language.id).getCondition(condition, context)
return getService(context.language).getCondition(condition, context)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ object ArtifactCreationService : AbstractSourceMarkerService<IArtifactCreationSe
lineNumber: Int,
autoApply: Boolean
): Optional<ExpressionGutterMark> {
return getService(fileMarker.psiFile.language.id)
return getService(fileMarker.psiFile.language)
.getOrCreateExpressionGutterMark(fileMarker, lineNumber, autoApply)
}

Expand All @@ -50,7 +50,7 @@ object ArtifactCreationService : AbstractSourceMarkerService<IArtifactCreationSe
element: PsiElement,
autoApply: Boolean
): MethodGutterMark? {
return getService(fileMarker.psiFile.language.id)
return getService(fileMarker.psiFile.language)
.getOrCreateMethodGutterMark(fileMarker, element, autoApply)
}

Expand All @@ -59,7 +59,7 @@ object ArtifactCreationService : AbstractSourceMarkerService<IArtifactCreationSe
lineNumber: Int,
autoApply: Boolean
): Optional<ExpressionInlayMark> {
return getService(fileMarker.psiFile.language.id)
return getService(fileMarker.psiFile.language)
.getOrCreateExpressionInlayMark(fileMarker, lineNumber, autoApply)
}

Expand All @@ -75,7 +75,7 @@ object ArtifactCreationService : AbstractSourceMarkerService<IArtifactCreationSe
element: PsiElement,
autoApply: Boolean
): MethodGutterMark {
return getService(fileMarker.psiFile.language.id)
return getService(fileMarker.psiFile.language)
.createMethodGutterMark(fileMarker, element, autoApply)
}

Expand All @@ -84,7 +84,7 @@ object ArtifactCreationService : AbstractSourceMarkerService<IArtifactCreationSe
element: PsiElement,
autoApply: Boolean
): MethodInlayMark {
return getService(fileMarker.psiFile.language.id)
return getService(fileMarker.psiFile.language)
.createMethodInlayMark(fileMarker, element, autoApply)
}

Expand All @@ -100,7 +100,7 @@ object ArtifactCreationService : AbstractSourceMarkerService<IArtifactCreationSe
lineNumber: Int,
autoApply: Boolean
): ExpressionGutterMark {
return getService(fileMarker.psiFile.language.id)
return getService(fileMarker.psiFile.language)
.createExpressionGutterMark(fileMarker, lineNumber, autoApply)
}

Expand All @@ -109,7 +109,7 @@ object ArtifactCreationService : AbstractSourceMarkerService<IArtifactCreationSe
lineNumber: Int,
autoApply: Boolean
): ExpressionInlayMark {
return getService(fileMarker.psiFile.language.id)
return getService(fileMarker.psiFile.language)
.createExpressionInlayMark(fileMarker, lineNumber, autoApply)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package spp.jetbrains.marker.impl

import com.intellij.lang.Language
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
Expand All @@ -40,23 +41,23 @@ object ArtifactNamingService : AbstractSourceMarkerService<IArtifactNamingServic
lineNumber: Int,
serviceName: String?
): LiveSourceLocation? {
return getService(sourceMark.language.id).getLiveSourceLocation(sourceMark, lineNumber, serviceName)
return getService(sourceMark.language).getLiveSourceLocation(sourceMark, lineNumber, serviceName)
}

override fun getLocation(language: String, artifactQualifiedName: ArtifactQualifiedName): String {
override fun getLocation(language: Language, artifactQualifiedName: ArtifactQualifiedName): String {
return getService(language).getLocation(language, artifactQualifiedName)
}

override fun getVariableName(element: PsiElement): String? {
return getService(element.language.id).getVariableName(element)
return getService(element.language).getVariableName(element)
}

override fun getFullyQualifiedName(element: PsiElement): ArtifactQualifiedName {
return getService(element.language.id).getFullyQualifiedName(element)
return getService(element.language).getFullyQualifiedName(element)
}

override fun getQualifiedClassNames(psiFile: PsiFile): List<ArtifactQualifiedName> {
return getService(psiFile.language.id).getQualifiedClassNames(psiFile)
return getService(psiFile.language).getQualifiedClassNames(psiFile)
}

override fun findPsiFile(language: ArtifactLanguage, project: Project, frame: LiveStackTraceElement): PsiFile? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,18 @@ import spp.jetbrains.marker.source.SourceFileMarker
object ArtifactScopeService : AbstractSourceMarkerService<IArtifactScopeService>(), IArtifactScopeService {

override fun getScopeVariables(fileMarker: SourceFileMarker, lineNumber: Int): List<String> {
return getService(fileMarker.psiFile.language.id).getScopeVariables(fileMarker, lineNumber)
return getService(fileMarker.psiFile.language).getScopeVariables(fileMarker, lineNumber)
}

override fun isInsideFunction(element: PsiElement): Boolean {
return getService(element.language.id).isInsideFunction(element)
return getService(element.language).isInsideFunction(element)
}

override fun isInsideEndlessLoop(element: PsiElement): Boolean {
return getService(element.language.id).isInsideEndlessLoop(element)
return getService(element.language).isInsideEndlessLoop(element)
}

override fun isJVM(element: PsiElement): Boolean {
return getService(element.language.id).isJVM(element)
return getService(element.language).isJVM(element)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ import spp.protocol.artifact.ArtifactType
object ArtifactTypeService : AbstractSourceMarkerService<IArtifactTypeService>(), IArtifactTypeService {

override fun getType(element: PsiElement): ArtifactType? {
return getService(element.language.id).getType(element)
return getService(element.language).getType(element)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
*/
package spp.jetbrains.marker.impl

import com.intellij.lang.Language
import com.intellij.openapi.application.ReadAction
import com.intellij.openapi.diagnostic.logger
import spp.jetbrains.marker.AbstractSourceGuideProvider
import spp.jetbrains.marker.source.SourceFileMarker

Expand All @@ -28,6 +30,7 @@ import spp.jetbrains.marker.source.SourceFileMarker
*/
object SourceGuideProvider : AbstractSourceGuideProvider {

private val log = logger<SourceGuideProvider>()
private val providers = mutableMapOf<String, MutableList<AbstractSourceGuideProvider>>()

fun addProvider(guideProvider: AbstractSourceGuideProvider, language: String, vararg languages: String) {
Expand All @@ -39,19 +42,28 @@ object SourceGuideProvider : AbstractSourceGuideProvider {
languages.forEach { providers.computeIfAbsent(it) { mutableListOf() }.add(guideProvider) }
}

private fun getProvider(language: String): AbstractSourceGuideProvider {
private fun getProvider(language: String): AbstractSourceGuideProvider? {
return providers[language]?.let {
object : AbstractSourceGuideProvider {
override fun determineGuideMarks(fileMarker: SourceFileMarker) {
it.forEach { provider -> provider.determineGuideMarks(fileMarker) }
}
}
} ?: throw IllegalArgumentException("No provider for language $language")
}
}

private fun getProvider(language: Language): AbstractSourceGuideProvider? {
return getProvider(language.baseLanguage?.id ?: language.id)
}

override fun determineGuideMarks(fileMarker: SourceFileMarker) {
ReadAction.run<Nothing> {
getProvider(fileMarker.psiFile.language.id).determineGuideMarks(fileMarker)
val guideProvider = getProvider(fileMarker.psiFile.language)
if (guideProvider != null) {
guideProvider.determineGuideMarks(fileMarker)
} else {
log.warn("No guide provider found for language: ${fileMarker.psiFile.language}")
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ private void initComponents() {
setBackground(getBackgroundColor());
label1 = new JLabel();
String location = ArtifactNamingService.INSTANCE.getLocation(
inlayMark.getLanguage().getID(),
inlayMark.getLanguage(),
inlayMark.getArtifactQualifiedName()
);
textField1 = new AutocompleteField(
Expand Down