Skip to content
Snippets Groups Projects

Project parsing 1: added outdated file collector

Merged Miklos Magyari requested to merge ofc into main
1 file
+ 141
0
Compare changes
  • Side-by-side
  • Inline
/******************************************************************************
* Copyright (c) 2000-2023 Ericsson Telecom AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
******************************************************************************/
package org.eclipse.titan.lsp.parsers;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.titan.lsp.core.Project;
import org.eclipse.titan.lsp.core.ProjectItem;
/**
* This class is a resource visitor collecting every file in the project which
* is not:
*
* <ul>
* <li>under the working directory.
* <li>excluded from build.
* <li>uptodate.
* </ul>
* Should be started only on a project.
*
* @see #analyzeAll(IFile, TTCN3Editor, IProgressMonitor)
*
* @author Kristof Szabados
* @author Miklos Magyari
*/
public class OutdatedFileCollector implements FileVisitor<Path> {
public static final String TRUE = "true";
private static final String DOT = ".";
private final Project project;
private final Map<Path, String> uptodateFiles;
private final Set<Path> highlySyntaxErroneousFiles;
private final List<Path> asn1FilesToCheck;
private final List<Path> cfgFilesToCheck;
private final List<Path> ttcn3FilesToCheck;
private final List<Path> ttcninFilesModified;
private final Path[] workingDirectories;
public OutdatedFileCollector(final Path[] workingDirectories, final Map<Path, String> uptodateFiles,
final Set<Path> highlySyntaxErroneousFiles) {
this.uptodateFiles = uptodateFiles;
this.highlySyntaxErroneousFiles = highlySyntaxErroneousFiles;
this.asn1FilesToCheck = new ArrayList<>();
this.cfgFilesToCheck = new ArrayList<>();
this.ttcn3FilesToCheck = new ArrayList<>();
this.ttcninFilesModified = new ArrayList<>();
this.workingDirectories = workingDirectories;
project = Project.INSTANCE;
}
public List<Path> getASN1FilesToCheck() {
return asn1FilesToCheck;
}
public List<Path> getCFGFilesToCheck() {
return cfgFilesToCheck;
}
public List<Path> getTTCN3FilesToCheck() {
return ttcn3FilesToCheck;
}
public List<Path> getTtcninFilesModified() {
return ttcninFilesModified;
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
for (final Path workingDirectory : workingDirectories) {
if (workingDirectory.equals(dir)) {
return FileVisitResult.TERMINATE;
}
}
final ProjectItem item = project.getProjectItem(dir);
if (item.isExcluded()) {
return FileVisitResult.TERMINATE;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
final Path filepath = file.getFileName();
if (filepath == null) {
return FileVisitResult.CONTINUE;
}
final String filename = filepath.toString();
if (filename.startsWith(DOT)) {
return FileVisitResult.CONTINUE;
}
final ProjectItem item = project.getProjectItem(file);
if (item.isExcluded()) {
return FileVisitResult.TERMINATE;
}
String extension = "";
final String fullpath = file.toString();
if (fullpath.contains(".")) {
extension = fullpath.substring(fullpath.lastIndexOf(".") + 1);
}
if (!uptodateFiles.containsKey(file) && !highlySyntaxErroneousFiles.contains(file)) {
if (GlobalParser.isSupportedTTCN3Extension(extension)) {
ttcn3FilesToCheck.add(file);
} else if (GlobalParser.SUPPORTED_CONFIG_FILE_EXTENSIONS[0].equals(extension)) {
cfgFilesToCheck.add(file);
} else if (GlobalParser.SUPPORTED_ASN1_EXTENSIONS[0].equals(extension) || GlobalParser.SUPPORTED_ASN1_EXTENSIONS[1].equals(extension)) {
asn1FilesToCheck.add(file);
} else if (GlobalParser.TTCNIN_EXTENSION.equals(extension)) {
ttcninFilesModified.add(file);
}
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
}
Loading