Skip to content

Commit ccac28d

Browse files
committed
fixes #99, fixes #98, fixes #97, fixes #92
1 parent 64972c9 commit ccac28d

File tree

12 files changed

+162
-53
lines changed

12 files changed

+162
-53
lines changed
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package cc.codechecker.plugin;
22

3-
import cc.codechecker.api.runtime.LogI;;
3+
import cc.codechecker.api.runtime.LogI;
4+
import cc.codechecker.plugin.views.console.ConsoleFactory;;
45

56
//logger service for non plugin internal
67
//components (such as the codechecker service)
78
public class ExternalLogger implements LogI{
89
public void log(int severity,String message){
910
Logger.extLog(severity, message);
1011
}
12+
//logs to CodeChecker console
13+
public void consoleLog(String message){
14+
ConsoleFactory.consoleWrite(message);
15+
}
16+
1117
}

eclipse-plugin/eclipse/cc.codechecker.eclipse.plugin/src/cc/codechecker/plugin/Logger.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import org.eclipse.core.runtime.ILog;
44
import org.eclipse.core.runtime.Status;
55

6+
import cc.codechecker.plugin.views.console.ConsoleFactory;
7+
68

79
public class Logger {
810
private static ILog logger = Activator.getDefault().getLog();
@@ -22,4 +24,8 @@ public static void extLog(int level,String message){
2224
logger.log(new Status(level,Activator.PLUGIN_ID,place+message));
2325
}
2426
}
27+
//logs to CodeChecker console
28+
public static void consoleLog(String message){
29+
ConsoleFactory.consoleWrite(message);
30+
}
2531
}

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
@@ -262,8 +262,11 @@ public boolean isConfigured() {
262262
CodeCheckEnvironmentChecker ccec = CodeCheckerContext.getInstance().getServerObject(project)
263263
.getCodecheckerEnvironment();
264264
if (ccec != null) {
265-
return ccec.isJavaRunner(CodeCheckerContext.getInstance().getServerObject(project).serverPort);
266-
}
265+
int port=CodeCheckerContext.getInstance().getServerObject(project).serverPort;
266+
Logger.log(IStatus.INFO, "checking codechecker on port"+port);
267+
return ccec.isJavaRunner(port);
268+
}else
269+
Logger.log(IStatus.INFO, "CodeCheckerContext is null!");
267270
return false;
268271
}
269272
return false;

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import cc.codechecker.api.runtime.CodecheckerServerThread;
1212
import cc.codechecker.api.runtime.OnCheckCallback;
1313
import cc.codechecker.plugin.markers.MarkerListener;
14-
import cc.codechecker.plugin.views.console.ConsoleFactory;
1514
import cc.codechecker.plugin.views.report.list.ReportListView;
1615
import cc.codechecker.plugin.views.report.list.ReportListViewCustom;
1716
import cc.codechecker.plugin.views.report.list.ReportListViewListener;
@@ -78,15 +77,16 @@ private CodeCheckerContext() {
7877
* The refresher for Project ReportList View.
7978
*
8079
* @param pages the page list for the currently active workbench windows.
81-
* @param project the project, the user change his/her view to
82-
* @param considerViewerRefresh false if the refresh should always happen despite of no real need to force refresh
80+
* @param project the project, project the buglist to be refreshed
81+
* @param noFetch if true, the server will not be asked for new list
8382
*/
84-
private void refreshProject(IWorkbenchPage[] pages, IProject project, boolean considerProjectChange) {
83+
private void refreshProject(IWorkbenchPage[] pages, IProject project, boolean noFetch) {
84+
Logger.log(IStatus.INFO, "Refreshing bug list for project:"+project.getName());
8585
for(IWorkbenchPage page : pages) {
8686
for (IViewReference vp : page.getViewReferences()) {
8787
if (vp.getId().equals(ReportListViewProject.ID)) {
8888
ReportListViewProject rlvp = (ReportListViewProject) vp.getView(true);
89-
if (!considerProjectChange || this.activeProject != project) {
89+
if (!noFetch || this.activeProject != project) {
9090
rlvp.onEditorChanged(project);
9191
}
9292
}
@@ -175,7 +175,7 @@ public synchronized CodecheckerServerThread getServerObject(final IProject proje
175175

176176
@Override
177177
public void analysisFinished(String result) {
178-
ConsoleFactory.consoleWrite(project.getName() + " Analysis finished."+result);
178+
Logger.consoleLog(project.getName() + "Analysis finished.");
179179
cleanCache();
180180
Display.getDefault().asyncExec(new Runnable() {
181181
@Override
@@ -186,7 +186,7 @@ public void run() {
186186
}
187187
@Override
188188
public void analysisStarted(String msg) {
189-
ConsoleFactory.consoleWrite(project.getName() + " Analysis Started. "+msg);
189+
Logger.consoleLog(project.getName() + " Analysis Started. "+msg);
190190
}
191191
});
192192
CcConfiguration config = new CcConfiguration(project);
@@ -210,6 +210,8 @@ public void cleanCache() {
210210
* @param project the project, the user change his/her view to
211211
*/
212212
public void refreshAfterBuild(final IProject project) {
213+
Logger.log(IStatus.INFO, "refreshAfterBuild");
214+
213215
IWorkbenchWindow activeWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
214216

215217
if(activeWindow == null) {
@@ -234,15 +236,19 @@ public void refreshAfterBuild(final IProject project) {
234236
Logger.log(IStatus.INFO, " partRef is null or partRef instanceof FileEditor!");
235237
return;
236238
}
237-
239+
240+
238241
activeEditorPart = partRef;
239242
IFile file = ((IFileEditorInput) partRef.getEditorInput()).getFile();
240-
if(project != file.getProject()) {
243+
244+
if (project!=this.activeProject){
245+
Logger.log(IStatus.INFO, "New results do not refer to the active project"+this.activeProject.getName());
241246
return;
242247
}
243248

244249
CcConfiguration config = new CcConfiguration(project);
245250
if (!config.isConfigured()) {
251+
Logger.log(IStatus.INFO, "Codechecker not configured.");
246252
return;
247253
}
248254

@@ -259,11 +265,6 @@ public void refreshAfterBuild(final IProject project) {
259265
* @param partRef the IEditorPart which the user has switched.
260266
*/
261267
public void refreshChangeEditorPart(IEditorPart partRef) {
262-
//partRef is not instanceof IFileEditorInput or not change editorPart!
263-
if (!(partRef.getEditorInput() instanceof IFileEditorInput) || partRef == activeEditorPart) {
264-
Logger.log(IStatus.INFO, " partRef is not instanceof IFileEditorInput or not change editorPart!");
265-
return;
266-
}
267268

268269
activeEditorPart = partRef;
269270
IFile file = ((IFileEditorInput) partRef.getEditorInput()).getFile();
@@ -350,6 +351,7 @@ public void runReportJob(ReportListView target, ImmutableList<ResultFilter> filt
350351
if (project == null) return;
351352
CcConfiguration config = new CcConfiguration(project);
352353
if (!config.isConfigured()) return;
354+
Logger.log(IStatus.INFO, "Running search to URL:"+config.getServerUrl());
353355

354356
SearchJob rlj = new SearchJob(1, Optional.of(new Instant().plus(500)), new SearchRequest
355357
(config.getServerUrl(), runId, filters));

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

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,10 @@
2929

3030
import cc.codechecker.api.runtime.SLogger;
3131
import cc.codechecker.api.runtime.CodecheckerServerThread;
32-
import cc.codechecker.api.runtime.LogI;
33-
3432

3533
public class StartupJob extends Job {
3634

37-
35+
3836

3937
EditorPartListener partListener;
4038
ProjectExplorerSelectionListener projectexplorerselectionlistener;
@@ -72,27 +70,46 @@ public IStatus runInUIThread(IProgressMonitor monitor) {
7270
ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() {
7371

7472
@Override
75-
public void resourceChanged(IResourceChangeEvent event) {
76-
Logger.log(IStatus.INFO, " resourcechangedEvent"+event.getType());
73+
public void resourceChanged(final IResourceChangeEvent event) {
7774
switch (event.getType()) {
7875
case IResourceChangeEvent.POST_BUILD: {
79-
try {
80-
final HashSet<IProject> changedProjects = new HashSet<>();
81-
if (event.getBuildKind() != IncrementalProjectBuilder.CLEAN_BUILD) {
76+
//On Eclipse FULL_BUILD and INCREMENTAL build, recheck the project
77+
//on clean build drop the checker database
78+
//ignore AUTO_BUILD
79+
try{
80+
if (event.getBuildKind() != IncrementalProjectBuilder.AUTO_BUILD){
81+
Logger.log(IStatus.INFO, "Build called. type:"+event.getBuildKind());
82+
final HashSet<IProject> builtProjects = new HashSet<>();
83+
final HashSet<IProject> cleanedProjects = new HashSet<>();
8284
event.getDelta().accept(new IResourceDeltaVisitor() {
83-
public boolean visit(final IResourceDelta delta) throws CoreException {
84-
IResource resource = delta.getResource();
85-
IProject project=resource.getProject();
85+
public boolean visit(final IResourceDelta delta) throws CoreException {
86+
IProject project=delta.getResource().getProject();
8687
if (project!=null && project.hasNature(CodeCheckerNature.NATURE_ID)){
87-
changedProjects.add(project);
88+
if (event.getBuildKind() == IncrementalProjectBuilder.FULL_BUILD
89+
||event.getBuildKind() == IncrementalProjectBuilder.INCREMENTAL_BUILD){
90+
builtProjects.add(project);
91+
}
92+
else
93+
if (event.getBuildKind() == IncrementalProjectBuilder.CLEAN_BUILD){
94+
cleanedProjects.add(project);
95+
}
8896
}
8997
return true;
9098
}
9199
});
92-
for (IProject p : changedProjects) {
100+
//re-analyze built projects
101+
for (IProject p : builtProjects) {
93102
onProjectBuilt(p);
103+
}
104+
//drop cleaned projects
105+
for (IProject p : cleanedProjects) {
106+
onProjectCleaned(p);
107+
}
108+
}else
109+
if (event.getBuildKind()== IncrementalProjectBuilder.CLEAN_BUILD){
110+
Logger.log(IStatus.INFO, "CLEAN_BUILD called. Resetting bug database");
111+
94112
}
95-
}
96113
} catch (CoreException e) {
97114
// TODO Auto-generated catch block
98115
Logger.log(IStatus.ERROR, " " + e);
@@ -161,10 +178,39 @@ private void onProjectBuilt(IProject project) {
161178
}
162179
}
163180

181+
private void onProjectCleaned(IProject project) {
182+
if (project == null)
183+
return;
184+
Logger.log(IStatus.INFO,
185+
" " + project.getName() + " onProjectCleaned called.");
186+
try {
187+
if (!project.hasNature(CodeCheckerNature.NATURE_ID)) {
188+
return;
189+
}
190+
} catch (CoreException e) {
191+
// TODO Auto-generated catch block
192+
Logger.log(IStatus.ERROR, "" + e);
193+
Logger.log(IStatus.INFO, "" + e.getStackTrace());
194+
}
195+
CodecheckerServerThread server = CodeCheckerContext.getInstance().getServerObject(project);
196+
Logger.log(IStatus.INFO,
197+
" " + project.getName() + "stopping server");
198+
server.stop();
199+
Logger.log(IStatus.INFO,
200+
" " + project.getName() + " server stopped.");
201+
server.cleanDB();
202+
//FIXME: database needs to be recreated at this point.
203+
//and the results should be emptied.
204+
Logger.log(IStatus.INFO,
205+
" " + project.getName() + " db cleaned;");
206+
server.start();
207+
Logger.log(IStatus.INFO,
208+
" " + project.getName() + " server started.");
209+
}
210+
164211
private void projectOpened(IProject project) {
165212
if (project == null)
166213
return;
167-
Logger.log(IStatus.INFO, "projectOpened!" + project.getName());
168214
try {
169215
//if CodecheCker nature is not set or the project is non-CDT we don launch CodeChecker server
170216
if (!project.hasNature(CodeCheckerNature.NATURE_ID) ||

eclipse-plugin/eclipse/cc.codechecker.eclipse.plugin/src/cc/codechecker/plugin/markers/MarkerListener.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void run() {
5959
for (ReportInfo ri : list) {
6060
String relName = config.convertFilenameFromServer(ri.getLastBugPathItem()
6161
.getFile());
62-
Logger.log(IStatus.INFO, " Filename : " + relName);
62+
//Logger.log(IStatus.INFO, " Filename : " + relName);
6363
IFile fileinfo = project.getFile(relName);
6464

6565
if (fileinfo != null && fileinfo.exists()) {
@@ -74,7 +74,7 @@ public void run() {
7474
}
7575

7676
try {
77-
Logger.log(IStatus.INFO, " ReportInfo : " + ri);
77+
//Logger.log(IStatus.INFO, " ReportInfo : " + ri);
7878
IMarker marker = fileinfo.createMarker("cc.codechecker.markers" + "" +
7979
".problemmarker");
8080
marker.setAttribute(IMarker.LINE_NUMBER, (int) ri.getLastBugPathItem
@@ -83,7 +83,7 @@ public void run() {
8383
.getStartPosition().getColumn());
8484
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
8585
marker.setAttribute(IMarker.MESSAGE, ri.getCheckerMsg());
86-
Logger.log(IStatus.INFO, " Marker line: " + marker.getAttribute(IMarker.LINE_NUMBER));
86+
//Logger.log(IStatus.INFO, " Marker line: " + marker.getAttribute(IMarker.LINE_NUMBER));
8787
} catch (CoreException e) {
8888
// TODO Auto-generated catch block
8989
Logger.log(IStatus.ERROR, " " + e);

eclipse-plugin/eclipse/cc.codechecker.eclipse.plugin/src/cc/codechecker/plugin/views/report/list/ReportListView.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ private void redoJob() {
273273
}
274274

275275
public void onEditorChanged(IProject project, String filename) {
276+
Logger.log(IStatus.INFO, "OnEditorchanged:"+project.getName());
276277
if (project != currentProject) {
277278
this.currentProject = project;
278279
//CodeCheckerContext.getInstance().runRunListJob(this);

eclipse-plugin/service/cc.codechecker.service.api/src/main/java/cc/codechecker/api/runtime/CodeCheckEnvironmentChecker.java

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,11 @@ public class CodeCheckEnvironmentChecker {
2020
public final String checkerDir; // root directory of CodeChecker
2121
public final String codeCheckerCommand; // CodecCheker executable path
2222
private Map<ConfigTypes,String> config;
23-
2423
private String checkerList;
25-
26-
public final ImmutableMap<String, String> environmentBefore; // with specific python. This
24+
25+
//with specific python. This
2726
// can be used to run CodeChecker
28-
//public final ImmutableMap<String, String> environmentDuringChecks; // this can be added to
29-
27+
public final ImmutableMap<String, String> environmentBefore;
3028
public Map<String, String> environmentAddList;
3129

3230
public Map<String, String> getEnvironmentAddList() {
@@ -66,10 +64,10 @@ public CodeCheckEnvironmentChecker(Map<ConfigTypes,String> config_m) {
6664
environmentAddList = new HashMap<String, String>(){{
6765
put("LD_LIBRARY_PATH", checkerDir + "/ld_logger/lib");
6866
put("_", checkerDir + "/bin/CodeChecker");
69-
put("CC_logger_GCC_LIKE", getConfigValue(ConfigTypes.COMPILERS));
67+
put("CC_LOGGER_GCC_LIKE", getConfigValue(ConfigTypes.COMPILERS));
7068
put("LD_PRELOAD","ldlogger.so");
71-
put("CC_logger_FILE", getConfigValue(ConfigTypes.CHECKER_WORKSPACE) + "/compilation_commands.json.javarunner");
72-
put("CC_logger_BIN", checkerDir + "/bin/ldlogger");
69+
put("CC_LOGGER_FILE", getConfigValue(ConfigTypes.CHECKER_WORKSPACE) + "/compilation_commands.json.javarunner");
70+
put("CC_LOGGER_BIN", checkerDir + "/bin/ldlogger");
7371
}};
7472

7573
if(pythonEnvironment.isPresent()) {
@@ -136,7 +134,7 @@ public boolean isJavaRunner(int serverPort) {
136134
ShellExecutorHelper she = new ShellExecutorHelper(environmentBefore);
137135

138136
String cmd = codeCheckerCommand + " cmd runs -p " + serverPort + " -o json";
139-
Optional<String> ccOutput = she.waitReturnOutput(cmd);
137+
Optional<String> ccOutput = she.waitReturnOutput(cmd,true);
140138
if (ccOutput.isPresent()) {
141139
return ccOutput.get().contains("javarunner");
142140
}
@@ -167,6 +165,25 @@ public String createCheckCommmand(String buildLog){
167165
return codeCheckerCommand + " check " + getConfigValue(ConfigTypes.CHECKER_LIST) + "-j "+ getConfigValue(ConfigTypes.ANAL_THREADS) + " -n javarunner -w " + getConfigValue(ConfigTypes.CHECKER_WORKSPACE) + " -l " +
168166
buildLog;
169167
}
168+
169+
170+
/*
171+
*
172+
* drops codechecker Database
173+
*
174+
*/
175+
public void dropDB(){
176+
String dbPath=getConfigValue(ConfigTypes.CHECKER_WORKSPACE)+"/codechecker.sqlite";
177+
SLogger.log(LogI.INFO,"Dropping database:"+dbPath);
178+
File f = new File(dbPath);
179+
if (f.isFile()){
180+
if (!f.delete())
181+
SLogger.log(LogI.ERROR,"Cannot delte CodeChecker DB. "+dbPath);
182+
}
183+
else
184+
SLogger.log(LogI.ERROR,"Cannot delte CodeChecker DB. File not exists:"+dbPath);
185+
}
186+
170187

171188
public String createServerCommand(String port){
172189
return codeCheckerCommand + " server --not-host-only -w " +
@@ -180,12 +197,12 @@ public String createServerCommand(String port){
180197
* @param fileName Build log in the http://clang.llvm.org/docs/JSONCompilationDatabase.html format.
181198
* @return CodeChecker check command output
182199
*/
183-
public String processLog(String fileName) {
200+
public String processLog(String fileName, boolean logToConsole) {
184201
ShellExecutorHelper she = new ShellExecutorHelper(environmentBefore);
185202
String cmd = createCheckCommmand(fileName);
186203

187204
SLogger.log(LogI.INFO, "SERVER_SER_MSG >> processLog >> "+ cmd);
188-
Optional<String> ccOutput = she.waitReturnOutput(cmd);
205+
Optional<String> ccOutput = she.waitReturnOutput(cmd,logToConsole);
189206

190207
if (ccOutput.isPresent()) {
191208
// assume it succeeded, and delete the log file...
@@ -199,7 +216,7 @@ public String processLog(String fileName) {
199216
public String getCheckerList() {
200217
ShellExecutorHelper she = new ShellExecutorHelper(environmentBefore);
201218
String cmd = codeCheckerCommand + " checkers";
202-
Optional<String> ccOutput = she.waitReturnOutput(cmd);
219+
Optional<String> ccOutput = she.waitReturnOutput(cmd,false);
203220
return ccOutput.or("");
204221
}
205222

0 commit comments

Comments
 (0)