26
26
package de.fraunhofer.aisec.cpg.passes.concepts.config.ini
27
27
28
28
import de.fraunhofer.aisec.cpg.TranslationContext
29
+ import de.fraunhofer.aisec.cpg.TranslationResult
29
30
import de.fraunhofer.aisec.cpg.graph.Component
30
31
import de.fraunhofer.aisec.cpg.graph.Node
31
32
import de.fraunhofer.aisec.cpg.graph.conceptNodes
@@ -37,6 +38,8 @@ import de.fraunhofer.aisec.cpg.graph.declarations.RecordDeclaration
37
38
import de.fraunhofer.aisec.cpg.graph.declarations.TranslationUnitDeclaration
38
39
import de.fraunhofer.aisec.cpg.graph.translationUnit
39
40
import de.fraunhofer.aisec.cpg.helpers.Util.warnWithFileLocation
41
+ import de.fraunhofer.aisec.cpg.passes.ImportResolver
42
+ import de.fraunhofer.aisec.cpg.passes.ImportResolverTask
40
43
import de.fraunhofer.aisec.cpg.passes.concepts.ConceptPass
41
44
import de.fraunhofer.aisec.cpg.passes.concepts.ConceptTask
42
45
import de.fraunhofer.aisec.cpg.passes.concepts.config.ProvideConfigTask
@@ -131,3 +134,23 @@ class IniFileConfigurationSourceTask(
131
134
return option
132
135
}
133
136
}
137
+
138
+ class IniFileImportTask (target : TranslationResult , pass : ImportResolver , ctx : TranslationContext ) :
139
+ ImportResolverTask (target, pass, ctx) {
140
+ override fun handleNode (node : Node ) {
141
+ // Check, if we have components with INI files
142
+ val iniComponents =
143
+ target.components.filter { it.language.name.localName == " IniFileLanguage" }
144
+
145
+ // Add them to as a dependency to all other components. At this point, we cannot know yet
146
+ // which component does import which INI file, but we need to make sure that the
147
+ // configuration is processed first
148
+ iniComponents.forEach { iniComponent ->
149
+ target.components.forEach { component ->
150
+ if (component != iniComponent) {
151
+ target.componentDependencies?.add(component, iniComponent)
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
0 commit comments