Skip to content

Commit 230fb83

Browse files
committed
Non-CDT project is correctly skipped. Refactoring in initializing conechecker environment.
1 parent 8b6e31b commit 230fb83

File tree

4 files changed

+203
-226
lines changed

4 files changed

+203
-226
lines changed

eclipse-plugin/eclipse/cc.codechecker.eclipse.plugin/src/cc/codechecker/plugin/config/CcConfiguration.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public CcConfiguration(IProject project) {
6767
public void modifyProjectEnvironmentVariables(final IProject project, final Map<String, String> environmentAdd) {
6868
IContributedEnvironment ice = CCorePlugin.getDefault().getBuildEnvironmentManager()
6969
.getContributedEnvironment();
70-
ICProjectDescription prjd = CoreModel.getDefault().getProjectDescription(project, true);
70+
//we assume that the project is CDT
71+
ICProjectDescription prjd = CoreModel.getDefault().getProjectDescription(project, true);
7172
ICConfigurationDescription cfgd = prjd.getActiveConfiguration();
7273
for(String key : environmentAdd.keySet()) {
7374
if(key.equals("PATH")) {
@@ -229,7 +230,9 @@ public void updateServer(IProject project, CodecheckerServerThread server) {
229230
modifyProjectEnvironmentVariables(project, ccec.environmentAddList);
230231
ConsoleFactory.consoleWrite(project.getName() + ": Started server for project (port: "+ server.serverPort + ")");
231232
} catch (Exception e) {
232-
ConsoleFactory.consoleWrite(project.getName() + ": Failed to start server");
233+
ConsoleFactory.consoleWrite(project.getName() + ": Failed to start server "+e.getStackTrace().toString());
234+
System.out.println("Failed to start server:");
235+
e.printStackTrace();
233236
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
234237
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
235238
}

eclipse-plugin/eclipse/cc.codechecker.eclipse.plugin/src/cc/codechecker/plugin/init/StartupJob.java

Lines changed: 176 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.HashSet;
44

5+
import org.eclipse.cdt.core.model.CoreModel;
56
import org.eclipse.core.resources.IProject;
67
import org.eclipse.core.resources.IResource;
78
import org.eclipse.core.resources.IResourceChangeEvent;
@@ -32,164 +33,180 @@
3233

3334
public class StartupJob extends Job {
3435

35-
//Logger
36-
private static final Logger logger = LogManager.getLogger(StartupJob.class);
37-
38-
EditorPartListener partListener;
39-
ProjectExplorerSelectionListener projectexplorerselectionlistener;
40-
41-
public StartupJob() {
42-
super("CodeChecker Startup Job");
43-
partListener = new EditorPartListener();
44-
projectexplorerselectionlistener = new ProjectExplorerSelectionListener();
45-
}
46-
47-
@Override
48-
protected IStatus run(IProgressMonitor monitor) {
49-
if (PlatformUI.isWorkbenchRunning()) {
50-
runInUIThread(monitor);
51-
} else {
52-
schedule(1000);
53-
}
54-
return Status.OK_STATUS;
55-
}
56-
57-
public IStatus runInUIThread(IProgressMonitor monitor) {
58-
59-
IWorkbench wb = PlatformUI.getWorkbench();
60-
61-
try { // TODO: find a better solution...
62-
Thread.sleep(2000);
63-
} catch (InterruptedException e) {
64-
// TODO Auto-generated catch block
65-
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
66-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
67-
}
68-
69-
ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() {
70-
71-
@Override
72-
public void resourceChanged(IResourceChangeEvent event) {
73-
switch (event.getType()) {
74-
case IResourceChangeEvent.POST_BUILD: {
75-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> Project was built!");
76-
try {
77-
final HashSet<IProject> changedProjects = new HashSet<>();
78-
if(event.getBuildKind() != IncrementalProjectBuilder.CLEAN_BUILD) {
79-
event.getDelta().accept(new IResourceDeltaVisitor() {
80-
public boolean visit(final IResourceDelta delta) throws
81-
CoreException {
82-
IResource resource = delta.getResource();
83-
changedProjects.add(resource.getProject());
84-
return true;
85-
}
86-
});
87-
for (IProject p : changedProjects) {
88-
onProjectBuilt(p);
89-
}
90-
}
91-
} catch (CoreException e) {
92-
// TODO Auto-generated catch block
93-
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
94-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
95-
}
96-
break;
97-
}
98-
}
99-
try {
100-
event.getDelta().accept(new IResourceDeltaVisitor() {
101-
public boolean visit(final IResourceDelta delta) throws CoreException {
102-
IResource resource = delta.getResource();
103-
if (((resource.getType() & IResource.PROJECT) != 0) && resource
104-
.getProject().isOpen() && delta.getKind() == IResourceDelta
105-
.CHANGED && ((delta.getFlags() & IResourceDelta.OPEN) != 0)) {
106-
107-
IProject project = (IProject) resource;
108-
projectOpened(project);
109-
}
110-
return true;
111-
}
112-
});
113-
} catch (CoreException e) {
114-
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
115-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
116-
}
117-
}
118-
119-
}, IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.POST_CHANGE | IResourceDelta
120-
.OPEN);
121-
122-
// check all open projects
123-
124-
for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
125-
projectOpened(project);
126-
}
127-
128-
// check all open windows
129-
for (IWorkbenchWindow win : wb.getWorkbenchWindows()) {
130-
addListenerToWorkbenchWindow(win);
131-
}
132-
133-
134-
return Status.OK_STATUS;
135-
}
136-
137-
private void onProjectBuilt(IProject project) {
138-
if (project == null) return;
139-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + project.getName() + " CodeChecker Check Data Transport Started!");
140-
try {
141-
if (!project.hasNature(CodeCheckerNature.NATURE_ID)) {
142-
return;
143-
}
144-
} catch (CoreException e) {
145-
// TODO Auto-generated catch block
146-
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
147-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
148-
}
149-
150-
CodecheckerServerThread server = CodeCheckerContext.getInstance().getServerObject(project);
151-
if (project.isOpen()) {
152-
if (!server.isRunning()) server.start(); // ensure started!
153-
server.recheck();
154-
}
155-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + project.getName() + " CodeChecker Check Data Transport Complete!");
156-
}
157-
158-
private void projectOpened(IProject project) {
159-
if (project == null) return;
160-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> Project changed event!");
161-
try {
162-
if (!project.hasNature(CodeCheckerNature.NATURE_ID)) {
163-
return;
164-
}
165-
} catch (CoreException e) {
166-
// TODO Auto-generated catch block
167-
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
168-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
169-
}
170-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> Good Natured!");
171-
try {
172-
CodecheckerServerThread server = CodeCheckerContext.getInstance().getServerObject
173-
(project);
174-
if (project.isOpen()) {
175-
if (!server.isRunning()) server.start(); // ensure started!
176-
} else {
177-
if (server.isRunning()) server.stop();
178-
}
179-
} catch (Exception e) {
180-
}
181-
182-
}
183-
184-
private void addListenerToWorkbenchWindow(IWorkbenchWindow win) {
185-
try {
186-
ISelectionService ss = win.getSelectionService();
187-
ss.addPostSelectionListener(IPageLayout.ID_PROJECT_EXPLORER, projectexplorerselectionlistener);
188-
win.getActivePage().addPartListener(partListener);
189-
} catch (Exception e) {
190-
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
191-
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
192-
}
193-
}
36+
// Logger
37+
private static final Logger logger = LogManager.getLogger(StartupJob.class);
38+
39+
EditorPartListener partListener;
40+
ProjectExplorerSelectionListener projectexplorerselectionlistener;
41+
42+
public StartupJob() {
43+
super("CodeChecker Startup Job");
44+
partListener = new EditorPartListener();
45+
projectexplorerselectionlistener = new ProjectExplorerSelectionListener();
46+
}
47+
48+
@Override
49+
protected IStatus run(IProgressMonitor monitor) {
50+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> IStatus:run ");
51+
if (PlatformUI.isWorkbenchRunning()) {
52+
logger.log(Level.DEBUG, "isWorkBenchRunning:true ");
53+
runInUIThread(monitor);
54+
} else {
55+
schedule(1000);
56+
}
57+
return Status.OK_STATUS;
58+
}
59+
60+
public IStatus runInUIThread(IProgressMonitor monitor) {
61+
62+
IWorkbench wb = PlatformUI.getWorkbench();
63+
64+
try { // TODO: find a better solution...
65+
Thread.sleep(2000);
66+
} catch (InterruptedException e) {
67+
// TODO Auto-generated catch block
68+
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
69+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
70+
}
71+
72+
logger.log(Level.DEBUG, "adding addResourceChangeListener ");
73+
ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() {
74+
75+
@Override
76+
public void resourceChanged(IResourceChangeEvent event) {
77+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> resourcechangedEvent"+event.getType());
78+
switch (event.getType()) {
79+
case IResourceChangeEvent.POST_BUILD: {
80+
try {
81+
final HashSet<IProject> changedProjects = new HashSet<>();
82+
if (event.getBuildKind() != IncrementalProjectBuilder.CLEAN_BUILD) {
83+
event.getDelta().accept(new IResourceDeltaVisitor() {
84+
public boolean visit(final IResourceDelta delta) throws CoreException {
85+
IResource resource = delta.getResource();
86+
IProject project=resource.getProject();
87+
if (project!=null && project.hasNature(CodeCheckerNature.NATURE_ID)){
88+
changedProjects.add(project);
89+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> Project was built:"
90+
+ project.getName());
91+
}
92+
else{
93+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> Project was built is nul!!?");
94+
}
95+
return true;
96+
}
97+
});
98+
for (IProject p : changedProjects) {
99+
onProjectBuilt(p);
100+
}
101+
}
102+
} catch (CoreException e) {
103+
// TODO Auto-generated catch block
104+
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
105+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
106+
}
107+
break;
108+
}
109+
}
110+
try {
111+
event.getDelta().accept(new IResourceDeltaVisitor() {
112+
public boolean visit(final IResourceDelta delta) throws CoreException {
113+
IResource resource = delta.getResource();
114+
if (((resource.getType() & IResource.PROJECT) != 0) && resource.getProject().isOpen()
115+
&& delta.getKind() == IResourceDelta.CHANGED
116+
&& ((delta.getFlags() & IResourceDelta.OPEN) != 0)) {
117+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> Project visit called for project:"
118+
+ resource.getProject().getName());
119+
IProject project = (IProject) resource;
120+
projectOpened(project);
121+
}
122+
return true;
123+
}
124+
});
125+
} catch (CoreException e) {
126+
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
127+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
128+
}
129+
}
130+
131+
}, IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.POST_CHANGE | IResourceDelta.OPEN);
132+
133+
// check all open projects
134+
135+
for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
136+
projectOpened(project);
137+
}
138+
139+
// check all open windows
140+
for (IWorkbenchWindow win : wb.getWorkbenchWindows()) {
141+
addListenerToWorkbenchWindow(win);
142+
}
143+
144+
return Status.OK_STATUS;
145+
}
146+
147+
private void onProjectBuilt(IProject project) {
148+
if (project == null)
149+
return;
150+
logger.log(Level.DEBUG,
151+
"SERVER_GUI_MSG >> " + project.getName() + " onProjectBuilt called.");
152+
try {
153+
if (!project.hasNature(CodeCheckerNature.NATURE_ID)) {
154+
return;
155+
}
156+
} catch (CoreException e) {
157+
// TODO Auto-generated catch block
158+
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
159+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
160+
}
161+
162+
CodecheckerServerThread server = CodeCheckerContext.getInstance().getServerObject(project);
163+
if (project.isOpen()) {
164+
if (!server.isRunning())
165+
server.start(); // ensure started!
166+
server.recheck();
167+
}
168+
logger.log(Level.DEBUG,
169+
"SERVER_GUI_MSG >> " + project.getName() + " CodeChecker Check Data Transport Complete!");
170+
}
171+
172+
private void projectOpened(IProject project) {
173+
if (project == null)
174+
return;
175+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> projectOpened!" + project.getName());
176+
try {
177+
//if CodecheCker nature is not set or the project is non-CDT we don launch CodeChecker server
178+
if (!project.hasNature(CodeCheckerNature.NATURE_ID)||CoreModel.getDefault().getProjectDescription(project, true)==null) {
179+
return;
180+
}
181+
} catch (CoreException e) {
182+
// TODO Auto-generated catch block
183+
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
184+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
185+
}
186+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> CodeChecker nature found!");
187+
try {
188+
CodecheckerServerThread server = CodeCheckerContext.getInstance().getServerObject(project);
189+
if (project.isOpen()) {
190+
if (!server.isRunning())
191+
server.start(); // ensure started!
192+
} else {
193+
if (server.isRunning())
194+
server.stop();
195+
}
196+
} catch (Exception e) {
197+
}
198+
199+
}
200+
201+
private void addListenerToWorkbenchWindow(IWorkbenchWindow win) {
202+
try {
203+
ISelectionService ss = win.getSelectionService();
204+
ss.addPostSelectionListener(IPageLayout.ID_PROJECT_EXPLORER, projectexplorerselectionlistener);
205+
win.getActivePage().addPartListener(partListener);
206+
} catch (Exception e) {
207+
logger.log(Level.ERROR, "SERVER_GUI_MSG >> " + e);
208+
logger.log(Level.DEBUG, "SERVER_GUI_MSG >> " + e.getStackTrace());
209+
}
210+
}
194211

195212
}

0 commit comments

Comments
 (0)