Skip to content

Commit 4a54e02

Browse files
author
jan
committed
Convert to sloeber project basic functionality seems to work
Now I basically read everything in memory and build the project from there. That is for both autoBuildProject creation as sloeber project migration
1 parent 23c723b commit 4a54e02

File tree

4 files changed

+201
-66
lines changed

4 files changed

+201
-66
lines changed

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

Lines changed: 62 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
package io.sloeber.autoBuild.integration;
33

44
import java.net.URI;
5+
import java.util.HashSet;
56
import java.util.List;
67

78
import org.eclipse.cdt.core.CCProjectNature;
@@ -35,7 +36,6 @@
3536
import io.sloeber.autoBuild.core.Activator;
3637
import io.sloeber.autoBuild.schema.api.IConfiguration;
3738
import io.sloeber.autoBuild.schema.api.IProjectType;
38-
import io.sloeber.autoBuild.schema.internal.Configuration;
3939

4040
public class AutoBuildProjectGenerator implements IGenerator {
4141
private URI myLocationURI = null;
@@ -62,16 +62,56 @@ public void generate(IProgressMonitor monitor) throws CoreException {
6262

6363
@Override
6464
public void run(IProgressMonitor internalMonitor) throws CoreException {
65+
66+
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
67+
IProjectType autoBuildProjType = AutoBuildManager.getProjectType(myProjectType.getExtensionPointID(),
68+
myProjectType.getExtensionID(), myProjectType.getId(), true);
69+
if (autoBuildProjType == null) {
70+
// project type not found can not continue
71+
IStatus status = new Status(IStatus.ERROR, Activator.getId(),
72+
"Did not find the projectType with " + myProjectType.getId() + " for extension ID " //$NON-NLS-1$ //$NON-NLS-2$
73+
+ myProjectType.getExtensionID() + " in extensionpointID " //$NON-NLS-1$
74+
+ myProjectType.getExtensionPointID());
75+
CoreException exception = new CoreException(status);
76+
throw (exception);
77+
}
78+
HashSet<String> configNames = new HashSet<>();
79+
myProject = root.getProject(myProjectName);
80+
if (myProject.exists()) {
81+
// Update the existing configurations
82+
ICProjectDescription orgdesc = mngr.getProjectDescription(myProject, false);
83+
for (ICConfigurationDescription curConfig : orgdesc.getConfigurations()) {
84+
configNames.add(curConfig.getName());
85+
}
86+
myLocationURI=myProject.getLocationURI();
87+
//CDT reads the .cproject file when setting the configuration for making the delta
88+
//and old stuff stays in it causing problems
89+
//ICProject cProject = CoreModel.getDefault().getCModel().getCProject(myProject.getName());
90+
IFile CdtDotFile = myProject.getFile(".cproject"); //$NON-NLS-1$
91+
if(CdtDotFile.exists()) {
92+
CdtDotFile.delete(true, monitor);
93+
}
94+
myProject.close(monitor);
95+
myProject.delete(false, true, monitor);
96+
97+
} else {
98+
// Create new configurations based on the model configurations from the
99+
// plugin.xml
100+
IConfiguration[] modelConfigs = autoBuildProjType.getConfigurations();
101+
for (IConfiguration iConfig : modelConfigs) {
102+
configNames.add(iConfig.getName());
103+
}
104+
}
105+
106+
107+
65108
IProjectDescription description = workspace.newProjectDescription(myProjectName);
66109
if (myLocationURI != null) {
67110
description.setLocationURI(myLocationURI);
68111
}
69-
myProject = root.getProject(myProjectName);
70-
if(!myProject.exists()) {
71-
//myProject.delete(false, false, monitor);
72-
myProject.create(description, monitor);
73-
myProject.open(monitor);
74-
}
112+
113+
myProject.create(description, monitor);
114+
myProject.open(monitor);
75115

76116
CProjectNature.addCNature(myProject, monitor);
77117
if (CCProjectNature.CC_NATURE_ID.equals(myNatureID)) {
@@ -80,7 +120,7 @@ public void run(IProgressMonitor internalMonitor) throws CoreException {
80120
AutoBuildNature.addNature(myProject, monitor);
81121

82122
IContainer srcFolder = myProject;
83-
if (myCodeRootFolder!=null && !myCodeRootFolder.isBlank()) {
123+
if (myCodeRootFolder != null && !myCodeRootFolder.isBlank()) {
84124
IFolder actualFolder = myProject.getFolder(myCodeRootFolder);
85125
srcFolder = actualFolder;
86126
if (!srcFolder.exists()) {
@@ -93,44 +133,40 @@ public void run(IProgressMonitor internalMonitor) throws CoreException {
93133

94134
myProject = CCorePlugin.getDefault().createCDTProject(description, myProject, monitor);
95135

96-
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
136+
97137
ICProjectDescription des = mngr.createProjectDescription(myProject, false, true);
98138

99-
IProjectType sloeberProjType = AutoBuildManager.getProjectType(myProjectType.getExtensionPointID(),
100-
myProjectType.getExtensionID(), myProjectType.getId(), true);
101-
if (sloeberProjType == null) {
102-
// project type not found can not continue
103-
IStatus status = new Status(IStatus.ERROR, Activator.getId(),
104-
"Did not find the projectType with " + myProjectType.getId() + " for extension ID " //$NON-NLS-1$ //$NON-NLS-2$
105-
+ myProjectType.getExtensionID() + " in extensionpointID " //$NON-NLS-1$
106-
+ myProjectType.getExtensionPointID());
107-
CoreException exception = new CoreException(status);
108-
throw (exception);
109-
}
110-
IConfiguration[] modelConfigs = sloeberProjType.getConfigurations();
111-
for (IConfiguration iConfig : modelConfigs) {
112-
Configuration config = (Configuration) iConfig;
139+
IConfiguration defaultConfig = autoBuildProjType.getConfigurations()[0];
140+
141+
for (String curConfigName : configNames) {
142+
IConfiguration config = autoBuildProjType.getConfiguration(curConfigName);
143+
if (config == null) {
144+
config = defaultConfig;
145+
}
113146
AutoBuildConfigurationDescription data = new AutoBuildConfigurationDescription(config, myProject,
114147
myBuldTools, myCodeRootFolder);
115148
assert (data != null);
149+
data.setBuilder(data.getBuilder(myBuilderID));
116150
ICConfigurationDescription cdtCfgDes = des
117151
.createConfiguration(AutoBuildConfigurationDescriptionProvider.CFG_DATA_PROVIDER_ID, data);
152+
cdtCfgDes.setName(curConfigName);
118153
data.setCdtConfigurationDescription(cdtCfgDes);
119-
data.setBuilder(data.getBuilder(myBuilderID));
120154

121155
// Set the language Settings
122-
String[] defaultIds = iConfig.getDefaultLanguageSettingsProviderIds().toArray(new String[0]);
156+
String[] defaultIds = config.getDefaultLanguageSettingsProviderIds().toArray(new String[0]);
123157
List<ILanguageSettingsProvider> providers = LanguageSettingsManager
124158
.createLanguageSettingsProviders(defaultIds);
125159
ILanguageSettingsProvidersKeeper languageKeeper = (ILanguageSettingsProvidersKeeper) cdtCfgDes;
126160
if (cdtCfgDes instanceof ILanguageSettingsProvidersKeeper) {
127161
languageKeeper.setLanguageSettingProviders(providers);
128162
}
129-
AutoBuildCommon.createFolder( data.getBuildFolder());
163+
AutoBuildCommon.createFolder(data.getBuildFolder());
130164
}
131165
if (!myNeedsMoreWork) {
132166
des.setCdtProjectCreated();
133167
}
168+
des.setActiveConfiguration(des.getConfigurations()[0]);
169+
des.setDefaultSettingConfiguration(des.getConfigurations()[0]);
134170
mngr.setProjectDescription(myProject, des);
135171

136172
}

io.sloeber.core/src/io/sloeber/core/Activator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import io.sloeber.core.api.ConfigurationPreferences;
4040
import io.sloeber.core.common.InstancePreferences;
4141
import io.sloeber.core.listeners.ConfigurationChangeListener;
42+
import io.sloeber.core.listeners.IndexerController;
4243
import io.sloeber.core.listeners.IndexerListener;
4344
import io.sloeber.core.tools.PackageManager;
4445

@@ -190,6 +191,7 @@ private static void registerListeners() {
190191
CCorePlugin.getIndexManager().addIndexChangeListener(myindexerListener);
191192
CCorePlugin.getIndexManager().addIndexerStateListener(myindexerListener);
192193
CoreModel singCoreModel = CoreModel.getDefault();
194+
IndexerController.registerIndexerController();
193195

194196
singCoreModel.addCProjectDescriptionListener(myConfigurationChangeListener,CProjectDescriptionEvent.ABOUT_TO_APPLY|CProjectDescriptionEvent.APPLIED);
195197

@@ -202,6 +204,7 @@ private static void unRegisterListeners() {
202204
CCorePlugin.getIndexManager().removeIndexChangeListener(myindexerListener);
203205
CoreModel singCoreModel = CoreModel.getDefault();
204206
singCoreModel.removeCProjectDescriptionListener(myConfigurationChangeListener);
207+
IndexerController.unRegisterIndexerController();
205208

206209

207210

io.sloeber.core/src/io/sloeber/core/api/SloeberProject.java

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
1717
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
1818
import org.eclipse.cdt.core.settings.model.ICSourceEntry;
19-
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
2019
import org.eclipse.core.resources.IFile;
2120
import org.eclipse.core.resources.IFolder;
2221
import org.eclipse.core.resources.IProject;
@@ -43,9 +42,11 @@
4342
import io.sloeber.autoBuild.helpers.api.KeyValueTree;
4443
import io.sloeber.autoBuild.integration.AutoBuildConfigurationDescription;
4544
import io.sloeber.autoBuild.integration.AutoBuildManager;
45+
import io.sloeber.autoBuild.schema.api.IConfiguration;
4646
import io.sloeber.autoBuild.schema.api.IProjectType;
4747
import io.sloeber.core.Activator;
4848
import io.sloeber.core.internal.SloeberConfiguration;
49+
import io.sloeber.core.listeners.IndexerController;
4950
import io.sloeber.core.natures.SloeberNature;
5051
import io.sloeber.core.txt.TxtFile;
5152

@@ -84,10 +85,6 @@ public void run(IProgressMonitor internalMonitor) throws CoreException {
8485
OldCoreFolder.delete(true, monitor);
8586
}
8687

87-
// IFile CdtDotFile = project.getFile(".cproject"); //$NON-NLS-1$
88-
// if(CdtDotFile.exists()) {
89-
// CdtDotFile.delete(true, monitor);
90-
// }
9188

9289
File sloeberDotFile = project.getFile(".sproject").getLocation().toFile(); //$NON-NLS-1$
9390
File sloeberCfgFile = project.getFile(SLOEBER_CFG).getLocation().toFile();
@@ -104,6 +101,22 @@ public void run(IProgressMonitor internalMonitor) throws CoreException {
104101
}
105102
}
106103

104+
CCorePlugin cCorePlugin = CCorePlugin.getDefault();
105+
ICProjectDescription oldPrjCDesc = cCorePlugin.getProjectDescription(project, false);
106+
Set <String>cfgNames=new HashSet<>();
107+
for (ICConfigurationDescription curConfig : oldPrjCDesc.getConfigurations()) {
108+
cfgNames.add( curConfig.getName());
109+
}
110+
111+
112+
KeyValueTree oldConfigs=null;
113+
if (oldSloeberInfo != null) {
114+
oldConfigs = oldSloeberInfo.getData().getChild("Config"); //$NON-NLS-1$
115+
for (String curTree : oldConfigs.getChildren().keySet()) {
116+
cfgNames.add(curTree);
117+
}
118+
}
119+
107120
String builderName = AutoBuildProject.INTERNAL_BUILDER_ID;
108121
IBuildTools buildTools = IBuildToolsManager.getDefault().getBuildTools(SLOEBER_BUILD_TOOL_PROVIDER_ID,
109122
null);
@@ -114,46 +127,33 @@ public void run(IProgressMonitor internalMonitor) throws CoreException {
114127
CCProjectNature.CC_NATURE_ID, codeProvider, buildTools, true, internalMonitor);
115128

116129
SloeberNature.addNature(project, internalMonitor);
117-
118-
CCorePlugin cCorePlugin = CCorePlugin.getDefault();
119130
ICProjectDescription prjCDesc = cCorePlugin.getProjectDescription(project, true);
120131

121-
Set <String>cfgNames=new HashSet<>();
122-
for (ICConfigurationDescription curConfig : prjCDesc.getConfigurations()) {
123-
cfgNames.add( curConfig.getName());
124-
}
125-
KeyValueTree oldConfigs=null;
126-
if (oldSloeberInfo != null) {
127-
oldConfigs = oldSloeberInfo.getData().getChild("Config"); //$NON-NLS-1$
128-
for (String curTree : oldConfigs.getChildren().keySet()) {
129-
cfgNames.add(curTree);
130-
}
131-
}
132+
133+
IConfiguration defaultConfig = projectType.getConfigurations()[0];
132134
for(String cfgName:cfgNames) {
133135
KeyValueTree oldConfig=null;
134136
if (oldConfigs != null) {
135137
oldConfig = oldConfigs.getChild(cfgName);
136138
}
137-
//get the CDT config and AutoBuildConfigurationDescription (if it does not exist create it)
138-
ICConfigurationDescription curConfig = prjCDesc.getConfigurationByName(cfgName);
139-
if(curConfig==null) {
140-
//config does not exists so create it
141-
String id = CDataUtil.genId(Activator.getId());
142-
curConfig = prjCDesc.createConfiguration(id,cfgName,prjCDesc.getActiveConfiguration());
139+
140+
IConfiguration config = projectType.getConfiguration(cfgName);
141+
if (config == null) {
142+
config = defaultConfig;
143143
}
144-
IAutoBuildConfigurationDescription autoConf = IAutoBuildConfigurationDescription
145-
.getConfig(curConfig);
146-
if (!(autoConf instanceof AutoBuildConfigurationDescription)) {
147-
// this should not happen as we just created a autoBuild project
148-
Activator.log(new Status(SLOEBER_STATUS_DEBUG, Activator.getId(),
149-
"\"Auto build created a project that does not seem to be a autobuild project :-s : " //$NON-NLS-1$
150-
+ project.getName()));
151-
continue;
144+
ICConfigurationDescription curConfig = prjCDesc.getConfigurationByName(cfgName);
145+
AutoBuildConfigurationDescription autoConf=null;
146+
if (curConfig == null) {
147+
// config does not exists so create it
148+
autoConf = new AutoBuildConfigurationDescription(config,
149+
project, buildTools, null);
150+
autoConf.setName(cfgName);
151+
curConfig = prjCDesc.createConfiguration(AutoBuildProject.INTERNAL_BUILDER_ID, autoConf);
152+
autoConf.setCdtConfigurationDescription(curConfig);
153+
}else {
154+
autoConf = (AutoBuildConfigurationDescription) IAutoBuildConfigurationDescription.getConfig(curConfig);
152155
}
153156

154-
155-
156-
157157
ICSourceEntry newSourceEntries[] = new ICSourceEntry[2];
158158
// old Sloeber project so the code is in the root of the project for sure
159159
// as we are at the root
@@ -201,24 +201,27 @@ public void run(IProgressMonitor internalMonitor) throws CoreException {
201201
SubMonitor refreshMonitor = SubMonitor.convert(internalMonitor, 3);
202202
project.open(refreshMonitor);
203203
project.refreshLocal(IResource.DEPTH_INFINITE, refreshMonitor);
204+
prjCDesc.setActiveConfiguration(prjCDesc.getConfigurations()[0]);
204205
prjCDesc.setCdtProjectCreated();
206+
205207
cCorePlugin.setProjectDescription(project, prjCDesc, true, SubMonitor.convert(internalMonitor, 1));
206-
project.close(monitor);
207-
project.open(monitor);
208+
// project.close(monitor);
209+
// project.open(monitor);
208210

209211
Activator.log(new Status(SLOEBER_STATUS_DEBUG, Activator.getId(),
210212
"internal creation of project is done: " + project.getName())); //$NON-NLS-1$
211-
// IndexerController.index(newProjectHandle);
212213
}
213214
};
214215
try
215216

216217
{
218+
IndexerController.doNotIndex(project);
217219
workspace.run(runnable, root, IWorkspace.AVOID_UPDATE, monitor);
218220
} catch (Exception e) {
219-
Activator.log(new Status(IStatus.INFO, io.sloeber.core.Activator.getId(),
221+
Activator.log(new Status(IStatus.ERROR, io.sloeber.core.Activator.getId(),
220222
"Project creation failed: " + project.getName(), e)); //$NON-NLS-1$
221223
}
224+
IndexerController.index(project);
222225
monitor.done();
223226
}
224227

@@ -233,10 +236,14 @@ private static OtherDescription getOtherDescription(KeyValueTree config) {
233236

234237
private static CompileDescription getCompileDescription(KeyValueTree oldConfig) {
235238
CompileDescription ret = new CompileDescription();
239+
if (oldConfig == null) {
240+
return ret;
241+
}
236242
KeyValueTree compileConfig=oldConfig.getChild("compile").getChild("sloeber"); //$NON-NLS-1$ //$NON-NLS-2$
237243
if (compileConfig == null) {
238244
return ret;
239245
}
246+
240247
KeyValueTree extraConfig=compileConfig.getChild("extra"); //$NON-NLS-1$
241248
ret.set_All_CompileOptions(extraConfig.getValue("all")); //$NON-NLS-1$
242249
ret.set_Archive_CompileOptions(extraConfig.getValue("archive")); //$NON-NLS-1$
@@ -281,10 +288,11 @@ private static BoardDescription getBoardDescription(KeyValueTree oldConfig) {
281288
}
282289
}
283290
}
284-
if (foundBoardsFilePath == null) {
291+
if (foundBoardsFilePath == null || (!foundBoardsFilePath.toFile().exists()) ) {
285292
return new BoardDescription();
286293
}
287294

295+
288296
KeyValueTree optionsHolder=oldConfig.getChild("board.BOARD.MENU"); //$NON-NLS-1$
289297

290298
Map<String, String> options=new HashMap<>();

0 commit comments

Comments
 (0)