use of org.eclipse.titan.common.parsers.cfg.CfgParseResult.Macro in project titan.EclipsePlug-ins by eclipse.
the class ProjectConfigurationParser method checkMacroErrors.
/**
* Checks if all the collected macros are valid,
* puts error markers if needed
* @param aMacros collected macro references
* @param aDefines definitions from the [DEFINE] sections
* @param aEnv environment variables
*/
public void checkMacroErrors(final List<Macro> aMacros, final Map<String, CfgDefinitionInformation> aDefines, final Map<String, String> aEnv) {
for (final Macro macro : aMacros) {
final String value = getDefinitionValue(macro.getMacroName(), aDefines, aEnv);
if (value == null) {
final IFile file = macro.getFile();
if (file != null && file.isAccessible()) {
final TITANMarker marker = macro.getErrorMarker();
final Location location = new Location(file, marker.getLine(), marker.getOffset(), marker.getEndOffset());
location.reportExternalProblem(marker.getMessage(), marker.getSeverity(), GeneralConstants.ONTHEFLY_SYNTACTIC_MARKER);
}
}
}
}
use of org.eclipse.titan.common.parsers.cfg.CfgParseResult.Macro in project titan.EclipsePlug-ins by eclipse.
the class ProjectConfigurationParser method internalDoAnalyzeSyntactically.
private IStatus internalDoAnalyzeSyntactically(final IProgressMonitor monitor) {
removedReferencestoRemovedFiles();
final IContainer[] workingDirectories = ProjectBasedBuilder.getProjectBasedBuilder(project).getWorkingDirectoryResources(false);
OutdatedFileCollector visitor = new OutdatedFileCollector(workingDirectories, uptodateFiles, highlySyntaxErroneousFiles);
try {
project.accept(visitor);
} catch (CoreException e) {
ErrorReporter.logExceptionStackTrace(e);
}
List<IFile> filesToCheck = visitor.getCFGFilesToCheck();
for (IFile file : uptodateFiles.keySet()) {
MarkerHandler.markAllMarkersForRemoval(file, GeneralConstants.ONTHEFLY_SEMANTIC_MARKER);
MarkerHandler.markAllMarkersForRemoval(file, GeneralConstants.ONTHEFLY_MIXED_MARKER);
}
// It's not that expensive. :)
for (final IFile file : filesToCheck) {
removeMarkersAndDefinitions(file);
}
// parsing the files
monitor.beginTask(PARSING, IProgressMonitor.UNKNOWN);
final List<Macro> macros = new ArrayList<Macro>();
final Map<String, String> env = System.getenv();
final List<IFile> filesChecked = new ArrayList<IFile>();
while (!filesToCheck.isEmpty()) {
final IFile file = filesToCheck.get(0);
if (!filesChecked.contains(file)) {
// and the file is not yet up-to-date
if (monitor.isCanceled()) {
// just don't do anything
} else if (!file.isAccessible()) {
TITANDebugConsole.println("The file " + file.getLocationURI() + " does not seem to exist.");
} else if (!uptodateFiles.containsKey(file)) {
monitor.subTask(file.getProjectRelativePath().toOSString());
// parse the contents of the file
fileBasedAnalysis(file, macros, filesToCheck, filesChecked);
}
monitor.worked(1);
filesChecked.add(file);
}
filesToCheck.remove(0);
}
filesToCheck.clear();
// Check if macro references are valid.
// This can be done only after all of the files are parsed
checkMacroErrors(macros, definitions, env);
// Semantic checking will start here
monitor.done();
for (IFile file : uptodateFiles.keySet()) {
MarkerHandler.removeAllOnTheFlyMarkedMarkers(file);
}
for (IFile file : filesToCheck) {
if (!uptodateFiles.containsKey(file)) {
MarkerHandler.removeAllOnTheFlyMarkedMarkers(file);
}
}
return Status.OK_STATUS;
}
Aggregations