use of org.eclipse.n4js.packagejson.PackageJsonProperties.N4JS in project n4js by eclipse.
the class PackageJsonValidatorExtension method isExistingModule.
/**
* Tells if for the given moduleSpecifier of the form "a/b/c/M" (without project ID) a module exists in the N4JS
* project with the given module specifier.
*
* Checks if a corresponding .js, .jsx, .n4js, .n4jsx, or .n4jsd file exists in any of the project's source
* containers.
*/
private boolean isExistingModule(JSONStringLiteral moduleSpecifierLiteral) {
final URI uri = moduleSpecifierLiteral.eResource().getURI();
final String moduleSpecifier = moduleSpecifierLiteral.getValue();
final String relativeModulePath = moduleSpecifier.replace('/', File.separator.charAt(0));
final Path absoluteProjectPath = getAbsoluteProjectPath(moduleSpecifierLiteral, uri);
// obtain a stream of File representations of all declared source containers
final Stream<File> sourceFolders = getAllSourceContainerPaths().stream().map(sourcePath -> new File(absoluteProjectPath.toFile(), sourcePath));
// using any of the aforementioned file extensions
return sourceFolders.filter(sourceFolder -> // check each file extension
N4JSGlobals.ALL_N4_FILE_EXTENSIONS.stream().filter(ext -> new File(sourceFolder, relativeModulePath + "." + ext).exists()).findAny().isPresent()).findAny().isPresent();
}
use of org.eclipse.n4js.packagejson.PackageJsonProperties.N4JS in project n4js by eclipse.
the class PackageJsonValidatorExtension method checkSourceContainers.
/**
* Validates the source container section of N4JS package.json files
*/
@CheckProperty(property = SOURCES)
public void checkSourceContainers() {
// obtain source-container-related content of the section and validate its structure
Multimap<SourceContainerType, List<JSONStringLiteral>> sourceContainers = getSourceContainers();
final List<JSONStringLiteral> allDeclaredSourceContainers = sourceContainers.entries().stream().flatMap(entry -> entry.getValue().stream()).collect(Collectors.toList());
// check each source container sub-section (e.g. sources, external, etc.)
final List<JSONStringLiteral> validSourceContainerLiterals = allDeclaredSourceContainers.stream().filter(l -> internalCheckSourceContainerLiteral(l)).collect(Collectors.toList());
// find all groups of duplicate paths
final List<List<JSONStringLiteral>> containerDuplicates = findPathDuplicates(allDeclaredSourceContainers);
for (List<JSONStringLiteral> duplicateGroup : containerDuplicates) {
// indicates whether the duplicates are spread across multiple container types (e.g. external, sources)
final String normalizedPath = FileUtils.normalize(duplicateGroup.get(0).getValue());
for (JSONStringLiteral duplicate : duplicateGroup) {
final String inClause = createInSourceContainerTypeClause(duplicate, duplicateGroup);
addIssue(IssueCodes.getMessageForPKGJ_DUPLICATE_SOURCE_CONTAINER(normalizedPath, inClause), duplicate, IssueCodes.PKGJ_DUPLICATE_SOURCE_CONTAINER);
}
}
// check for nested source containers (within valid source container literals)
internalCheckNoNestedSourceContainers(validSourceContainerLiterals);
}
Aggregations