Skip to content

Commit 9a1f215

Browse files
committed
Moving include detection into Context struct
Removed also utils.AddStringsToStringsSet(..) because passing through maps for removing duplicated elements doesn't guarantee to preserve the list order. Signed-off-by: Cristian Maglie <[email protected]>
1 parent 48c0180 commit 9a1f215

13 files changed

+52
-110
lines changed

src/arduino.cc/builder/constants/constants.go

-3
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,11 @@ const CTX_GCC_MINUS_E_SOURCE = "gccMinusESource"
9595
const CTX_GCC_MINUS_M_OUTPUT = "gccMinusMOutput"
9696
const CTX_HARDWARE = "hardware"
9797
const CTX_HARDWARE_REWRITE_RESULTS = "hardwareRewriteResults"
98-
const CTX_HEADER_TO_LIBRARIES = "headerToLibraries"
9998
const CTX_IMPORTED_LIBRARIES = "importedLibraries"
10099
const CTX_INCLUDE_FOLDERS = "includeFolders"
101100
const CTX_INCLUDE_SECTION = "includeSection"
102-
const CTX_INCLUDES = "includes"
103101
const CTX_INCLUDES_JUST_FOUND = "includesJustFound"
104102
const CTX_LIBRARIES_BUILD_PATH = "librariesBuildPath"
105-
const CTX_LIBRARIES = "libraries"
106103
const CTX_LIBRARY_RESOLUTION_RESULTS = "libraryResolutionResults"
107104
const CTX_LINE_OFFSET = "lineOffset"
108105
const CTX_LINE_WHERE_TO_INSERT_PROTOTYPES = "lineWhereToInsertPrototypes"

src/arduino.cc/builder/external_include_replacer.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
package builder
3131

3232
import (
33-
"arduino.cc/builder/constants"
33+
"arduino.cc/builder/types"
3434
"path/filepath"
3535
"strings"
3636
)
@@ -42,9 +42,9 @@ type ExternalIncludeReplacer struct {
4242
To string
4343
}
4444

45-
func (s *ExternalIncludeReplacer) Run(context map[string]interface{}) error {
45+
func (s *ExternalIncludeReplacer) Run(context map[string]interface{}, ctx *types.Context) error {
4646
source := context[s.SourceKey].(string)
47-
nonAbsoluteIncludes := findNonAbsoluteIncludes(context[constants.CTX_INCLUDES].([]string))
47+
nonAbsoluteIncludes := findNonAbsoluteIncludes(ctx.Includes)
4848

4949
for _, include := range nonAbsoluteIncludes {
5050
source = strings.Replace(source, s.From+"<"+include+">", s.To+"<"+include+">", -1)

src/arduino.cc/builder/gcc_minus_m_output_parser.go

+3-7
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,14 @@ package builder
3131

3232
import (
3333
"arduino.cc/builder/constants"
34+
"arduino.cc/builder/types"
3435
"arduino.cc/builder/utils"
3536
"strings"
3637
)
3738

3839
type GCCMinusMOutputParser struct{}
3940

40-
func (s *GCCMinusMOutputParser) Run(context map[string]interface{}) error {
41+
func (s *GCCMinusMOutputParser) Run(context map[string]interface{}, ctx *types.Context) error {
4142
output := context[constants.CTX_GCC_MINUS_M_OUTPUT].(string)
4243

4344
rows := strings.Split(output, "\n")
@@ -55,12 +56,7 @@ func (s *GCCMinusMOutputParser) Run(context map[string]interface{}) error {
5556
}
5657
}
5758

58-
if !utils.MapHas(context, constants.CTX_INCLUDES) {
59-
context[constants.CTX_INCLUDES] = includes
60-
return nil
61-
}
62-
63-
context[constants.CTX_INCLUDES] = utils.AddStringsToStringsSet(context[constants.CTX_INCLUDES].([]string), includes)
59+
ctx.Includes = utils.AppendIfNotPresent(ctx.Includes, includes...)
6460

6561
return nil
6662
}

src/arduino.cc/builder/includes_finder_with_regexp.go

+1-9
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ func (s *IncludesFinderWithRegExp) Run(context map[string]interface{}, ctx *type
5151
for _, match := range matches {
5252
includes = append(includes, strings.TrimSpace(match[1]))
5353
}
54-
5554
if len(includes) == 0 {
5655
include := findIncludesForOldCompilers(source)
5756
if include != "" {
@@ -60,14 +59,7 @@ func (s *IncludesFinderWithRegExp) Run(context map[string]interface{}, ctx *type
6059
}
6160

6261
context[constants.CTX_INCLUDES_JUST_FOUND] = includes
63-
64-
if !utils.MapHas(context, constants.CTX_INCLUDES) {
65-
context[constants.CTX_INCLUDES] = includes
66-
return nil
67-
}
68-
69-
context[constants.CTX_INCLUDES] = utils.AddStringsToStringsSet(context[constants.CTX_INCLUDES].([]string), includes)
70-
62+
ctx.Includes = utils.AppendIfNotPresent(ctx.Includes, includes...)
7163
return nil
7264
}
7365

src/arduino.cc/builder/includes_to_include_folders.go

+2-8
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,8 @@ import (
4242
type IncludesToIncludeFolders struct{}
4343

4444
func (s *IncludesToIncludeFolders) Run(context map[string]interface{}, ctx *types.Context) error {
45-
includes := []string{}
46-
if utils.MapHas(context, constants.CTX_INCLUDES) {
47-
includes = context[constants.CTX_INCLUDES].([]string)
48-
}
49-
headerToLibraries := make(map[string][]*types.Library)
50-
if utils.MapHas(context, constants.CTX_HEADER_TO_LIBRARIES) {
51-
headerToLibraries = context[constants.CTX_HEADER_TO_LIBRARIES].(map[string][]*types.Library)
52-
}
45+
includes := ctx.Includes
46+
headerToLibraries := ctx.HeaderToLibraries
5347

5448
platform := context[constants.CTX_TARGET_PLATFORM].(*types.Platform)
5549
actualPlatform := context[constants.CTX_ACTUAL_PLATFORM].(*types.Platform)

src/arduino.cc/builder/libraries_loader.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func (s *LibrariesLoader) Run(context map[string]interface{}, ctx *types.Context
8686
}
8787
}
8888

89-
context[constants.CTX_LIBRARIES] = libraries
89+
ctx.Libraries = libraries
9090

9191
headerToLibraries := make(map[string][]*types.Library)
9292
for _, library := range libraries {
@@ -100,7 +100,7 @@ func (s *LibrariesLoader) Run(context map[string]interface{}, ctx *types.Context
100100
}
101101
}
102102

103-
context[constants.CTX_HEADER_TO_LIBRARIES] = headerToLibraries
103+
ctx.HeaderToLibraries = headerToLibraries
104104

105105
return nil
106106
}

src/arduino.cc/builder/test/external_include_replacer_test.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ package test
3232
import (
3333
"arduino.cc/builder"
3434
"arduino.cc/builder/constants"
35+
"arduino.cc/builder/types"
3536
"github.com/stretchr/testify/require"
3637
"testing"
3738
)
@@ -72,11 +73,12 @@ var sourceWithPragmas = "#line 1 \"sketch_with_config.ino\"\n" +
7273

7374
func TestExternalIncludeReplacerIncludeToPragma(t *testing.T) {
7475
context := make(map[string]interface{})
76+
ctx := &types.Context{}
7577
context[constants.CTX_SOURCE] = sourceWithIncludes
76-
context[constants.CTX_INCLUDES] = []string{"/tmp/test184599776/sketch/config.h", "/tmp/test184599776/sketch/includes/de bug.h", "Bridge.h"}
78+
ctx.Includes = []string{"/tmp/test184599776/sketch/config.h", "/tmp/test184599776/sketch/includes/de bug.h", "Bridge.h"}
7779

7880
replacer := builder.ExternalIncludeReplacer{SourceKey: constants.CTX_SOURCE, TargetKey: constants.CTX_GCC_MINUS_E_SOURCE, From: "#include ", To: "#pragma ___MY_INCLUDE___ "}
79-
err := replacer.Run(context)
81+
err := replacer.Run(context, ctx)
8082
NoError(t, err)
8183

8284
require.Equal(t, sourceWithIncludes, context[constants.CTX_SOURCE].(string))
@@ -85,11 +87,12 @@ func TestExternalIncludeReplacerIncludeToPragma(t *testing.T) {
8587

8688
func TestExternalIncludeReplacerPragmaToInclude(t *testing.T) {
8789
context := make(map[string]interface{})
90+
ctx := &types.Context{}
8891
context[constants.CTX_GCC_MINUS_E_SOURCE] = sourceWithPragmas
89-
context[constants.CTX_INCLUDES] = []string{"/tmp/test184599776/sketch/config.h", "/tmp/test184599776/sketch/includes/de bug.h", "Bridge.h"}
92+
ctx.Includes = []string{"/tmp/test184599776/sketch/config.h", "/tmp/test184599776/sketch/includes/de bug.h", "Bridge.h"}
9093

9194
replacer := builder.ExternalIncludeReplacer{SourceKey: constants.CTX_GCC_MINUS_E_SOURCE, TargetKey: constants.CTX_GCC_MINUS_E_SOURCE, From: "#pragma ___MY_INCLUDE___ ", To: "#include "}
92-
err := replacer.Run(context)
95+
err := replacer.Run(context, ctx)
9396
NoError(t, err)
9497

9598
require.Nil(t, context[constants.CTX_SOURCE])

src/arduino.cc/builder/test/gcc_minus_m_output_parser_test.go

+10-9
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@ package test
3232
import (
3333
"arduino.cc/builder"
3434
"arduino.cc/builder/constants"
35+
"arduino.cc/builder/types"
3536
"github.com/stretchr/testify/require"
3637
"testing"
3738
)
3839

3940
func TestGCCMinusMOutputParser(t *testing.T) {
4041
context := make(map[string]interface{})
42+
ctx := &types.Context{}
4143

4244
output := "sketch_with_config.o: sketch_with_config.ino config.h de\\ bug.h Bridge.h\n" +
4345
"\n" +
@@ -50,11 +52,10 @@ func TestGCCMinusMOutputParser(t *testing.T) {
5052
context[constants.CTX_GCC_MINUS_M_OUTPUT] = output
5153

5254
parser := builder.GCCMinusMOutputParser{}
53-
err := parser.Run(context)
55+
err := parser.Run(context, ctx)
5456
NoError(t, err)
5557

56-
require.NotNil(t, context[constants.CTX_INCLUDES])
57-
includes := context[constants.CTX_INCLUDES].([]string)
58+
includes := ctx.Includes
5859
require.Equal(t, 3, len(includes))
5960
require.Equal(t, "config.h", includes[0])
6061
require.Equal(t, "de bug.h", includes[1])
@@ -63,22 +64,23 @@ func TestGCCMinusMOutputParser(t *testing.T) {
6364

6465
func TestGCCMinusMOutputParserEmptyOutput(t *testing.T) {
6566
context := make(map[string]interface{})
67+
ctx := &types.Context{}
6668

6769
output := "sketch.ino.o: /tmp/test699709208/sketch/sketch.ino.cpp"
6870

6971
context[constants.CTX_GCC_MINUS_M_OUTPUT] = output
7072

7173
parser := builder.GCCMinusMOutputParser{}
72-
err := parser.Run(context)
74+
err := parser.Run(context, ctx)
7375
NoError(t, err)
7476

75-
require.NotNil(t, context[constants.CTX_INCLUDES])
76-
includes := context[constants.CTX_INCLUDES].([]string)
77+
includes := ctx.Includes
7778
require.Equal(t, 0, len(includes))
7879
}
7980

8081
func TestGCCMinusMOutputParserFirstLineOnMultipleLines(t *testing.T) {
8182
context := make(map[string]interface{})
83+
ctx := &types.Context{}
8284

8385
output := "sketch_with_config.ino.o: \\\n" +
8486
" /tmp/test097286304/sketch/sketch_with_config.ino.cpp \\\n" +
@@ -94,11 +96,10 @@ func TestGCCMinusMOutputParserFirstLineOnMultipleLines(t *testing.T) {
9496
context[constants.CTX_GCC_MINUS_M_OUTPUT] = output
9597

9698
parser := builder.GCCMinusMOutputParser{}
97-
err := parser.Run(context)
99+
err := parser.Run(context, ctx)
98100
NoError(t, err)
99101

100-
require.NotNil(t, context[constants.CTX_INCLUDES])
101-
includes := context[constants.CTX_INCLUDES].([]string)
102+
includes := ctx.Includes
102103
require.Equal(t, 3, len(includes))
103104
require.Equal(t, "/tmp/test097286304/sketch/config.h", includes[0])
104105
require.Equal(t, "/tmp/test097286304/sketch/includes/de bug.h", includes[1])

src/arduino.cc/builder/test/includes_finder_with_gcc_test.go

+5-11
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ func TestIncludesFinderWithGCC(t *testing.T) {
5858
defer os.RemoveAll(buildPath)
5959

6060
commands := []types.Command{
61-
6261
&builder.ContainerSetupHardwareToolsLibsSketchAndProps{},
6362

6463
&builder.ContainerMergeCopySketchFiles{},
@@ -70,8 +69,7 @@ func TestIncludesFinderWithGCC(t *testing.T) {
7069
err := command.Run(context, ctx)
7170
NoError(t, err)
7271
}
73-
74-
require.Nil(t, context[constants.CTX_INCLUDES])
72+
require.Nil(t, ctx.Includes)
7573
}
7674

7775
func TestIncludesFinderWithGCCSketchWithConfig(t *testing.T) {
@@ -106,8 +104,7 @@ func TestIncludesFinderWithGCCSketchWithConfig(t *testing.T) {
106104
NoError(t, err)
107105
}
108106

109-
require.NotNil(t, context[constants.CTX_INCLUDES])
110-
includes := context[constants.CTX_INCLUDES].([]string)
107+
includes := ctx.Includes
111108
require.Equal(t, 1, len(includes))
112109
require.True(t, utils.SliceContains(includes, "Bridge.h"))
113110

@@ -147,8 +144,7 @@ func TestIncludesFinderWithGCCSketchWithDependendLibraries(t *testing.T) {
147144
NoError(t, err)
148145
}
149146

150-
require.NotNil(t, context[constants.CTX_INCLUDES])
151-
includes := context[constants.CTX_INCLUDES].([]string)
147+
includes := ctx.Includes
152148
require.Equal(t, 4, len(includes))
153149

154150
sort.Strings(includes)
@@ -199,8 +195,7 @@ func TestIncludesFinderWithGCCSketchWithThatChecksIfSPIHasTransactions(t *testin
199195
NoError(t, err)
200196
}
201197

202-
require.NotNil(t, context[constants.CTX_INCLUDES])
203-
includes := context[constants.CTX_INCLUDES].([]string)
198+
includes := ctx.Includes
204199
require.Equal(t, 1, len(includes))
205200
require.Equal(t, "SPI.h", includes[0])
206201

@@ -243,8 +238,7 @@ func TestIncludesFinderWithGCCSketchWithThatChecksIfSPIHasTransactionsAndInclude
243238
err := command.Run(context, ctx)
244239
require.Error(t, err)
245240

246-
require.NotNil(t, context[constants.CTX_INCLUDES])
247-
includes := context[constants.CTX_INCLUDES].([]string)
241+
includes := ctx.Includes
248242
require.Equal(t, 2, len(includes))
249243
sort.Strings(includes)
250244
require.Equal(t, "Inexistent.h", includes[0])

0 commit comments

Comments
 (0)