2
2
3
3
package com.strumenta.kolasu.kcp
4
4
5
+ import com.strumenta.kolasu.model.BaseNode
5
6
import com.strumenta.kolasu.model.Node
6
7
import org.jetbrains.kotlin.backend.common.extensions.FirIncompatiblePluginAPI
7
8
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
@@ -21,6 +22,7 @@ class StarLasuIrGenerationExtension(
21
22
private fun checkASTNode (
22
23
irClass : IrClass ,
23
24
pluginContext : IrPluginContext ,
25
+ isBaseNode : Boolean ,
24
26
) {
25
27
irClass.primaryConstructor?.valueParameters?.forEach { param ->
26
28
if (param.isVal() && (param.isSingleContainment() || param.isSingleAttribute())) {
@@ -33,25 +35,45 @@ class StarLasuIrGenerationExtension(
33
35
}
34
36
irClass.accept(FieldObservableExtension (pluginContext), null )
35
37
irClass.accept(SettingParentExtension (pluginContext, messageCollector), null )
38
+ if (isBaseNode) {
39
+ // override val properties: List<FeatureDescription>
40
+ // get() = TODO("Not yet implemented")
41
+ }
36
42
}
37
43
38
44
override fun generate (
39
45
moduleFragment : IrModuleFragment ,
40
46
pluginContext : IrPluginContext ,
41
47
) {
48
+ messageCollector.report(
49
+ CompilerMessageSeverity .WARNING ,
50
+ " COMPILER PLUGIN IS GENERATING" ,
51
+ )
42
52
moduleFragment.files.forEach { irFile ->
43
- irFile.declarations.filterIsInstance( IrClass :: class .java ).forEach { irClass ->
53
+ irFile.declarations.filterIsInstance< IrClass >( ).forEach { irClass ->
44
54
val isASTNode =
45
55
irClass.getAllSuperclasses().any {
46
56
it.kotlinFqName.toString() == Node ::class .qualifiedName
47
57
}
48
- if (isASTNode) {
49
- messageCollector.report(
50
- CompilerMessageSeverity .INFO ,
51
- " AST class ${irClass.kotlinFqName} identified" ,
52
- irClass.compilerSourceLocation,
53
- )
54
- checkASTNode(irClass, pluginContext)
58
+ val isBaseNode =
59
+ irClass.getAllSuperclasses().any {
60
+ it.kotlinFqName.toString() == BaseNode ::class .qualifiedName
61
+ }
62
+ if (isASTNode || isBaseNode) {
63
+ if (isASTNode) {
64
+ messageCollector.report(
65
+ CompilerMessageSeverity .INFO ,
66
+ " AST class ${irClass.kotlinFqName} identified" ,
67
+ irClass.compilerSourceLocation,
68
+ )
69
+ } else {
70
+ messageCollector.report(
71
+ CompilerMessageSeverity .INFO ,
72
+ " BaseNode subclass ${irClass.kotlinFqName} identified" ,
73
+ irClass.compilerSourceLocation,
74
+ )
75
+ }
76
+ checkASTNode(irClass, pluginContext, isBaseNode)
55
77
}
56
78
}
57
79
}
0 commit comments