Skip to content

Commit 6512e4b

Browse files
authored
Merge pull request #965 from nasa/issue-880-neighbor-path
Improve header paths in generated C++ code
2 parents f2dcf6d + af4be90 commit 6512e4b

226 files changed

Lines changed: 258 additions & 252 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

compiler/lib/src/main/scala/codegen/CppWriter/ArrayCppWriter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ case class ArrayCppWriter (
100100
private def getCppIncludes: CppDoc.Member = {
101101
val userHeaders = List(
102102
"Fw/Types/Assert.hpp",
103-
s"${s.getRelativePath(fileName).toString}.hpp"
103+
s.getIncludePath(symbol, fileName)
104104
).sorted.map(CppWriter.headerString).map(line)
105105
linesMember(Line.blank :: userHeaders, CppDoc.Lines.Cpp)
106106
}

compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/ComponentCppWriter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ case class ComponentCppWriter (
145145
"Fw/Types/Assert.hpp",
146146
"Fw/Types/ExternalString.hpp",
147147
"Fw/Types/String.hpp",
148-
s"${s.getRelativePath(fileName).toString}.hpp"
148+
s.getIncludePath(componentSymbol, fileName)
149149
).sorted.map(CppWriter.headerString).flatMap({
150150
case s: "#include \"Fw/Types/String.hpp\"" =>
151151
lines(

compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/TestWriter/ComponentGTestBaseWriter.scala

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,10 @@ case class ComponentGTestBaseWriter(
1616

1717
private val namespaceIdentList = componentNamespaceIdentList
1818

19-
private val relativeFileName = s.getRelativePath(fileName).toString
20-
2119
private val symbol = componentSymbol
2220

2321
private val testerFileName = ComputeCppFiles.FileNames.getComponentTesterBase(componentName)
2422

25-
private val testerRelativeFileName = s.getRelativePath(testerFileName).toString
26-
2723
def write: CppDoc = {
2824
val includeGuard = s.includeGuardFromQualifiedName(symbol, fileName)
2925
CppWriter.createCppDoc(
@@ -53,7 +49,7 @@ case class ComponentGTestBaseWriter(
5349

5450
private def getHppIncludes = {
5551
val userHeaders = List(
56-
s"$testerRelativeFileName.hpp",
52+
s.getIncludePath(componentSymbol, testerFileName),
5753
"gtest/gtest.h"
5854
).sorted.map(CppWriter.headerString).map(line)
5955
linesMember(
@@ -62,9 +58,11 @@ case class ComponentGTestBaseWriter(
6258
}
6359

6460
private def getCppIncludes = {
65-
val userHeader = lines(CppWriter.headerString(s"$relativeFileName.hpp"))
61+
val userHeaders = lines(
62+
CppWriter.headerString(s.getIncludePath(componentSymbol, fileName))
63+
)
6664
linesMember(
67-
addBlankPrefix(userHeader),
65+
addBlankPrefix(userHeaders),
6866
CppDoc.Lines.Cpp
6967
)
7068
}

compiler/lib/src/main/scala/codegen/CppWriter/ComponentCppWriter/TestWriter/ComponentTesterBaseWriter.scala

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ case class ComponentTesterBaseWriter(
1414

1515
private val componentFileName = ComputeCppFiles.FileNames.getComponent(componentName)
1616

17-
private val componentRelativeFileName = s.getRelativePath(componentFileName).toString
18-
1917
private val fileName = ComputeCppFiles.FileNames.getComponentTesterBase(componentName)
2018

2119
private val historyWriter = ComponentHistory(s, aNode)
@@ -24,14 +22,10 @@ case class ComponentTesterBaseWriter(
2422

2523
private val namespaceIdentList = componentNamespaceIdentList
2624

27-
private val relativeFileName = s.getRelativePath(fileName).toString
28-
29-
private val symbol = componentSymbol
30-
3125
private val externalParameterDelegate = ExternalParameterDelegate(s, aNode)
3226

3327
def write: CppDoc = {
34-
val includeGuard = s.includeGuardFromQualifiedName(symbol, fileName)
28+
val includeGuard = s.includeGuardFromQualifiedName(componentSymbol, fileName)
3529
CppWriter.createCppDoc(
3630
s"$name component test harness base class",
3731
fileName,
@@ -61,7 +55,7 @@ case class ComponentTesterBaseWriter(
6155

6256
private def getHppIncludes: CppDoc.Member = {
6357
val standardHeaders = List(
64-
s"$componentRelativeFileName.hpp",
58+
s.getIncludePath(componentSymbol, componentFileName),
6559
"Fw/Comp/PassiveComponentBase.hpp",
6660
"Fw/Port/InputSerializePort.hpp",
6761
"Fw/Types/Assert.hpp",
@@ -87,15 +81,17 @@ case class ComponentTesterBaseWriter(
8781
}
8882

8983
private def getCppIncludes: CppDoc.Member = {
90-
val userHeader = lines(CppWriter.headerString(s"$relativeFileName.hpp"))
84+
val userHeaders = lines(
85+
CppWriter.headerString(s.getIncludePath(componentSymbol, fileName))
86+
)
9187
val systemHeaders = List(
9288
"cstdlib",
9389
"cstring"
9490
).sorted.map(CppWriter.systemHeaderString).map(line)
9591
linesMember(
9692
List.concat(
9793
Line.blank :: systemHeaders,
98-
Line.blank :: userHeader
94+
Line.blank :: userHeaders
9995
),
10096
CppDoc.Lines.Cpp
10197
)

compiler/lib/src/main/scala/codegen/CppWriter/CppWriterState.scala

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,27 @@ case class CppWriterState(
127127
getQualifyingNameAsIdentList(psOpt, suffix1)
128128
}
129129

130+
/** Get the neighbor path of a symbol.
131+
* This is the path of the directory where the symbol is located,
132+
* with prefixes removed. */
133+
def getNeighborPath(
134+
sym: Symbol,
135+
fileName: String
136+
): String = {
137+
val loc = sym.getLoc.tuLocation
138+
val fullPath = loc.getNeighborPath(fileName)
139+
val path = removeLongestPathPrefix(fullPath)
140+
path.toString
141+
}
142+
130143
/** Get an include path for a symbol and a file name base */
131144
def getIncludePath(
132145
sym: Symbol,
133146
fileNameBase: String,
134147
headerExtension: String = "hpp"
135148
): String = {
136-
val loc = sym.getLoc.tuLocation
137-
val fullPath = loc.getNeighborPath(fileNameBase)
138-
val path = removeLongestPathPrefix(fullPath)
139-
s"${path.toString}.$headerExtension"
149+
val neighborPath = getNeighborPath(sym, fileNameBase)
150+
s"${neighborPath}.$headerExtension"
140151
}
141152

142153
/** Write include directives for autocoded files */

compiler/lib/src/main/scala/codegen/CppWriter/EnumCppWriter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ case class EnumCppWriter(
9797
val systemStrings = List("cstring", "limits")
9898
val strings = List(
9999
"Fw/Types/Assert.hpp",
100-
s"${s.getRelativePath(fileName).toString}.hpp"
100+
s.getIncludePath(symbol, fileName)
101101
)
102102
linesMember(
103103
List(

compiler/lib/src/main/scala/codegen/CppWriter/PortCppWriter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ case class PortCppWriter (
151151
val userHeaders = List(
152152
"Fw/Types/Assert.hpp",
153153
"Fw/Types/ExternalString.hpp",
154-
s"${s.getRelativePath(fileName).toString}.hpp"
154+
s.getIncludePath(symbol, fileName)
155155
).sorted.map(CppWriter.headerString).map(line)
156156
linesMember(
157157
Line.blank :: userHeaders,

compiler/lib/src/main/scala/codegen/CppWriter/StateMachineCppWriter/StateMachineCppWriter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ case class StateMachineCppWriter(
7575
private def getCppIncludes: CppDoc.Member = {
7676
val userHeaders = List.concat(
7777
standardUserCppHeaders,
78-
List(s"${s.getRelativePath(fileName)}.hpp").map(CppWriter.headerString)
78+
List(s.getIncludePath(symbol, fileName)).map(CppWriter.headerString)
7979
).sorted
8080
val headerLines = List.concat(
8181
addBlankPrefix(standardSystemCppHeaders.map(line)),

compiler/lib/src/main/scala/codegen/CppWriter/StructCppWriter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ case class StructCppWriter(
132132
private def getCppIncludes: CppDoc.Member = {
133133
val userHeaders = List(
134134
"Fw/Types/Assert.hpp",
135-
s"${s.getRelativePath(fileName).toString}.hpp",
135+
s.getIncludePath(symbol, fileName)
136136
).sorted.map(CppWriter.headerString).map(line)
137137
linesMember(Line.blank :: userHeaders, CppDoc.Lines.Cpp)
138138
}

compiler/lib/src/main/scala/codegen/CppWriter/TlmPacketSetCppWriter.scala

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ case class TlmPacketSetCppWriter(
1717

1818
private val Some(t) = s.a.topology
1919

20-
private val d = s.a.dictionaryMap(Symbol.Topology(t.aNode))
20+
private val topologySymbol = Symbol.Topology(t.aNode)
21+
22+
private val d = s.a.dictionaryMap(topologySymbol)
2123

2224
private val tps = d.tlmPacketSetMap(name)
2325

@@ -49,7 +51,7 @@ case class TlmPacketSetCppWriter(
4951
"Fw/Types/Assert.hpp",
5052
"Fw/Types/StringBase.hpp",
5153
"Fw/Time/Time.hpp",
52-
s"${s.getRelativePath(fileName).toString}.hpp",
54+
s.getIncludePath(topologySymbol, fileName)
5355
).sorted.map(CppWriter.headerString)
5456
val usedSymbolHeaders = s.writeIncludeDirectives(d.usedSymbolSet)
5557
val headers = standardHeaders ++ usedSymbolHeaders
@@ -127,7 +129,7 @@ case class TlmPacketSetCppWriter(
127129
)
128130

129131
private def getIncludeGuard: String = {
130-
val guard = s.a.getEnclosingNames(Symbol.Topology(t.aNode)) match {
132+
val guard = s.a.getEnclosingNames(topologySymbol) match {
131133
case Nil => namespaceName
132134
case names =>
133135
val qualifier = CppWriterState.identFromQualifiedName(
@@ -139,7 +141,7 @@ case class TlmPacketSetCppWriter(
139141
}
140142

141143
private def getMembers: List[CppDoc.Member] = {
142-
val nsil = s.getNamespaceIdentList(Symbol.Topology(t.aNode)) :+
144+
val nsil = s.getNamespaceIdentList(topologySymbol) :+
143145
namespaceName
144146
val members = getHppMembers ++ getCppMembers
145147
getHppIncludesMember :: getCppIncludesMember ::

0 commit comments

Comments
 (0)