mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 14:42:11 +02:00
[279740] - Trying to separate public API and some clean-up
This commit is contained in:
parent
0888fe2ffe
commit
ac758f71fb
28 changed files with 655 additions and 121 deletions
|
@ -11,5 +11,4 @@ Require-Bundle: org.eclipse.core.runtime,
|
||||||
Bundle-ActivationPolicy: lazy
|
Bundle-ActivationPolicy: lazy
|
||||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
||||||
Export-Package: org.eclipse.cdt.codan.core,
|
Export-Package: org.eclipse.cdt.codan.core,
|
||||||
org.eclipse.cdt.codan.core.builder,
|
|
||||||
org.eclipse.cdt.codan.core.model
|
org.eclipse.cdt.codan.core.model
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<builder
|
<builder
|
||||||
hasNature="true">
|
hasNature="true">
|
||||||
<run
|
<run
|
||||||
class="org.eclipse.cdt.codan.core.builder.CodanBuilder">
|
class="org.eclipse.cdt.codan.internal.core.CodanBuilder">
|
||||||
</run>
|
</run>
|
||||||
</builder>
|
</builder>
|
||||||
</extension>
|
</extension>
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
point="org.eclipse.core.resources.natures">
|
point="org.eclipse.core.resources.natures">
|
||||||
<runtime>
|
<runtime>
|
||||||
<run
|
<run
|
||||||
class="org.eclipse.cdt.codan.core.builder.CodeAnlysisNature">
|
class="org.eclipse.cdt.codan.internal.core.CodeAnlysisNature">
|
||||||
</run>
|
</run>
|
||||||
</runtime>
|
</runtime>
|
||||||
<builder
|
<builder
|
||||||
|
|
|
@ -3,9 +3,8 @@ package org.eclipse.cdt.codan.core;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.builder.CodanBuilder;
|
import org.eclipse.cdt.codan.internal.core.CodanBuilder;
|
||||||
import org.eclipse.cdt.codan.core.model.CodanProblemReporter;
|
import org.eclipse.cdt.codan.internal.core.model.CodanMarkerProblemReporter;
|
||||||
import org.eclipse.cdt.codan.core.model.CodanRuntime;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IWorkspaceRoot;
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
|
@ -28,10 +27,10 @@ public class CodanApplication implements IApplication {
|
||||||
extractArguments(args);
|
extractArguments(args);
|
||||||
CodanBuilder codanBuilder = new CodanBuilder();
|
CodanBuilder codanBuilder = new CodanBuilder();
|
||||||
CodanRuntime runtime = CodanRuntime.getInstance();
|
CodanRuntime runtime = CodanRuntime.getInstance();
|
||||||
runtime.setProblemReporter(new CodanProblemReporter() {
|
runtime.setProblemReporter(new CodanMarkerProblemReporter() {
|
||||||
@Override
|
@Override
|
||||||
public void reportProblem(String id, IFile file, int lineNumber,
|
public void reportProblem(String id, int severity, IFile file,
|
||||||
String message) {
|
int lineNumber, int startChar, int endChar, String message) {
|
||||||
System.out.println(file.getLocation() + ":" + lineNumber + ": "
|
System.out.println(file.getLocation() + ":" + lineNumber + ": "
|
||||||
+ message);
|
+ message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.eclipse.cdt.codan.core;
|
package org.eclipse.cdt.codan.core;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.internal.core.CodeAnlysisNature;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Plugin;
|
import org.eclipse.core.runtime.Plugin;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
@ -13,6 +14,7 @@ import org.osgi.framework.BundleContext;
|
||||||
public class CodanCorePlugin extends Plugin {
|
public class CodanCorePlugin extends Plugin {
|
||||||
// The plug-in ID
|
// The plug-in ID
|
||||||
public static final String PLUGIN_ID = "org.eclipse.cdt.codan.core";
|
public static final String PLUGIN_ID = "org.eclipse.cdt.codan.core";
|
||||||
|
public static final String NATURE_ID = CodeAnlysisNature.NATURE_ID;
|
||||||
// The shared instance
|
// The shared instance
|
||||||
private static CodanCorePlugin plugin;
|
private static CodanCorePlugin plugin;
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.builder;
|
package org.eclipse.cdt.codan.core;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.model.CodanProblem;
|
|
||||||
import org.eclipse.cdt.codan.core.model.CodanSeverity;
|
import org.eclipse.cdt.codan.core.model.CodanSeverity;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblem;
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblemProfile;
|
import org.eclipse.cdt.codan.core.model.IProblemProfile;
|
||||||
|
import org.eclipse.cdt.codan.internal.core.model.CodanProblem;
|
||||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009 Alena Laskavaia
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Alena Laskavaia - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.codan.core;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.model.ICheckersRegistry;
|
||||||
|
import org.eclipse.cdt.codan.core.model.ICodanAstReconciler;
|
||||||
|
import org.eclipse.cdt.codan.core.model.ICodanBuilder;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemReporter;
|
||||||
|
import org.eclipse.cdt.codan.internal.core.CheckersRegisry;
|
||||||
|
import org.eclipse.cdt.codan.internal.core.CodanBuilder;
|
||||||
|
import org.eclipse.cdt.codan.internal.core.model.CodanMarkerProblemReporter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runtime singleton class to get access to Codan framework parts
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CodanRuntime {
|
||||||
|
private static CodanRuntime instance = new CodanRuntime();
|
||||||
|
private IProblemReporter problemReporter = new CodanMarkerProblemReporter();
|
||||||
|
private CodanBuilder builder = new CodanBuilder();
|
||||||
|
private CheckersRegisry checkers = CheckersRegisry.getInstance();
|
||||||
|
|
||||||
|
public IProblemReporter getProblemReporter() {
|
||||||
|
return problemReporter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProblemReporter(IProblemReporter reporter) {
|
||||||
|
problemReporter = reporter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CodanRuntime getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICodanBuilder getBuilder() {
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICodanAstReconciler getAstQuickBuilder() {
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICheckersRegistry getChechersRegistry() {
|
||||||
|
return checkers;
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,22 +10,54 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.model;
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.CodanRuntime;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
|
|
||||||
public abstract class AbstractChecker implements IChecker {
|
public abstract class AbstractChecker implements IChecker {
|
||||||
String name;
|
protected String name;
|
||||||
|
|
||||||
public AbstractChecker() {
|
public AbstractChecker() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if checker is enabled in context of resource, if returns false checker's "processResource"
|
||||||
|
* method won't be called
|
||||||
|
*/
|
||||||
public boolean enabledInContext(IResource res) {
|
public boolean enabledInContext(IResource res) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reports a simple problem for given file and line
|
||||||
|
* @param id - problem id
|
||||||
|
* @param file - file
|
||||||
|
* @param lineNumber - line
|
||||||
|
* @param arg - problem argument, if problem does not define error message it will be error message
|
||||||
|
* (not recommended because of internationalization)
|
||||||
|
*/
|
||||||
public void reportProblem(String id, IFile file, int lineNumber,
|
public void reportProblem(String id, IFile file, int lineNumber,
|
||||||
String message) {
|
String arg) {
|
||||||
CodanRuntime.getInstance().getProblemReporter().reportProblem(id, file,
|
getProblemReporter().reportProblem(id, new ProblemLocation(file,
|
||||||
lineNumber, message);
|
lineNumber), arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reports a simple problem for given file and line, error message comes from problem definition
|
||||||
|
* @param id - problem id
|
||||||
|
* @param file - file
|
||||||
|
* @param lineNumber - line
|
||||||
|
*/
|
||||||
|
public void reportProblem(String id, IFile file, int lineNumber) {
|
||||||
|
getProblemReporter().reportProblem(id, new ProblemLocation(file,
|
||||||
|
lineNumber), new Object[]{});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return problem reporter for given checker
|
||||||
|
*/
|
||||||
|
protected IProblemReporter getProblemReporter() {
|
||||||
|
return CodanRuntime.getInstance().getProblemReporter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,13 +79,15 @@ public abstract class AbstractIndexAstChecker extends AbstractChecker implements
|
||||||
|
|
||||||
public void reportProblem(String id, IASTNode astNode, String message) {
|
public void reportProblem(String id, IASTNode astNode, String message) {
|
||||||
IASTFileLocation astLocation = astNode.getFileLocation();
|
IASTFileLocation astLocation = astNode.getFileLocation();
|
||||||
IFile astFile = file;
|
IPath location = new Path(astLocation.getFileName());
|
||||||
|
IFile astFile = ResourcesPlugin.getWorkspace().getRoot()
|
||||||
|
.getFileForLocation(location);
|
||||||
if (astFile == null) {
|
if (astFile == null) {
|
||||||
IPath location = new Path(astLocation.getFileName());
|
astFile = file;
|
||||||
astFile = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(location);
|
|
||||||
}
|
}
|
||||||
|
getProblemReporter().reportProblem(
|
||||||
CodanRuntime.getInstance().getProblemReporter().reportProblem(id,
|
id,
|
||||||
astFile, astLocation.getStartingLineNumber(), message);
|
new ProblemLocation(astFile, astLocation
|
||||||
|
.getStartingLineNumber()), message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009 Alena Laskavaia
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Alena Laskavaia - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Alena
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ICheckersRegistry {
|
||||||
|
public abstract Iterator<IChecker> iterator();
|
||||||
|
|
||||||
|
public abstract void addChecker(IChecker checker);
|
||||||
|
|
||||||
|
public abstract void addProblem(IProblem p, String category);
|
||||||
|
|
||||||
|
public abstract void addCategory(IProblemCategory p, String category);
|
||||||
|
|
||||||
|
public abstract void addRefProblem(IChecker c, IProblem p);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public abstract IProblemProfile getDefaultProfile();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public abstract IProblemProfile getWorkspaceProfile();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param element
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public abstract IProblemProfile getResourceProfile(IResource element);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param element
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public abstract IProblemProfile getResourceProfileWorkingCopy(
|
||||||
|
IResource element);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set profile for resource. This method is called by UI, and should not be
|
||||||
|
* called by clients directly
|
||||||
|
*
|
||||||
|
* @param resource
|
||||||
|
* - resource
|
||||||
|
* @param profile
|
||||||
|
* - problems profile
|
||||||
|
*/
|
||||||
|
public abstract void updateProfile(IResource resource,
|
||||||
|
IProblemProfile profile);
|
||||||
|
}
|
|
@ -10,23 +10,13 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.model;
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runtime singleton class to get access to Codan framework parts
|
* @author Alena
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class CodanRuntime {
|
public interface ICodanAstReconciler {
|
||||||
private static CodanRuntime instance = new CodanRuntime();
|
public void reconcileAst(IASTTranslationUnit ast, IProgressMonitor monitor);
|
||||||
private CodanProblemReporter problemReporter = new CodanProblemReporter();
|
|
||||||
|
|
||||||
public CodanProblemReporter getProblemReporter() {
|
|
||||||
return problemReporter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProblemReporter(CodanProblemReporter reporter) {
|
|
||||||
problemReporter = reporter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static CodanRuntime getInstance() {
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009 Alena Laskavaia
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Alena Laskavaia - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Alena
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ICodanBuilder {
|
||||||
|
public void processResource(IResource resource, IProgressMonitor monitor);
|
||||||
|
}
|
|
@ -10,6 +10,8 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.model;
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
public interface IProblem extends IProblemElement {
|
public interface IProblem extends IProblemElement {
|
||||||
String getName();
|
String getName();
|
||||||
|
|
||||||
|
@ -19,5 +21,17 @@ public interface IProblem extends IProblemElement {
|
||||||
|
|
||||||
CodanSeverity getSeverity();
|
CodanSeverity getSeverity();
|
||||||
|
|
||||||
IProblemCategory getCategory();
|
String getMessagePattern();
|
||||||
|
|
||||||
|
void setSeverity(CodanSeverity sev);
|
||||||
|
|
||||||
|
void setEnabled(boolean checked);
|
||||||
|
|
||||||
|
void setMessagePattern(String message);
|
||||||
|
|
||||||
|
public void setProperty(Object key, Object value);
|
||||||
|
|
||||||
|
public Object getProperty(Object key);
|
||||||
|
|
||||||
|
public Collection<Object> getPropertyKeys();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009 Alena Laskavaia
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Alena Laskavaia - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface to describe problem location. Usually contains file and linenumber,
|
||||||
|
* also supports character positions for sophisticated errors.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface IProblemLocation {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return File for the problem - absolute full paths
|
||||||
|
*/
|
||||||
|
IFile getFile();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return Primary line for the problem, lines start with 1 for file. If -1
|
||||||
|
* char position would be used.
|
||||||
|
*/
|
||||||
|
int getLineNumber();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return character position where problem starts within file, first char
|
||||||
|
* is 0, inclusive, tab count as one. If unknown return -1.
|
||||||
|
*/
|
||||||
|
int getStartingChar();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return character position where problem ends within file, first char is
|
||||||
|
* 0, exclusive, tab count as one. If unknown return -1.
|
||||||
|
*/
|
||||||
|
int getEndingChar();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return extra data for problem location, checker specific, can be
|
||||||
|
* backtrace for example
|
||||||
|
*/
|
||||||
|
Object getData();
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009 Alena Laskavaia
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Alena Laskavaia - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IProblemReporter - interface to report problems
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface IProblemReporter {
|
||||||
|
/**
|
||||||
|
* Report a problem with "problemId" id on location determined by "loc",
|
||||||
|
* using problem specific error message customised by args.
|
||||||
|
* @param problemId - id of the problem registers with checker
|
||||||
|
* @param loc - location object
|
||||||
|
* @param args - custom args, can be null, in this case default message is reported
|
||||||
|
*/
|
||||||
|
public void reportProblem(String problemId, IProblemLocation loc,
|
||||||
|
Object ... args);
|
||||||
|
}
|
|
@ -0,0 +1,109 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009 Alena Laskavaia
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Alena Laskavaia - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of IProblemLocation
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ProblemLocation implements IProblemLocation {
|
||||||
|
protected IFile file;
|
||||||
|
protected int line;
|
||||||
|
protected int posStart;
|
||||||
|
protected int posEnd;
|
||||||
|
protected Object extra;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param file
|
||||||
|
* @param line
|
||||||
|
* @param lineEnd
|
||||||
|
* @param posStart
|
||||||
|
* @param posEnd
|
||||||
|
*/
|
||||||
|
public ProblemLocation(IFile file, int line) {
|
||||||
|
this.file = file;
|
||||||
|
this.line = line;
|
||||||
|
this.posStart = -1;
|
||||||
|
this.posEnd = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param file
|
||||||
|
* @param startingLineNumber
|
||||||
|
* @param endingLineNumber
|
||||||
|
*/
|
||||||
|
public ProblemLocation(IFile file, int startChar, int endChar) {
|
||||||
|
this.file = file;
|
||||||
|
this.line = -1;
|
||||||
|
this.posStart = startChar;
|
||||||
|
this.posEnd = endChar;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.IProblemLocation#getData()
|
||||||
|
*/
|
||||||
|
public Object getData() {
|
||||||
|
return extra;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(Object data) {
|
||||||
|
this.extra = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.IProblemLocation#getFile()
|
||||||
|
*/
|
||||||
|
public IFile getFile() {
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.IProblemLocation#getLine()
|
||||||
|
*/
|
||||||
|
public int getLineNumber() {
|
||||||
|
return getStartingLineNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.IProblemLocation#getStartLine()
|
||||||
|
*/
|
||||||
|
public int getStartingLineNumber() {
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.IProblemLocation#getStartPos()
|
||||||
|
*/
|
||||||
|
public int getStartingChar() {
|
||||||
|
return posStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.IProblemLocation#getEndingChar()
|
||||||
|
*/
|
||||||
|
public int getEndingChar() {
|
||||||
|
return posEnd;
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,6 +13,8 @@ package org.eclipse.cdt.codan.core.model;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.internal.core.model.CodanProblemCategory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Alena
|
* @author Alena
|
||||||
*
|
*
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.model;
|
package org.eclipse.cdt.codan.internal.core;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
@ -16,8 +16,16 @@ import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.CodanCorePlugin;
|
import org.eclipse.cdt.codan.core.CodanCorePlugin;
|
||||||
|
import org.eclipse.cdt.codan.core.CodanPreferencesLoader;
|
||||||
import org.eclipse.cdt.codan.core.PreferenceConstants;
|
import org.eclipse.cdt.codan.core.PreferenceConstants;
|
||||||
import org.eclipse.cdt.codan.core.builder.CodanPreferencesLoader;
|
import org.eclipse.cdt.codan.core.model.IChecker;
|
||||||
|
import org.eclipse.cdt.codan.core.model.ICheckersRegistry;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemCategory;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemProfile;
|
||||||
|
import org.eclipse.cdt.codan.core.model.ProblemProfile;
|
||||||
|
import org.eclipse.cdt.codan.internal.core.model.CodanProblem;
|
||||||
|
import org.eclipse.cdt.codan.internal.core.model.CodanProblemCategory;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.ProjectScope;
|
import org.eclipse.core.resources.ProjectScope;
|
||||||
|
@ -28,7 +36,7 @@ import org.eclipse.core.runtime.IExtensionPoint;
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
||||||
|
|
||||||
public class CheckersRegisry implements Iterable<IChecker> {
|
public class CheckersRegisry implements Iterable<IChecker>, ICheckersRegistry {
|
||||||
private static final String EXTENSION_POINT_NAME = "checkers";
|
private static final String EXTENSION_POINT_NAME = "checkers";
|
||||||
private static final String CHECKER_ELEMENT = "checker";
|
private static final String CHECKER_ELEMENT = "checker";
|
||||||
private static final String PROBLEM_ELEMENT = "problem";
|
private static final String PROBLEM_ELEMENT = "problem";
|
||||||
|
@ -176,6 +184,9 @@ public class CheckersRegisry implements Iterable<IChecker> {
|
||||||
return elementValue;
|
return elementValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#iterator()
|
||||||
|
*/
|
||||||
public Iterator<IChecker> iterator() {
|
public Iterator<IChecker> iterator() {
|
||||||
return checkers.iterator();
|
return checkers.iterator();
|
||||||
}
|
}
|
||||||
|
@ -186,10 +197,16 @@ public class CheckersRegisry implements Iterable<IChecker> {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#addChecker(org.eclipse.cdt.codan.core.model.IChecker)
|
||||||
|
*/
|
||||||
public void addChecker(IChecker checker) {
|
public void addChecker(IChecker checker) {
|
||||||
checkers.add(checker);
|
checkers.add(checker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#addProblem(org.eclipse.cdt.codan.core.model.IProblem, java.lang.String)
|
||||||
|
*/
|
||||||
public void addProblem(IProblem p, String category) {
|
public void addProblem(IProblem p, String category) {
|
||||||
IProblemCategory cat = getDefaultProfile().findCategory(category);
|
IProblemCategory cat = getDefaultProfile().findCategory(category);
|
||||||
if (cat == null)
|
if (cat == null)
|
||||||
|
@ -197,6 +214,9 @@ public class CheckersRegisry implements Iterable<IChecker> {
|
||||||
((ProblemProfile) getDefaultProfile()).addProblem(p, cat);
|
((ProblemProfile) getDefaultProfile()).addProblem(p, cat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#addCategory(org.eclipse.cdt.codan.core.model.IProblemCategory, java.lang.String)
|
||||||
|
*/
|
||||||
public void addCategory(IProblemCategory p, String category) {
|
public void addCategory(IProblemCategory p, String category) {
|
||||||
IProblemCategory cat = getDefaultProfile().findCategory(category);
|
IProblemCategory cat = getDefaultProfile().findCategory(category);
|
||||||
if (cat == null)
|
if (cat == null)
|
||||||
|
@ -204,18 +224,21 @@ public class CheckersRegisry implements Iterable<IChecker> {
|
||||||
((ProblemProfile) getDefaultProfile()).addCategory(p, cat);
|
((ProblemProfile) getDefaultProfile()).addCategory(p, cat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#addRefProblem(org.eclipse.cdt.codan.core.model.IChecker, org.eclipse.cdt.codan.core.model.IProblem)
|
||||||
|
*/
|
||||||
public void addRefProblem(IChecker c, IProblem p) {
|
public void addRefProblem(IChecker c, IProblem p) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/* (non-Javadoc)
|
||||||
* @return
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#getDefaultProfile()
|
||||||
*/
|
*/
|
||||||
public IProblemProfile getDefaultProfile() {
|
public IProblemProfile getDefaultProfile() {
|
||||||
return profiles.get(DEFAULT);
|
return profiles.get(DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/* (non-Javadoc)
|
||||||
* @return
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#getWorkspaceProfile()
|
||||||
*/
|
*/
|
||||||
public IProblemProfile getWorkspaceProfile() {
|
public IProblemProfile getWorkspaceProfile() {
|
||||||
IProblemProfile wp = profiles.get(ResourcesPlugin.getWorkspace());
|
IProblemProfile wp = profiles.get(ResourcesPlugin.getWorkspace());
|
||||||
|
@ -239,9 +262,8 @@ public class CheckersRegisry implements Iterable<IChecker> {
|
||||||
profiles.put(element, profile);
|
profiles.put(element, profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/* (non-Javadoc)
|
||||||
* @param element
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#getResourceProfile(org.eclipse.core.resources.IResource)
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public IProblemProfile getResourceProfile(IResource element) {
|
public IProblemProfile getResourceProfile(IResource element) {
|
||||||
IProblemProfile prof = profiles.get(element);
|
IProblemProfile prof = profiles.get(element);
|
||||||
|
@ -274,9 +296,8 @@ public class CheckersRegisry implements Iterable<IChecker> {
|
||||||
return prof;
|
return prof;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/* (non-Javadoc)
|
||||||
* @param element
|
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#getResourceProfileWorkingCopy(org.eclipse.core.resources.IResource)
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public IProblemProfile getResourceProfileWorkingCopy(IResource element) {
|
public IProblemProfile getResourceProfileWorkingCopy(IResource element) {
|
||||||
if (element instanceof IProject) {
|
if (element instanceof IProject) {
|
|
@ -8,17 +8,20 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.builder;
|
package org.eclipse.cdt.codan.internal.core;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.CodanCorePlugin;
|
import org.eclipse.cdt.codan.core.CodanCorePlugin;
|
||||||
import org.eclipse.cdt.codan.core.model.CheckersRegisry;
|
import org.eclipse.cdt.codan.core.CodanRuntime;
|
||||||
import org.eclipse.cdt.codan.core.model.CodanRuntime;
|
|
||||||
import org.eclipse.cdt.codan.core.model.ICAstChecker;
|
import org.eclipse.cdt.codan.core.model.ICAstChecker;
|
||||||
import org.eclipse.cdt.codan.core.model.IChecker;
|
import org.eclipse.cdt.codan.core.model.IChecker;
|
||||||
|
import org.eclipse.cdt.codan.core.model.ICodanAstReconciler;
|
||||||
|
import org.eclipse.cdt.codan.core.model.ICodanBuilder;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemReporter;
|
||||||
|
import org.eclipse.cdt.codan.internal.core.model.CodanMarkerProblemReporter;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -32,8 +35,10 @@ import org.eclipse.core.resources.IncrementalProjectBuilder;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
|
|
||||||
public class CodanBuilder extends IncrementalProjectBuilder {
|
public class CodanBuilder extends IncrementalProjectBuilder implements
|
||||||
|
ICodanBuilder, ICodanAstReconciler {
|
||||||
public static final String BUILDER_ID = "org.eclipse.cdt.codan.core.codanBuilder";
|
public static final String BUILDER_ID = "org.eclipse.cdt.codan.core.codanBuilder";
|
||||||
|
|
||||||
public class CodanDeltaVisitor implements IResourceDeltaVisitor {
|
public class CodanDeltaVisitor implements IResourceDeltaVisitor {
|
||||||
|
@ -44,19 +49,26 @@ public class CodanBuilder extends IncrementalProjectBuilder {
|
||||||
* org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse
|
* org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse
|
||||||
* .core.resources.IResourceDelta)
|
* .core.resources.IResourceDelta)
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* org.eclipse.cdt.codan.internal.core.ICodanBuilder#visit(org.eclipse
|
||||||
|
* .core.resources.IResourceDelta)
|
||||||
|
*/
|
||||||
public boolean visit(IResourceDelta delta) throws CoreException {
|
public boolean visit(IResourceDelta delta) throws CoreException {
|
||||||
IResource resource = delta.getResource();
|
IResource resource = delta.getResource();
|
||||||
switch (delta.getKind()) {
|
switch (delta.getKind()) {
|
||||||
case IResourceDelta.ADDED:
|
case IResourceDelta.ADDED:
|
||||||
// handle added resource
|
// handle added resource
|
||||||
processResource(resource);
|
processResource(resource, new NullProgressMonitor());
|
||||||
break;
|
break;
|
||||||
case IResourceDelta.REMOVED:
|
case IResourceDelta.REMOVED:
|
||||||
// handle removed resource
|
// handle removed resource
|
||||||
break;
|
break;
|
||||||
case IResourceDelta.CHANGED:
|
case IResourceDelta.CHANGED:
|
||||||
// handle changed resource
|
// handle changed resource
|
||||||
processResource(resource);
|
processResource(resource, new NullProgressMonitor());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// return true to continue visiting children.
|
// return true to continue visiting children.
|
||||||
|
@ -66,7 +78,8 @@ public class CodanBuilder extends IncrementalProjectBuilder {
|
||||||
|
|
||||||
public class CodanResourceVisitor implements IResourceVisitor {
|
public class CodanResourceVisitor implements IResourceVisitor {
|
||||||
public boolean visit(IResource resource) {
|
public boolean visit(IResource resource) {
|
||||||
processResource(resource);
|
if (!(resource instanceof IProject))
|
||||||
|
processResource(resource, new NullProgressMonitor());
|
||||||
// return true to continue visiting children.
|
// return true to continue visiting children.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -93,12 +106,17 @@ public class CodanBuilder extends IncrementalProjectBuilder {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processResource(IResource resource) {
|
public void processResource(IResource resource, IProgressMonitor monitor) {
|
||||||
// String string = Platform.getPreferencesService().getString(
|
// String string = Platform.getPreferencesService().getString(
|
||||||
// CodanCorePlugin.PLUGIN_ID, "problems", "", null);
|
// CodanCorePlugin.PLUGIN_ID, "problems", "", null);
|
||||||
// System.err.println("set = " + string);
|
// System.err.println("set = " + string);
|
||||||
// delete general markers
|
// delete general markers
|
||||||
CodanRuntime.getInstance().getProblemReporter().deleteMarkers(resource);
|
IProblemReporter problemReporter = CodanRuntime.getInstance()
|
||||||
|
.getProblemReporter();
|
||||||
|
if (problemReporter instanceof CodanMarkerProblemReporter) {
|
||||||
|
((CodanMarkerProblemReporter) problemReporter)
|
||||||
|
.deleteMarkers(resource);
|
||||||
|
}
|
||||||
for (IChecker checker : CheckersRegisry.getInstance()) {
|
for (IChecker checker : CheckersRegisry.getInstance()) {
|
||||||
try {
|
try {
|
||||||
boolean run = false;
|
boolean run = false;
|
||||||
|
@ -110,12 +128,18 @@ public class CodanBuilder extends IncrementalProjectBuilder {
|
||||||
CodanCorePlugin.log(e);
|
CodanCorePlugin.log(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (resource instanceof IProject) {
|
||||||
|
try {
|
||||||
|
resource.accept(getResourceVisitor());
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CodanCorePlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reconcileAst(IASTTranslationUnit ast, IProgressMonitor monitor) {
|
public void reconcileAst(IASTTranslationUnit ast, IProgressMonitor monitor) {
|
||||||
if (ast == null)
|
if (ast == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
String filePath = ast.getFilePath();
|
String filePath = ast.getFilePath();
|
||||||
IWorkspace workspace = ResourcesPlugin.getWorkspace();
|
IWorkspace workspace = ResourcesPlugin.getWorkspace();
|
||||||
IWorkspaceRoot root = workspace.getRoot();
|
IWorkspaceRoot root = workspace.getRoot();
|
||||||
|
@ -124,8 +148,12 @@ public class CodanBuilder extends IncrementalProjectBuilder {
|
||||||
resources = root.findFilesForLocationURI(uri);
|
resources = root.findFilesForLocationURI(uri);
|
||||||
if (resources != null && resources.length > 0) {
|
if (resources != null && resources.length > 0) {
|
||||||
IFile resource = resources[0];
|
IFile resource = resources[0];
|
||||||
CodanRuntime.getInstance().getProblemReporter().deleteMarkers(
|
IProblemReporter problemReporter = CodanRuntime.getInstance()
|
||||||
resource);
|
.getProblemReporter();
|
||||||
|
if (problemReporter instanceof CodanMarkerProblemReporter) {
|
||||||
|
((CodanMarkerProblemReporter) problemReporter)
|
||||||
|
.deleteMarkers(resource);
|
||||||
|
}
|
||||||
for (IChecker checker : CheckersRegisry.getInstance()) {
|
for (IChecker checker : CheckersRegisry.getInstance()) {
|
||||||
try {
|
try {
|
||||||
boolean run = false;
|
boolean run = false;
|
||||||
|
@ -153,4 +181,13 @@ public class CodanBuilder extends IncrementalProjectBuilder {
|
||||||
// the visitor does the work.
|
// the visitor does the work.
|
||||||
delta.accept(new CodanDeltaVisitor());
|
delta.accept(new CodanDeltaVisitor());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.ICodanBuilder#getResourceVisitor()
|
||||||
|
*/
|
||||||
|
public CodanResourceVisitor getResourceVisitor() {
|
||||||
|
return new CodanResourceVisitor();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -8,7 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.builder;
|
package org.eclipse.cdt.codan.internal.core;
|
||||||
|
|
||||||
import org.eclipse.core.resources.ICommand;
|
import org.eclipse.core.resources.ICommand;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
|
@ -8,31 +8,67 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.model;
|
package org.eclipse.cdt.codan.internal.core.model;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemLocation;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemReporter;
|
||||||
|
import org.eclipse.cdt.codan.internal.core.CheckersRegisry;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
public class CodanProblemReporter {
|
public class CodanMarkerProblemReporter implements IProblemReporter {
|
||||||
public static final String GENERIC_CODE_ANALYSIS_MARKER_TYPE = "org.eclipse.cdt.codan.core.codanProblem";
|
public static final String GENERIC_CODE_ANALYSIS_MARKER_TYPE = "org.eclipse.cdt.codan.core.codanProblem";
|
||||||
|
|
||||||
public void reportProblem(String id, IFile file, int lineNumber,
|
/*
|
||||||
String message) {
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* org.eclipse.cdt.codan.core.model.IProblemReporter#reportProblem(java.
|
||||||
|
* lang.String, org.eclipse.cdt.codan.core.model.IProblemLocation,
|
||||||
|
* java.lang.Object[])
|
||||||
|
*/
|
||||||
|
public void reportProblem(String id, IProblemLocation loc, Object... args) {
|
||||||
|
IFile file = loc.getFile();
|
||||||
|
int lineNumber = loc.getLineNumber();
|
||||||
|
if (file == null)
|
||||||
|
throw new NullPointerException("file");
|
||||||
|
if (id == null)
|
||||||
|
throw new NullPointerException("id");
|
||||||
|
IProblem problem = CheckersRegisry.getInstance().getResourceProfile(
|
||||||
|
file).findProblem(id);
|
||||||
|
if (problem == null)
|
||||||
|
throw new IllegalArgumentException("Id is not registered");
|
||||||
|
if (problem.isEnabled() == false)
|
||||||
|
return; // skip
|
||||||
|
int severity = problem.getSeverity().intValue();
|
||||||
|
String messagePattern = problem.getMessagePattern();
|
||||||
|
String message = id;
|
||||||
|
if (messagePattern == null) {
|
||||||
|
if (args != null && args.length > 0 && args[0] instanceof String)
|
||||||
|
message = (String) args[0];
|
||||||
|
} else {
|
||||||
|
MessageFormat.format(messagePattern, args);
|
||||||
|
}
|
||||||
|
reportProblem(id, severity, file, lineNumber, loc.getStartingChar(),
|
||||||
|
loc.getEndingChar(), message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* org.eclipse.cdt.codan.core.model.IProblemReporter#reportProblem(java.
|
||||||
|
* lang.String, org.eclipse.core.resources.IFile, int, java.lang.String)
|
||||||
|
*/
|
||||||
|
public void reportProblem(String id, int severity, IFile file,
|
||||||
|
int lineNumber, int startChar, int endChar, String message) {
|
||||||
try {
|
try {
|
||||||
if (file == null)
|
|
||||||
throw new NullPointerException("file");
|
|
||||||
if (id == null)
|
|
||||||
throw new NullPointerException("id");
|
|
||||||
IProblem problem = CheckersRegisry.getInstance()
|
|
||||||
.getResourceProfile(file).findProblem(id);
|
|
||||||
if (problem == null)
|
|
||||||
throw new IllegalArgumentException("Id is not registered");
|
|
||||||
if (problem.isEnabled() == false)
|
|
||||||
return; // skip
|
|
||||||
int severity = problem.getSeverity().intValue();
|
|
||||||
// Do not put in duplicates
|
// Do not put in duplicates
|
||||||
IMarker[] cur = file.findMarkers(GENERIC_CODE_ANALYSIS_MARKER_TYPE,
|
IMarker[] cur = file.findMarkers(GENERIC_CODE_ANALYSIS_MARKER_TYPE,
|
||||||
false, IResource.DEPTH_ZERO);
|
false, IResource.DEPTH_ZERO);
|
||||||
|
@ -54,10 +90,10 @@ public class CodanProblemReporter {
|
||||||
.createMarker(GENERIC_CODE_ANALYSIS_MARKER_TYPE);
|
.createMarker(GENERIC_CODE_ANALYSIS_MARKER_TYPE);
|
||||||
marker.setAttribute(IMarker.MESSAGE, message);
|
marker.setAttribute(IMarker.MESSAGE, message);
|
||||||
marker.setAttribute(IMarker.SEVERITY, severity);
|
marker.setAttribute(IMarker.SEVERITY, severity);
|
||||||
if (lineNumber == -1) {
|
|
||||||
lineNumber = 1;
|
|
||||||
}
|
|
||||||
marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
|
marker.setAttribute(IMarker.LINE_NUMBER, lineNumber);
|
||||||
|
marker.setAttribute(IMarker.PROBLEM, id);
|
||||||
|
marker.setAttribute(IMarker.CHAR_END, endChar);
|
||||||
|
marker.setAttribute(IMarker.CHAR_START, startChar);
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
|
@ -8,21 +8,30 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.model;
|
package org.eclipse.cdt.codan.internal.core.model;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.model.CodanSeverity;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemCategory;
|
||||||
|
|
||||||
public class CodanProblem implements IProblem {
|
public class CodanProblem implements IProblem {
|
||||||
private String id;
|
private String id;
|
||||||
private String name;
|
private String name;
|
||||||
|
private String message;
|
||||||
private CodanSeverity severity = CodanSeverity.Warning;
|
private CodanSeverity severity = CodanSeverity.Warning;
|
||||||
private boolean enabled = true;
|
private boolean enabled = true;
|
||||||
|
private HashMap<Object, Object> properties = new HashMap<Object, Object>(0);
|
||||||
|
|
||||||
public CodanSeverity getSeverity() {
|
public CodanSeverity getSeverity() {
|
||||||
return severity;
|
return severity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CodanProblem(String id2, String name2) {
|
public CodanProblem(String problemId, String name) {
|
||||||
this.id = id2;
|
this.id = problemId;
|
||||||
this.name = name2;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
@ -66,4 +75,32 @@ public class CodanProblem implements IProblem {
|
||||||
public Object clone() throws CloneNotSupportedException {
|
public Object clone() throws CloneNotSupportedException {
|
||||||
return super.clone();
|
return super.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setProperty(Object key, Object value) {
|
||||||
|
properties.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getProperty(Object key) {
|
||||||
|
return properties.get(key);
|
||||||
|
};
|
||||||
|
|
||||||
|
public Collection<Object> getPropertyKeys() {
|
||||||
|
return properties.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.model.IProblem#getMessagePattern()
|
||||||
|
*/
|
||||||
|
public String getMessagePattern() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param message the message to set
|
||||||
|
*/
|
||||||
|
public void setMessagePattern(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -8,11 +8,15 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.model;
|
package org.eclipse.cdt.codan.internal.core.model;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemCategory;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemElement;
|
||||||
|
|
||||||
public class CodanProblemCategory implements IProblemCategory, Cloneable {
|
public class CodanProblemCategory implements IProblemCategory, Cloneable {
|
||||||
private String id;
|
private String id;
|
||||||
private String name;
|
private String name;
|
|
@ -55,7 +55,7 @@ public class BuildPropertyPage extends FieldEditorPreferencePage implements
|
||||||
// "Confirmation",
|
// "Confirmation",
|
||||||
// "Do you want to remove existing problems? If build is disabled they won't be updated anymore.");
|
// "Do you want to remove existing problems? If build is disabled they won't be updated anymore.");
|
||||||
// if (openQuestion == true) {
|
// if (openQuestion == true) {
|
||||||
// CodanProblemReporter.deleteAllMarkers();
|
// CodanMarkerProblemReporter.deleteAllMarkers();
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
package org.eclipse.cdt.codan.internal.ui.preferences;
|
package org.eclipse.cdt.codan.internal.ui.preferences;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.CodanCorePlugin;
|
import org.eclipse.cdt.codan.core.CodanCorePlugin;
|
||||||
import org.eclipse.cdt.codan.core.model.CheckersRegisry;
|
import org.eclipse.cdt.codan.core.CodanRuntime;
|
||||||
|
import org.eclipse.cdt.codan.core.model.ICheckersRegistry;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblemProfile;
|
import org.eclipse.cdt.codan.core.model.IProblemProfile;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.runtime.preferences.InstanceScope;
|
import org.eclipse.core.runtime.preferences.InstanceScope;
|
||||||
|
@ -50,14 +51,21 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
|
||||||
* editor knows how to save and restore itself.
|
* editor knows how to save and restore itself.
|
||||||
*/
|
*/
|
||||||
public void createFieldEditors() {
|
public void createFieldEditors() {
|
||||||
profile = isPropertyPage() ? CheckersRegisry.getInstance()
|
profile = isPropertyPage() ? getRegistry()
|
||||||
.getResourceProfileWorkingCopy((IResource) getElement())
|
.getResourceProfileWorkingCopy((IResource) getElement())
|
||||||
: CheckersRegisry.getInstance().getWorkspaceProfile();
|
: getRegistry().getWorkspaceProfile();
|
||||||
CheckedTreeEditor checkedTreeEditor = new ProblemsTreeEditor(
|
CheckedTreeEditor checkedTreeEditor = new ProblemsTreeEditor(
|
||||||
getFieldEditorParent(), profile);
|
getFieldEditorParent(), profile);
|
||||||
addField(checkedTreeEditor);
|
addField(checkedTreeEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected ICheckersRegistry getRegistry() {
|
||||||
|
return CodanRuntime.getInstance().getChechersRegistry();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -66,8 +74,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
|
||||||
@Override
|
@Override
|
||||||
public boolean performOk() {
|
public boolean performOk() {
|
||||||
if (isPropertyPage())
|
if (isPropertyPage())
|
||||||
CheckersRegisry.getInstance().updateProfile(
|
getRegistry().updateProfile((IResource) getElement(), null);
|
||||||
(IResource) getElement(), null);
|
|
||||||
return super.performOk();
|
return super.performOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,8 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.internal.ui.preferences;
|
package org.eclipse.cdt.codan.internal.ui.preferences;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.CodanPreferencesLoader;
|
||||||
import org.eclipse.cdt.codan.core.PreferenceConstants;
|
import org.eclipse.cdt.codan.core.PreferenceConstants;
|
||||||
import org.eclipse.cdt.codan.core.builder.CodanPreferencesLoader;
|
|
||||||
import org.eclipse.cdt.codan.core.model.CodanProblem;
|
|
||||||
import org.eclipse.cdt.codan.core.model.CodanSeverity;
|
import org.eclipse.cdt.codan.core.model.CodanSeverity;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblem;
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblemCategory;
|
import org.eclipse.cdt.codan.core.model.IProblemCategory;
|
||||||
|
@ -139,8 +138,8 @@ public class ProblemsTreeEditor extends CheckedTreeEditor {
|
||||||
|
|
||||||
public void checkStateChanged(CheckStateChangedEvent event) {
|
public void checkStateChanged(CheckStateChangedEvent event) {
|
||||||
Object element = event.getElement();
|
Object element = event.getElement();
|
||||||
if (element instanceof CodanProblem) {
|
if (element instanceof IProblem) {
|
||||||
((CodanProblem) element).setEnabled(event.getChecked());
|
((IProblem) element).setEnabled(event.getChecked());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,7 +208,7 @@ public class ProblemsTreeEditor extends CheckedTreeEditor {
|
||||||
});
|
});
|
||||||
column2.setEditingSupport(new EditingSupport(getTreeViewer()) {
|
column2.setEditingSupport(new EditingSupport(getTreeViewer()) {
|
||||||
protected boolean canEdit(Object element) {
|
protected boolean canEdit(Object element) {
|
||||||
return element instanceof CodanProblem;
|
return element instanceof IProblem;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CellEditor getCellEditor(Object element) {
|
protected CellEditor getCellEditor(Object element) {
|
||||||
|
@ -218,13 +217,13 @@ public class ProblemsTreeEditor extends CheckedTreeEditor {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Object getValue(Object element) {
|
protected Object getValue(Object element) {
|
||||||
return ((CodanProblem) element).getSeverity().intValue();
|
return ((IProblem) element).getSeverity().intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setValue(Object element, Object value) {
|
protected void setValue(Object element, Object value) {
|
||||||
int index = ((Integer) value).intValue();
|
int index = ((Integer) value).intValue();
|
||||||
CodanSeverity val = CodanSeverity.values()[index];
|
CodanSeverity val = CodanSeverity.values()[index];
|
||||||
((CodanProblem) element).setSeverity(val);
|
((IProblem) element).setSeverity(val);
|
||||||
getTreeViewer().update(element, null);
|
getTreeViewer().update(element, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.ui;
|
package org.eclipse.cdt.codan.ui;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.builder.CodanBuilder;
|
import org.eclipse.cdt.codan.core.CodanRuntime;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.text.ICReconcilingListener;
|
import org.eclipse.cdt.internal.ui.text.ICReconcilingListener;
|
||||||
|
@ -64,7 +64,8 @@ public class CodanCReconciler implements ICReconcilingListener {
|
||||||
*/
|
*/
|
||||||
public void reconciled(IASTTranslationUnit ast, boolean force,
|
public void reconciled(IASTTranslationUnit ast, boolean force,
|
||||||
IProgressMonitor progressMonitor) {
|
IProgressMonitor progressMonitor) {
|
||||||
new CodanBuilder().reconcileAst(ast, progressMonitor);
|
CodanRuntime.getInstance().getAstQuickBuilder().reconcileAst(ast,
|
||||||
|
progressMonitor);
|
||||||
// System.err.println("ast reconsiled");
|
// System.err.println("ast reconsiled");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,9 +12,13 @@ package org.eclipse.cdt.codan.ui.actions;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.builder.CodanBuilder;
|
import org.eclipse.cdt.codan.core.CodanRuntime;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
import org.eclipse.jface.action.IAction;
|
import org.eclipse.jface.action.IAction;
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
@ -25,23 +29,38 @@ public class RunCodeAnalysis implements IObjectActionDelegate {
|
||||||
private ISelection sel;
|
private ISelection sel;
|
||||||
|
|
||||||
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
|
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
|
||||||
// TODO Auto-generated method stub
|
// nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run(IAction action) {
|
public void run(IAction action) {
|
||||||
for (Iterator iterator = ((IStructuredSelection) sel).iterator(); iterator
|
Job job = new Job("Running Code Analysis") {
|
||||||
.hasNext();) {
|
@SuppressWarnings("unchecked")
|
||||||
Object o = iterator.next();
|
@Override
|
||||||
if (o instanceof IResource) {
|
protected IStatus run(final IProgressMonitor monitor) {
|
||||||
IResource res = (IResource) o;
|
IStructuredSelection ss = (IStructuredSelection) sel;
|
||||||
try {
|
int count = ss.size();
|
||||||
res.accept(new CodanBuilder().new CodanResourceVisitor());
|
monitor.beginTask(getName(), count * 100);
|
||||||
} catch (CoreException e) {
|
if (monitor.isCanceled())
|
||||||
// TODO Auto-generated catch block
|
return Status.CANCEL_STATUS;
|
||||||
e.printStackTrace();
|
for (Iterator iterator = ss.iterator(); iterator.hasNext();) {
|
||||||
|
Object o = iterator.next();
|
||||||
|
if (o instanceof IResource) {
|
||||||
|
IResource res = (IResource) o;
|
||||||
|
SubProgressMonitor subMon = new SubProgressMonitor(
|
||||||
|
monitor, 100);
|
||||||
|
CodanRuntime.getInstance().getBuilder()
|
||||||
|
.processResource(res, subMon);
|
||||||
|
if (subMon.isCanceled())
|
||||||
|
return Status.CANCEL_STATUS;
|
||||||
|
}
|
||||||
|
if (monitor.isCanceled())
|
||||||
|
return Status.CANCEL_STATUS;
|
||||||
}
|
}
|
||||||
|
return Status.OK_STATUS;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
job.setUser(true);
|
||||||
|
job.schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectionChanged(IAction action, ISelection selection) {
|
public void selectionChanged(IAction action, ISelection selection) {
|
||||||
|
|
|
@ -12,7 +12,7 @@ package org.eclipse.cdt.codan.ui.actions;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.builder.CodeAnlysisNature;
|
import org.eclipse.cdt.codan.core.CodanCorePlugin;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IProjectDescription;
|
import org.eclipse.core.resources.IProjectDescription;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
@ -77,7 +77,7 @@ public class ToggleNatureAction implements IObjectActionDelegate {
|
||||||
description = project.getDescription();
|
description = project.getDescription();
|
||||||
String[] natures = description.getNatureIds();
|
String[] natures = description.getNatureIds();
|
||||||
for (int i = 0; i < natures.length; ++i) {
|
for (int i = 0; i < natures.length; ++i) {
|
||||||
if (CodeAnlysisNature.NATURE_ID.equals(natures[i])) {
|
if (CodanCorePlugin.NATURE_ID.equals(natures[i])) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ public class ToggleNatureAction implements IObjectActionDelegate {
|
||||||
IProjectDescription description = project.getDescription();
|
IProjectDescription description = project.getDescription();
|
||||||
String[] natures = description.getNatureIds();
|
String[] natures = description.getNatureIds();
|
||||||
for (int i = 0; i < natures.length; ++i) {
|
for (int i = 0; i < natures.length; ++i) {
|
||||||
if (CodeAnlysisNature.NATURE_ID.equals(natures[i])) {
|
if (CodanCorePlugin.NATURE_ID.equals(natures[i])) {
|
||||||
if (add == false) {
|
if (add == false) {
|
||||||
// Remove the nature
|
// Remove the nature
|
||||||
String[] newNatures = new String[natures.length - 1];
|
String[] newNatures = new String[natures.length - 1];
|
||||||
|
@ -120,7 +120,7 @@ public class ToggleNatureAction implements IObjectActionDelegate {
|
||||||
// Add the nature
|
// Add the nature
|
||||||
String[] newNatures = new String[natures.length + 1];
|
String[] newNatures = new String[natures.length + 1];
|
||||||
System.arraycopy(natures, 0, newNatures, 0, natures.length);
|
System.arraycopy(natures, 0, newNatures, 0, natures.length);
|
||||||
newNatures[natures.length] = CodeAnlysisNature.NATURE_ID;
|
newNatures[natures.length] = CodanCorePlugin.NATURE_ID;
|
||||||
description.setNatureIds(newNatures);
|
description.setNatureIds(newNatures);
|
||||||
project.setDescription(description, null);
|
project.setDescription(description, null);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue