Skip to content

Commit 32ca625

Browse files
author
jantje
committed
Adding persistency for SourceEntry #1126
1 parent fa23e06 commit 32ca625

File tree

3 files changed

+126
-51
lines changed

3 files changed

+126
-51
lines changed

io.sloeber.autoBuild/src/io/sloeber/autoBuild/integration/AutoBuildConfigurationDescription.java

+45-49
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public class AutoBuildConfigurationDescription extends AutoBuildResourceData
4343
implements IAutoBuildConfigurationDescription {
4444
private static final String KEY_MODEL = "Model"; //$NON-NLS-1$
4545
private static final String KEY_CONFIGURATION = "configuration"; //$NON-NLS-1$
46-
private static final String KEY_EQUALS = "="; //$NON-NLS-1$
4746
private static final String KEY_PROJECT_TYPE = "projectType"; //$NON-NLS-1$
4847
private static final String KEY_EXTENSION_ID = "extensionID"; //$NON-NLS-1$
4948
private static final String KEY_EXTENSION_POINT_ID = "extensionPointID"; //$NON-NLS-1$
@@ -308,7 +307,7 @@ public AutoBuildConfigurationDescription(ICConfigurationDescription cfgDescripti
308307
if (!curLine.startsWith(lineStart)) {
309308
continue;
310309
}
311-
String field[] = curLine.split(KEY_EQUALS, 2);
310+
String field[] = curLine.split(EQUAL, 2);
312311
String key = field[0].substring(lineStart.length());
313312
String value = field[1];
314313
switch (key) {
@@ -416,7 +415,7 @@ public AutoBuildConfigurationDescription(ICConfigurationDescription cfgDescripti
416415
}
417416
}
418417

419-
if (!found && !key.startsWith(KEY_EXTENSION)) {
418+
if (!found && !key.startsWith(KEY_EXTENSION) && !key.startsWith(KEY_SOURCE_ENTRY)) {
420419
System.err.println("Following autobuild configuration line is ignored " + curLine); //$NON-NLS-1$
421420
}
422421
}
@@ -904,26 +903,25 @@ public void setCustomBuildCommand(String makeArgs) {
904903

905904
public StringBuffer serialize(String linePrefix, String lineEnd) {
906905
int counterStart = 0;
907-
StringBuffer ret = new StringBuffer();
906+
StringBuffer ret = super.serialize(linePrefix, lineEnd);
908907
IProjectType projectType = myAutoBuildConfiguration.getProjectType();
909-
ret.append(linePrefix + KEY_MODEL + DOT + KEY_PROJECT_TYPE + DOT + KEY_EXTENSION_POINT_ID + KEY_EQUALS
908+
ret.append(linePrefix + KEY_MODEL + DOT + KEY_PROJECT_TYPE + DOT + KEY_EXTENSION_POINT_ID + EQUAL
910909
+ projectType.getExtensionPointID() + lineEnd);
911-
ret.append(linePrefix + KEY_MODEL + DOT + KEY_PROJECT_TYPE + DOT + KEY_EXTENSION_ID + KEY_EQUALS
910+
ret.append(linePrefix + KEY_MODEL + DOT + KEY_PROJECT_TYPE + DOT + KEY_EXTENSION_ID + EQUAL
912911
+ projectType.getExtensionID() + lineEnd);
913-
ret.append(linePrefix + KEY_MODEL + DOT + KEY_PROJECT_TYPE + DOT + ID + KEY_EQUALS + projectType.getId()
914-
+ lineEnd);
915-
ret.append(linePrefix + KEY_MODEL + DOT + KEY_CONFIGURATION + DOT + NAME + KEY_EQUALS
912+
ret.append(linePrefix + KEY_MODEL + DOT + KEY_PROJECT_TYPE + DOT + ID + EQUAL + projectType.getId() + lineEnd);
913+
ret.append(linePrefix + KEY_MODEL + DOT + KEY_CONFIGURATION + DOT + NAME + EQUAL
916914
+ myAutoBuildConfiguration.getName() + lineEnd);
917915

918-
ret.append(linePrefix + NAME + KEY_EQUALS + myName + lineEnd);
919-
ret.append(linePrefix + DESCRIPTION + KEY_EQUALS);
916+
ret.append(linePrefix + NAME + EQUAL + myName + lineEnd);
917+
ret.append(linePrefix + DESCRIPTION + EQUAL);
920918
ret.append(myDescription);
921919
ret.append(lineEnd);
922920

923-
//ret.append(linePrefix + ID + KEY_EQUALS + myId + lineEnd);
921+
//ret.append(linePrefix + ID + EQUAL + myId + lineEnd);
924922

925923
for (Entry<String, String> curProp : myProperties.entrySet()) {
926-
ret.append(linePrefix + KEY_PROPERTY + DOT + curProp.getKey() + KEY_EQUALS + curProp.getValue() + lineEnd);
924+
ret.append(linePrefix + KEY_PROPERTY + DOT + curProp.getKey() + EQUAL + curProp.getValue() + lineEnd);
927925
}
928926
int counter = counterStart;
929927
for (Entry<ITool, Map<IResource, Map<String, String>>> curOption1 : mySelectedOptions.entrySet()) {
@@ -936,44 +934,42 @@ public StringBuffer serialize(String linePrefix, String lineEnd) {
936934
IResource resource = curOption.getKey();
937935
String resourceID = resource.getProjectRelativePath().toString();
938936
for (Entry<String, String> resourceOptions : curOption.getValue().entrySet()) {
939-
ret.append(linePrefix + OPTION + DOT + KEY + DOT + String.valueOf(counter) + KEY_EQUALS
937+
ret.append(linePrefix + OPTION + DOT + KEY + DOT + String.valueOf(counter) + EQUAL
940938
+ resourceOptions.getKey() + lineEnd);
941-
ret.append(linePrefix + OPTION + DOT + KEY_VALUE + DOT + String.valueOf(counter) + KEY_EQUALS
939+
ret.append(linePrefix + OPTION + DOT + KEY_VALUE + DOT + String.valueOf(counter) + EQUAL
942940
+ resourceOptions.getValue() + lineEnd);
943-
ret.append(linePrefix + OPTION + DOT + KEY_RESOURCE + DOT + String.valueOf(counter) + KEY_EQUALS
941+
ret.append(linePrefix + OPTION + DOT + KEY_RESOURCE + DOT + String.valueOf(counter) + EQUAL
944942
+ resourceID + lineEnd);
945-
ret.append(linePrefix + OPTION + DOT + KEY_TOOL + DOT + String.valueOf(counter) + KEY_EQUALS
946-
+ toolID + lineEnd);
943+
ret.append(linePrefix + OPTION + DOT + KEY_TOOL + DOT + String.valueOf(counter) + EQUAL + toolID
944+
+ lineEnd);
947945
counter++;
948946
}
949947
}
950948
}
951949

952-
ret.append(linePrefix + KEY_BUILDFOLDER + KEY_EQUALS + myBuildFolderString + lineEnd);
953-
ret.append(linePrefix + KEY_USE_DEFAULT_BUILD_COMMAND + KEY_EQUALS + String.valueOf(myUseDefaultBuildCommand)
950+
ret.append(linePrefix + KEY_BUILDFOLDER + EQUAL + myBuildFolderString + lineEnd);
951+
ret.append(linePrefix + KEY_USE_DEFAULT_BUILD_COMMAND + EQUAL + String.valueOf(myUseDefaultBuildCommand)
954952
+ lineEnd);
955-
ret.append(linePrefix + KEY_GENERATE_MAKE_FILES_AUTOMATICALLY + KEY_EQUALS
953+
ret.append(linePrefix + KEY_GENERATE_MAKE_FILES_AUTOMATICALLY + EQUAL
956954
+ String.valueOf(myGenerateMakeFilesAUtomatically) + lineEnd);
957-
ret.append(linePrefix + KEY_USE_STANDARD_BUILD_ARGUMENTS + KEY_EQUALS
958-
+ String.valueOf(myUseStandardBuildArguments) + lineEnd);
959-
ret.append(
960-
linePrefix + KEY_STOP_ON_FIRST_ERROR + KEY_EQUALS + String.valueOf(myStopOnFirstBuildError) + lineEnd);
961-
ret.append(linePrefix + KEY_IS_PARRALLEL_BUILD + KEY_EQUALS + String.valueOf(myIsParallelBuild) + lineEnd);
962-
ret.append(
963-
linePrefix + KEY_IS_CLEAN_BUILD_ENABLED + KEY_EQUALS + String.valueOf(myIsCleanBuildEnabled) + lineEnd);
964-
ret.append(linePrefix + KEY_IS_INCREMENTAL_BUILD_ENABLED + KEY_EQUALS
965-
+ String.valueOf(myIsIncrementalBuildEnabled) + lineEnd);
966-
ret.append(linePrefix + KEY_NUM_PARRALEL_BUILDS + KEY_EQUALS + String.valueOf(myParallelizationNum) + lineEnd);
967-
ret.append(linePrefix + KEY_CUSTOM_BUILD_COMMAND + KEY_EQUALS + myCustomBuildCommand + lineEnd);
968-
ret.append(linePrefix + KEY_BUILD_RUNNER_NAME + KEY_EQUALS + myBuildRunner.getName() + lineEnd);
969-
ret.append(linePrefix + KEY_AUTO_MAKE_TARGET + KEY_EQUALS + myAutoMakeTarget + lineEnd);
970-
ret.append(linePrefix + KEY_INCREMENTAL_MAKE_TARGET + KEY_EQUALS + myIncrementalMakeTarget + lineEnd);
971-
ret.append(linePrefix + KEY_CLEAN_MAKE_TARGET + KEY_EQUALS + myCleanMakeTarget + lineEnd);
972-
973-
ret.append(linePrefix + KEY_PRE_BUILD_STEP + KEY_EQUALS + myPreBuildStep + lineEnd);
974-
ret.append(linePrefix + KEY_PRE_BUILD_ANNOUNCEMENT + KEY_EQUALS + myPreBuildAnnouncement + lineEnd);
975-
ret.append(linePrefix + KEY_POST_BUILD_STEP + KEY_EQUALS + myPostBuildStep + lineEnd);
976-
ret.append(linePrefix + KEY_POST_BUILD_ANNOUNCEMENT + KEY_EQUALS + myPostBuildStepAnouncement + lineEnd);
955+
ret.append(linePrefix + KEY_USE_STANDARD_BUILD_ARGUMENTS + EQUAL + String.valueOf(myUseStandardBuildArguments)
956+
+ lineEnd);
957+
ret.append(linePrefix + KEY_STOP_ON_FIRST_ERROR + EQUAL + String.valueOf(myStopOnFirstBuildError) + lineEnd);
958+
ret.append(linePrefix + KEY_IS_PARRALLEL_BUILD + EQUAL + String.valueOf(myIsParallelBuild) + lineEnd);
959+
ret.append(linePrefix + KEY_IS_CLEAN_BUILD_ENABLED + EQUAL + String.valueOf(myIsCleanBuildEnabled) + lineEnd);
960+
ret.append(linePrefix + KEY_IS_INCREMENTAL_BUILD_ENABLED + EQUAL + String.valueOf(myIsIncrementalBuildEnabled)
961+
+ lineEnd);
962+
ret.append(linePrefix + KEY_NUM_PARRALEL_BUILDS + EQUAL + String.valueOf(myParallelizationNum) + lineEnd);
963+
ret.append(linePrefix + KEY_CUSTOM_BUILD_COMMAND + EQUAL + myCustomBuildCommand + lineEnd);
964+
ret.append(linePrefix + KEY_BUILD_RUNNER_NAME + EQUAL + myBuildRunner.getName() + lineEnd);
965+
ret.append(linePrefix + KEY_AUTO_MAKE_TARGET + EQUAL + myAutoMakeTarget + lineEnd);
966+
ret.append(linePrefix + KEY_INCREMENTAL_MAKE_TARGET + EQUAL + myIncrementalMakeTarget + lineEnd);
967+
ret.append(linePrefix + KEY_CLEAN_MAKE_TARGET + EQUAL + myCleanMakeTarget + lineEnd);
968+
969+
ret.append(linePrefix + KEY_PRE_BUILD_STEP + EQUAL + myPreBuildStep + lineEnd);
970+
ret.append(linePrefix + KEY_PRE_BUILD_ANNOUNCEMENT + EQUAL + myPreBuildAnnouncement + lineEnd);
971+
ret.append(linePrefix + KEY_POST_BUILD_STEP + EQUAL + myPostBuildStep + lineEnd);
972+
ret.append(linePrefix + KEY_POST_BUILD_ANNOUNCEMENT + EQUAL + myPostBuildStepAnouncement + lineEnd);
977973

978974
counter = counterStart;
979975
for (Entry<ITool, Map<IResource, String>> curCustomToolCommands : myCustomToolCommands.entrySet()) {
@@ -982,12 +978,12 @@ public StringBuffer serialize(String linePrefix, String lineEnd) {
982978
for (Entry<IResource, String> curResourceCommand : curCustomToolCommands.getValue().entrySet()) {
983979
IResource res = curResourceCommand.getKey();
984980
String resourceID = res.getProjectRelativePath().toString();
985-
ret.append(linePrefix + KEY_CUSTOM_TOOL_COMMAND + DOT + KEY + DOT + String.valueOf(counter) + KEY_EQUALS
981+
ret.append(linePrefix + KEY_CUSTOM_TOOL_COMMAND + DOT + KEY + DOT + String.valueOf(counter) + EQUAL
986982
+ tool.getId() + lineEnd);
987983
ret.append(linePrefix + KEY_CUSTOM_TOOL_COMMAND + DOT + KEY_VALUE + DOT + String.valueOf(counter)
988-
+ KEY_EQUALS + curResourceCommand.getValue() + lineEnd);
984+
+ EQUAL + curResourceCommand.getValue() + lineEnd);
989985
ret.append(linePrefix + KEY_CUSTOM_TOOL_COMMAND + DOT + KEY_RESOURCE + DOT + String.valueOf(counter)
990-
+ KEY_EQUALS + resourceID + lineEnd);
986+
+ EQUAL + resourceID + lineEnd);
991987
counter++;
992988
}
993989
}
@@ -999,12 +995,12 @@ public StringBuffer serialize(String linePrefix, String lineEnd) {
999995
for (Entry<IResource, String> curResourceCommand : curCustomToolCommands.getValue().entrySet()) {
1000996
IResource res = curResourceCommand.getKey();
1001997
String resourceID = res.getProjectRelativePath().toString();
1002-
ret.append(linePrefix + KEY_CUSTOM_TOOL_PATTERN + DOT + KEY + DOT + String.valueOf(counter) + KEY_EQUALS
998+
ret.append(linePrefix + KEY_CUSTOM_TOOL_PATTERN + DOT + KEY + DOT + String.valueOf(counter) + EQUAL
1003999
+ tool.getId() + lineEnd);
10041000
ret.append(linePrefix + KEY_CUSTOM_TOOL_PATTERN + DOT + KEY_VALUE + DOT + String.valueOf(counter)
1005-
+ KEY_EQUALS + curResourceCommand.getValue() + lineEnd);
1001+
+ EQUAL + curResourceCommand.getValue() + lineEnd);
10061002
ret.append(linePrefix + KEY_CUSTOM_TOOL_PATTERN + DOT + KEY_RESOURCE + DOT + String.valueOf(counter)
1007-
+ KEY_EQUALS + resourceID + lineEnd);
1003+
+ EQUAL + resourceID + lineEnd);
10081004
counter++;
10091005
}
10101006
}
@@ -1013,9 +1009,9 @@ public StringBuffer serialize(String linePrefix, String lineEnd) {
10131009
Class<? extends AutoBuildConfigurationExtensionDescription> referencedClass = myAutoBuildCfgExtDes
10141010
.getClass();
10151011

1016-
ret.append(linePrefix + KEY_AUTOBUILD_EXTENSION_BUNDEL + KEY_EQUALS + myAutoBuildCfgExtDes.getBundelName()
1012+
ret.append(linePrefix + KEY_AUTOBUILD_EXTENSION_BUNDEL + EQUAL + myAutoBuildCfgExtDes.getBundelName()
10171013
+ lineEnd);
1018-
ret.append(linePrefix + KEY_AUTOBUILD_EXTENSION_CLASS + KEY_EQUALS + referencedClass.getName() + lineEnd);
1014+
ret.append(linePrefix + KEY_AUTOBUILD_EXTENSION_CLASS + EQUAL + referencedClass.getName() + lineEnd);
10191015
ret.append(myAutoBuildCfgExtDes.serialize(linePrefix + KEY_EXTENSION + DOT, lineEnd));
10201016
}
10211017

io.sloeber.autoBuild/src/io/sloeber/autoBuild/integration/AutoBuildConstants.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public class AutoBuildConstants {
8787
public static final String MODFILE_NAME = "subdir.mk";
8888
public static final String OBJECTS_MAKFILE = "objects.mk";
8989
public static final String OUT_MACRO = "$@";
90-
public static final String ROOT = "..";
90+
public static final String ROOT = "<root>";
9191
public static final String SEPARATOR = "/";
9292
public static final String SINGLE_QUOTE = "'";
9393
public static final String SRCSFILE_NAME = "sources.mk";

io.sloeber.autoBuild/src/io/sloeber/autoBuild/integration/AutoBuildResourceData.java

+80-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package io.sloeber.autoBuild.integration;
22

3+
import static io.sloeber.autoBuild.integration.AutoBuildConstants.*;
4+
5+
import java.lang.reflect.Constructor;
6+
import java.lang.reflect.InvocationTargetException;
37
import java.util.Arrays;
48
/**
59
* A abstract class to satisfy the resource handling required from a CConfigurationData implementation
@@ -13,6 +17,8 @@
1317
import java.util.HashSet;
1418
import java.util.Map;
1519
import java.util.Set;
20+
import java.util.regex.Pattern;
21+
import java.util.Map.Entry;
1622

1723
import org.eclipse.cdt.core.settings.model.CSourceEntry;
1824
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
@@ -25,11 +31,20 @@
2531
import org.eclipse.cdt.core.settings.model.extension.CResourceData;
2632
import org.eclipse.cdt.core.settings.model.extension.impl.CDataFactory;
2733
import org.eclipse.core.resources.IProject;
34+
import org.eclipse.core.resources.IResource;
2835
import org.eclipse.core.runtime.CoreException;
2936
import org.eclipse.core.runtime.IPath;
3037
import org.eclipse.core.runtime.Path;
38+
import org.osgi.framework.Bundle;
39+
40+
import io.sloeber.autoBuild.api.AutoBuildConfigurationExtensionDescription;
41+
import io.sloeber.autoBuild.api.IAutoBuildConfigurationDescription;
42+
import io.sloeber.autoBuild.api.IBuildRunner;
43+
import io.sloeber.schema.api.IProjectType;
44+
import io.sloeber.schema.api.ITool;
3145

3246
public abstract class AutoBuildResourceData extends CConfigurationData {
47+
protected static final String KEY_SOURCE_ENTRY = "SourceEntry"; //$NON-NLS-1$
3348
protected IProject myProject;
3449
private Map<String, CResourceData> myResourceDatas = new HashMap<>();
3550
private ICSourceEntry mySourceEntries[] = null;
@@ -67,7 +82,50 @@ private void cloneSourceEntries(ICSourceEntry entries[]) {
6782
*/
6883
public AutoBuildResourceData(ICConfigurationDescription cfgDescription, String curConfigsText, String lineStart,
6984
String lineEnd) {
70-
//TODO
85+
//TODO read Map<String, CResourceData> myResourceDatas = new HashMap<>();
86+
//TODO read ICSourceEntry mySourceEntries[] = null;
87+
//TODO read CFolderData myRootFolderData;
88+
Set<ICSourceEntry> sourceEntries = new HashSet<>();
89+
String[] lines = curConfigsText.split(Pattern.quote(lineEnd));
90+
for (String curLine : lines) {
91+
if (!curLine.startsWith(lineStart)) {
92+
continue;
93+
}
94+
String field[] = curLine.substring(lineStart.length()).split(Pattern.quote(EQUAL), 2);
95+
if (field.length < 2) {
96+
System.err.println("error processing " + curLine + NEWLINE); //$NON-NLS-1$
97+
continue;
98+
}
99+
String keysField = field[0];
100+
String valuesField = field[1];
101+
String keys[] = keysField.split(Pattern.quote(DOT), 2);
102+
103+
String key = keys[0];
104+
switch (key) {
105+
case KEY_SOURCE_ENTRY:
106+
String name = keys[1];
107+
if (keys.length < 2) {
108+
System.err.println("error processing keys of " + curLine + NEWLINE); //$NON-NLS-1$
109+
continue;
110+
}
111+
String values[] = valuesField.split(Pattern.quote(COLON));
112+
if (values.length < 2) {
113+
System.err.println("error processing values of " + curLine + NEWLINE); //$NON-NLS-1$
114+
continue;
115+
}
116+
int flags = Integer.valueOf(values[0]).intValue();
117+
Set<IPath> exclusionPatterns = new HashSet<>();
118+
for (int curEx = 1; curEx < values.length; curEx++) {
119+
exclusionPatterns.add(new Path(values[curEx]));
120+
}
121+
sourceEntries.add(
122+
new CSourceEntry(name, exclusionPatterns.toArray(new IPath[exclusionPatterns.size()]), flags));
123+
break;
124+
}
125+
}
126+
if (sourceEntries.size() > 0) {
127+
mySourceEntries = sourceEntries.toArray(new ICSourceEntry[sourceEntries.size()]);
128+
}
71129
}
72130

73131
public AutoBuildResourceData() {
@@ -156,4 +214,25 @@ public CResourceData[] getResourceDatas() {
156214

157215
abstract protected void checkIfWeCanWrite();
158216

217+
protected StringBuffer serialize(String linePrefix, String lineEnd) {
218+
StringBuffer ret = new StringBuffer();
219+
//TODO store Map<String, CResourceData> myResourceDatas = new HashMap<>();
220+
if (mySourceEntries != null) {
221+
for (ICSourceEntry curSourceEntry : mySourceEntries) {
222+
String key = curSourceEntry.getName();
223+
if (key.isBlank()) {
224+
key = ROOT;
225+
}
226+
ret.append(linePrefix + KEY_SOURCE_ENTRY + DOT + key + EQUAL);
227+
ret.append(Integer.toString(curSourceEntry.getFlags()));
228+
for (IPath curExclusion : curSourceEntry.getExclusionPatterns()) {
229+
ret.append(COLON + curExclusion.toString());
230+
}
231+
ret.append(lineEnd);
232+
}
233+
}
234+
//TODO store CFolderData myRootFolderData;
235+
return ret;
236+
}
237+
159238
}

0 commit comments

Comments
 (0)