Skip to content

Commit

Permalink
Merge pull request #17 from just-ai/211/dev
Browse files Browse the repository at this point in the history
Release 211-0.5.2
  • Loading branch information
veptechno authored Nov 16, 2021
2 parents 892b0cb + 37a5d4f commit 8a0a204
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 20 deletions.
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
pluginGroup = com.justai.jaicf.plugin
pluginName = Jaicf Plugin
pluginVersion = 211-0.5.1
pluginVersion = 211-0.5.2

pluginSinceBuild = 211
pluginUntilBuild = 211.*

pluginVerifierIdeVersions = 2021.1.1, 2021.1.2, 2021.1.3
pluginVerifierIdeVersions = 2021.1.3

platformType = IC
platformVersion = 2021.1.3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<FunctionDescriptor>
get() = overriddenDescriptors.flatMap { it.allOverriddenDescriptors + it }

private fun KtTypeReference.classForRefactor(): KtClass? {
val bindingContext = analyze(BodyResolveMode.PARTIAL)
val type = bindingContext[BindingContext.TYPE, this] ?: return null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,17 @@ class ScenarioReferenceResolver(project: Project) : JaicfService(project) {
private val scenarioService = ScenarioDataService.getInstance(project)

private val resolvedReferences by cached(PsiModificationTracker.MODIFICATION_COUNT) {
mutableMapOf<KtReferenceExpression, Scenario?>()
mutableMapOf<Pair<KtReferenceExpression, State?>, 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)
}
}

Expand All @@ -63,10 +63,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) }
}

Expand All @@ -75,23 +79,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
}
}

Expand Down

0 comments on commit 8a0a204

Please sign in to comment.