Search in sources :

Example 1 with Macro

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);
            }
        }
    }
}
Also used : TITANMarker(org.eclipse.titan.common.parsers.TITANMarker) IFile(org.eclipse.core.resources.IFile) Macro(org.eclipse.titan.common.parsers.cfg.CfgParseResult.Macro) CfgLocation(org.eclipse.titan.common.parsers.cfg.CfgLocation) Location(org.eclipse.titan.designer.AST.Location)

Example 2 with Macro

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;
}
Also used : IFile(org.eclipse.core.resources.IFile) CoreException(org.eclipse.core.runtime.CoreException) Macro(org.eclipse.titan.common.parsers.cfg.CfgParseResult.Macro) ArrayList(java.util.ArrayList) IContainer(org.eclipse.core.resources.IContainer)

Aggregations

IFile (org.eclipse.core.resources.IFile)2 Macro (org.eclipse.titan.common.parsers.cfg.CfgParseResult.Macro)2 ArrayList (java.util.ArrayList)1 IContainer (org.eclipse.core.resources.IContainer)1 CoreException (org.eclipse.core.runtime.CoreException)1 TITANMarker (org.eclipse.titan.common.parsers.TITANMarker)1 CfgLocation (org.eclipse.titan.common.parsers.cfg.CfgLocation)1 Location (org.eclipse.titan.designer.AST.Location)1