From f7c081accce46d3a5d129a3140abaff42ebb52ec Mon Sep 17 00:00:00 2001 From: Protasov Vitalii Date: Tue, 16 Nov 2021 14:56:46 +0300 Subject: [PATCH 1/5] project: update plugin demonstration picture --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ce0c19f..06121e1 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ JAICF IDEA Plugin enabled enhanced Scenario DSL support for Intellij IDEA. It provides intelligent state completions, inspections and templates to improve speed and quality of Scenario writing. -Plugin Demonstration +Plugin Demonstration ### Feature list: From 1e51cade72f485c8bdb4934ec89ec04612a866a4 Mon Sep 17 00:00:00 2001 From: Protasov Vitalii Date: Tue, 16 Nov 2021 18:11:31 +0300 Subject: [PATCH 2/5] #13 inspections: fix the inspection for classes with several super classes --- .../inspections/NotOverriddenReactionUsageInspection.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/justai/jaicf/plugin/inspections/NotOverriddenReactionUsageInspection.kt b/src/main/kotlin/com/justai/jaicf/plugin/inspections/NotOverriddenReactionUsageInspection.kt index 8f8421a..e013b6f 100644 --- a/src/main/kotlin/com/justai/jaicf/plugin/inspections/NotOverriddenReactionUsageInspection.kt +++ b/src/main/kotlin/com/justai/jaicf/plugin/inspections/NotOverriddenReactionUsageInspection.kt @@ -117,15 +117,18 @@ private val MemberDescriptor.isOpenOrAbstract: Boolean private val MemberDescriptor.isFinal: Boolean get() = modality == Modality.FINAL -private fun KotlinType.findOverridingFunction(descriptor: FunctionDescriptor) = (supertypes() + this) +private fun KotlinType.findOverridingFunction(descriptor: FunctionDescriptor) = (listOf(this) + supertypes()) .mapNotNull { it.toClassDescriptor } .firstOrNull { supertype -> supertype.findDeclaredFunction( descriptor.name.asString(), false - ) { it.overriddenDescriptors.contains(descriptor) } != null + ) { it.allOverriddenDescriptors.contains(descriptor) } != null } +private val FunctionDescriptor.allOverriddenDescriptors: Collection + get() = overriddenDescriptors.flatMap { it.allOverriddenDescriptors + it } + private fun KtTypeReference.classForRefactor(): KtClass? { val bindingContext = analyze(BodyResolveMode.PARTIAL) val type = bindingContext[BindingContext.TYPE, this] ?: return null From 47516e15b84b5fd16d109ab6ed4eba278fca7e5b Mon Sep 17 00:00:00 2001 From: Protasov Vitalii Date: Tue, 16 Nov 2021 18:45:20 +0300 Subject: [PATCH 3/5] #14 scenarios: improve resolver for parameters --- .../linker/ScenarioReferenceResolver.kt | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/com/justai/jaicf/plugin/scenarios/linker/ScenarioReferenceResolver.kt b/src/main/kotlin/com/justai/jaicf/plugin/scenarios/linker/ScenarioReferenceResolver.kt index b87447c..dd68c34 100644 --- a/src/main/kotlin/com/justai/jaicf/plugin/scenarios/linker/ScenarioReferenceResolver.kt +++ b/src/main/kotlin/com/justai/jaicf/plugin/scenarios/linker/ScenarioReferenceResolver.kt @@ -64,10 +64,14 @@ class ScenarioReferenceResolver(project: Project) : JaicfService(project) { } is KtParameter -> { + (resolvedElement.defaultValue as? KtReferenceExpression)?.let { + return getScenarioBody(it) + } + val parameterName = resolvedElement.name ?: return null - // TODO Maybe make a better search for value of parameter val argumentExpression = boundedState?.stateExpression?.argumentExpressionOrDefaultValue(parameterName) as? KtReferenceExpression + return argumentExpression?.let { getScenarioBody(it) } } @@ -76,23 +80,25 @@ class ScenarioReferenceResolver(project: Project) : JaicfService(project) { } else -> { - if (scenarioReference !is KtCallExpression) return null + return (scenarioReference as? KtCallExpression)?.let(::getScenarioBody) + } + } + } - if (scenarioReference.isStateDeclaration) return scenarioReference + private fun getScenarioBody(callExpression: KtCallExpression): KtExpression? { + if (callExpression.isStateDeclaration) return callExpression - return when (val resolved = scenarioReference.referenceExpression()?.resolve()) { - is KtNamedFunction -> (resolved.initializer as? KtCallExpression)?.let { - if (it.isStateDeclaration) it else null - } + return when (val resolved = callExpression.referenceExpression()?.resolve()) { + is KtNamedFunction -> (resolved.initializer as? KtCallExpression)?.let { + if (it.isStateDeclaration) it else null + } - is KtClass -> resolved.body?.scenarioBody + is KtClass -> resolved.body?.scenarioBody - is KtPrimaryConstructor -> - scenarioReference.argumentExpressionOrDefaultValue(SCENARIO_MODEL_FIELD_NAME) + is KtPrimaryConstructor -> + callExpression.argumentExpressionOrDefaultValue(SCENARIO_MODEL_FIELD_NAME) - else -> null - } - } + else -> null } } From 465d2c6db3a3a70bc1a14786612d7f9404ee6991 Mon Sep 17 00:00:00 2001 From: Protasov Vitalii Date: Tue, 16 Nov 2021 19:42:12 +0300 Subject: [PATCH 4/5] #15 scenarios: fix the resolver cache to avoid storing values by an incomplete key --- .../plugin/scenarios/linker/ScenarioReferenceResolver.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/justai/jaicf/plugin/scenarios/linker/ScenarioReferenceResolver.kt b/src/main/kotlin/com/justai/jaicf/plugin/scenarios/linker/ScenarioReferenceResolver.kt index dd68c34..e96f880 100644 --- a/src/main/kotlin/com/justai/jaicf/plugin/scenarios/linker/ScenarioReferenceResolver.kt +++ b/src/main/kotlin/com/justai/jaicf/plugin/scenarios/linker/ScenarioReferenceResolver.kt @@ -34,17 +34,17 @@ class ScenarioReferenceResolver(project: Project) : JaicfService(project) { private val scenarioService = ScenarioDataService.getInstance(project) private val resolvedReferences by cached(PsiModificationTracker.MODIFICATION_COUNT) { - mutableMapOf() + mutableMapOf, Scenario?>() } fun resolve(scenarioReference: KtReferenceExpression, boundedState: State? = null): Scenario? { if (scenarioReference.isRemoved || !enabled) return null - resolvedReferences?.get(scenarioReference)?.let { return it } + resolvedReferences?.get(scenarioReference to boundedState)?.let { return it } val body = getScenarioBody(scenarioReference, boundedState) ?: return null return resolveScenario(body)?.also { - resolvedReferences?.set(scenarioReference, it) + resolvedReferences?.set(scenarioReference to boundedState, it) } } From 5791b55240c2ea958c3f5995c45471564156e415 Mon Sep 17 00:00:00 2001 From: Protasov Vitalii Date: Tue, 16 Nov 2021 19:53:06 +0300 Subject: [PATCH 5/5] gradle: up version to 0.5.2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index dc0b359..880db24 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ pluginGroup = com.justai.jaicf.plugin pluginName = Jaicf Plugin -pluginVersion = 193-0.5.1 +pluginVersion = 193-0.5.2 pluginSinceBuild = 192 pluginUntilBuild = 193.*