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
1 change: 0 additions & 1 deletion gen/oap/application/plugin/gen/OapTypes.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions gen/oap/application/plugin/gen/parser/OapParser.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

549 changes: 275 additions & 274 deletions gen/oap/application/plugin/gen/parser/_OapLexer.java

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 6 additions & 3 deletions gen/oap/application/plugin/gen/psi/OapModuleInclude.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions gen/oap/application/plugin/gen/psi/OapModuleServices.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 12 additions & 6 deletions gen/oap/application/plugin/gen/psi/impl/OapModuleIncludeImpl.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions grammars/_OapLexer.flex
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ WHITE_SPACE=[ \t\x0B\f\r]+
COMMENT=("//"|"#")[^\n]*
STRING=\"(\\\"|[^\"])*\"
UNQUOTED_STRING=([:jletterdigit:]|[-/\.]) ([:jletterdigit:]|[-/\. ])*
CLASS_NAME=([:jletter:] [:jletterdigit:]*)("." [:jletter:] [:jletterdigit:]*)+
CLASS_NAME=([:jletter:] [:jletterdigit:]*)("." [:jletter:] [:jletterdigit:]*)*
FIELD_NAME=[:jletter:] [:jletterdigit:]+
KEY_NAME=[:jletter:] ([:jletterdigit:]|[-/])*

Expand Down Expand Up @@ -141,7 +141,7 @@ KEY_NAME=[:jletter:] ([:jletterdigit:]|[-/])*
{BOOL} { return OAP_BOOL; }
"(" { return OAP_LEFTPAREN; }
")" { return OAP_RIGHTPAREN; }
{STRING} { return OAP_INCLUDE_RESOURCE_NAME; }
{STRING} { return OAP_STRING; }

{WHITE_SPACE} { return WHITE_SPACE; }
{NEXTLINE} { yypopState(); return WHITE_SPACE; }
Expand Down Expand Up @@ -457,6 +457,7 @@ KEY_NAME=[:jletter:] ([:jletterdigit:]|[-/])*
"{" { yypushState(_OBJECT); return OAP_LEFTBRACE; }

{KEY_NAME} { return OAP_KEY_NAME; }
{STRING} { return OAP_KEY_NAME; }
"." { return OAP_DOT; }
"=" { yypushState(_OBJECT_ENTITY); return OAP_EQ; }

Expand Down
8 changes: 5 additions & 3 deletions grammars/oap.bnf
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ reference_kernel_value ::= '<' reference_kernel_value_in '>' {
reference_type_modules ::= [] 'modules' { pin=1 }
reference_modules_name ::= [] (reference_value | 'this') {
pin=1
methods=[getReference]
methods=[getReferences]
implements="oap.application.plugin.psi.IModuleName"
}
reference_modules_service_name ::= [] reference_value {
Expand Down Expand Up @@ -176,7 +176,7 @@ module_enabled ::= 'enabled' '=' bool {
// dependsOn = [
module_depends_on_name ::= key_value {
implements=["oap.application.plugin.psi.IndentNormal";"oap.application.plugin.psi.IModuleName"]
methods=[getReference]
methods=[getReferences]
}
module_depends_on ::= 'dependsOn' '=' ('[' (module_depends_on_name (','? module_depends_on_name )* )? ']' | module_depends_on_name) {
pin=1
Expand All @@ -188,6 +188,7 @@ module_depends_on ::= 'dependsOn' '=' ('[' (module_depends_on_name (','? module_
module_services ::= 'services' '{' module_services_service* '}' {
pin=1
implements="oap.application.plugin.psi.OapKeyValuePair"
methods=[getServices]
}
service_name ::= key_name
module_services_service ::= service_name ( &'.' dot_implementation_service | object_service ) {
Expand Down Expand Up @@ -484,8 +485,9 @@ configuration_key_value_pair ::=
// ] // configurations

// include required("resource")
module_include ::= 'include' 'required' '(' include_resource_name ')' {
module_include ::= 'include' 'required' '(' string ')' {
pin=1
methods=[getReference]
}
// include required("resource")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@ package oap.application.plugin.completion

import com.intellij.codeInsight.completion.*
import com.intellij.codeInsight.lookup.LookupElementBuilder
import com.intellij.openapi.project.Project
import com.intellij.patterns.PlatformPatterns
import com.intellij.psi.PsiElement
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.stubs.StubIndex
import com.intellij.psi.util.PsiTreeUtil
import com.intellij.psi.util.parentOfType
import com.intellij.util.ProcessingContext
import oap.application.plugin.gen.psi.*
import oap.application.plugin.psi.ModuleUtils
import oap.application.plugin.stub.OapModuleNameIndex

class OapReferenceCompletionContributor : CompletionContributor() {
Expand Down Expand Up @@ -83,21 +81,11 @@ class OapReferenceCompletionContributor : CompletionContributor() {
result: CompletionResultSet
) {
val position: PsiElement = parameters.position
val moduleName: String? = (position.parent.parent as? OapReferenceModulesValueIn)?.referenceModulesName?.text
var moduleName: String? = (position.parent.parent as? OapReferenceModulesValueIn)?.referenceModulesName?.text
if (moduleName != null) {
val project: Project = position.project
val services: List<OapModuleServicesService> = ModuleUtils.getServices(position, moduleName)

val services: List<OapModuleServices>;

if ("this".equals(moduleName)) {
services = position.parentOfType<OapModuleServices>()?.let { listOf(it) } ?: emptyList()
} else {
services = StubIndex
.getElements(OapModuleNameIndex.KEY, moduleName, project, GlobalSearchScope.allScope(project), OapModuleNamePair::class.java)
.mapNotNull { PsiTreeUtil.findChildOfType(it.parent, OapModuleServices::class.java) }
}

val serviceNames: List<String> = services.flatMap { it.moduleServicesServiceList.map { it.serviceName.text } }
val serviceNames: List<String> = services.map { it.serviceName.text }

for (service in serviceNames.sorted()) {
result.addElement(LookupElementBuilder.create(service))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ class OapColorSettingsPage : ColorSettingsPage {
| <module_dependson_module_name>b</module_dependson_module_name>
|]
|
|<include>include</include> <required>required</required>("resource")
|
|<moduleservices>services</moduleservices> <brackets>{</brackets>
| <moduleservice>service-name</moduleservice> <brackets>{</brackets>
| <service_enabled>enabled</service_enabled> <eq>=</eq> <Boolean>false</Boolean>
Expand Down Expand Up @@ -85,6 +87,9 @@ class OapColorSettingsPage : ColorSettingsPage {
"moduledependson" to OapHighlighterColors.ModuleDependsOn,
"module_dependson_module_name" to OapHighlighterColors.ModuleDependsOnModuleName,

"include" to OapHighlighterColors.Include,
"required" to OapHighlighterColors.Required,

"moduleservices" to OapHighlighterColors.ModuleServices,
"moduleservice" to OapHighlighterColors.ModuleService,
"service_enabled" to OapHighlighterColors.ModuleServiceEnabled,
Expand Down Expand Up @@ -138,6 +143,10 @@ class OapColorSettingsPage : ColorSettingsPage {
"Module name" to OapHighlighterColors.ModuleName,
"Module dependsOn" to OapHighlighterColors.ModuleDependsOn,
"Module dependsOn [module name]" to OapHighlighterColors.ModuleDependsOnModuleName,

"Module include" to OapHighlighterColors.Include,
"Module include required" to OapHighlighterColors.Required,

"Services" to OapHighlighterColors.ModuleServices,
"Service Name" to OapHighlighterColors.ModuleService,
"Service enabled/disabled" to OapHighlighterColors.ModuleServiceEnabled,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ object OapHighlighterColors {
val ModuleDependsOn = key("OAP_MODULE_DEPENDS_ON", DefaultLanguageHighlighterColors.KEYWORD)
val ModuleDependsOnModuleName = key("OAP_MODULE_DEPENDS_ON_MODULE_NAME", DefaultLanguageHighlighterColors.LABEL)

val Include = key("OAP_INCLUDE", DefaultLanguageHighlighterColors.KEYWORD)
val Required = key("OAP_REQUIRED", DefaultLanguageHighlighterColors.KEYWORD)

val ModuleServices = key("OAP_MODULE_SERVICES", DefaultLanguageHighlighterColors.KEYWORD)
val ModuleService = key("OAP_MODULE_SERVICE", DefaultLanguageHighlighterColors.INSTANCE_FIELD)
val ModuleServiceEnabled = key("OAP_MODULE_SERVICE_ENABLED", DefaultLanguageHighlighterColors.KEYWORD)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ class OapSyntaxHighlightingAnnotator : Annotator {
OapTypes.OAP_ID_DEPENDS_ON -> annot(OapHighlighterColors.ModuleDependsOn)
OapTypes.OAP_MODULE_DEPENDS_ON_NAME -> annot(OapHighlighterColors.ModuleDependsOnModuleName)

OapTypes.OAP_ID_INCLUDE -> annot(OapHighlighterColors.Include)
OapTypes.OAP_ID_REQUIRED -> annot(OapHighlighterColors.Required)

OapTypes.OAP_ID_SERVICES -> annot(OapHighlighterColors.ModuleServices)
OapTypes.OAP_SERVICE_NAME -> annot(OapHighlighterColors.ModuleService)
OapTypes.OAP_ID_ENABLED -> annot(OapHighlighterColors.ModuleServiceEnabled)
Expand Down
27 changes: 23 additions & 4 deletions src/main/kotlin/oap/application/plugin/psi/ModuleUtils.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package oap.application.plugin.psi

import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.stubs.StubIndex
import com.intellij.psi.util.PsiTreeUtil
import oap.application.plugin.gen.psi.OapModuleName
import oap.application.plugin.gen.psi.OapModuleNamePair
import oap.application.plugin.gen.psi.OapModuleServicesService
import oap.application.plugin.gen.psi.OapReferenceModulesName
import oap.application.plugin.gen.psi.*
import oap.application.plugin.stub.OapModuleNameIndex

object ModuleUtils {
Expand All @@ -30,4 +29,24 @@ object ModuleUtils {
}

}

fun getServices(element: PsiElement, moduleNameOrThis: String?): List<OapModuleServicesService> {
var moduleName: String? = moduleNameOrThis;

if ("this".equals(moduleName)) {
moduleName = getModuleName(element.containingFile)
}

if (moduleName == null) {
return emptyList();
}

val project: Project = element.project;

return StubIndex
.getElements(OapModuleNameIndex.KEY, moduleName, project, GlobalSearchScope.allScope(project), OapModuleNamePair::class.java)
.mapNotNull { PsiTreeUtil.findChildOfType(it.parent, OapModuleServices::class.java) }
.flatMap { it.services }

}
}
Loading