use of io.quarkus.devtools.project.state.ExtensionProvider in project quarkus by quarkusio.
the class InfoCommandHandler method logState.
// TODO: instead of returning a boolean, the info about available
// recommendations should be reflected in ProjectState
protected static boolean logState(ProjectState projectState, boolean perModule, boolean rectify, MessageWriter log) {
boolean recommendationsAvailable = false;
final Map<ArtifactKey, PlatformInfo> providerInfo = new LinkedHashMap<>();
for (ArtifactCoords bom : projectState.getPlatformBoms()) {
providerInfo.computeIfAbsent(bom.getKey(), k -> new PlatformInfo()).imported = bom;
}
for (TopExtensionDependency dep : projectState.getExtensions()) {
final ExtensionOrigin origin = dep.getOrigin();
if (origin != null && origin.isPlatform()) {
providerInfo.computeIfAbsent(origin.getBom().getKey(), k -> new PlatformInfo()).recommended = origin.getBom();
}
}
if (providerInfo.isEmpty()) {
log.info("No Quarkus platform BOMs found");
} else {
log.info("Quarkus platform BOMs:");
boolean recommendExtraImports = false;
for (PlatformInfo platform : providerInfo.values()) {
if (platform.imported == null) {
recommendExtraImports = true;
continue;
}
final StringBuilder sb = new StringBuilder();
if (platform.recommended == null) {
if (rectify) {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, UpdateCommandHandler.REMOVE, platform.imported.toCompactCoords()));
recommendationsAvailable = true;
} else {
sb.append(" ");
sb.append(platform.imported.toCompactCoords());
if (!projectState.getExtensions().isEmpty()) {
// The extension check is for modules that are aggregating modules (e.g. parent POMs)
// that import common BOMs. It's however not how it should be done.
sb.append(" | unnecessary");
recommendationsAvailable = true;
}
}
} else if (platform.isVersionUpdateRecommended()) {
if (rectify) {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, UpdateCommandHandler.UPDATE, platform.imported.toCompactCoords()));
sb.append(platform.imported.toCompactCoords()).append(" -> ").append(platform.getRecommendedVersion());
} else {
sb.append(" ");
sb.append(platform.imported.toCompactCoords()).append(" | misaligned");
}
recommendationsAvailable = true;
} else {
if (rectify) {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, "", platform.imported.toCompactCoords()));
} else {
sb.append(" ").append(platform.imported.toCompactCoords());
}
}
log.info(sb.toString());
}
if (rectify && recommendExtraImports) {
for (PlatformInfo platform : providerInfo.values()) {
if (platform.imported == null) {
log.info(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, UpdateCommandHandler.ADD, platform.recommended.toCompactCoords()));
}
}
recommendationsAvailable = true;
}
}
if (projectState.getExtensions().isEmpty()) {
log.info("");
log.info("No Quarkus extensions found among the project dependencies");
return recommendationsAvailable;
}
log.info("");
if (perModule) {
final ModuleState mainModule = projectState.getMainModule();
final Path baseDir = mainModule.getModuleDir();
recommendationsAvailable |= logModuleInfo(projectState, mainModule, baseDir, log, rectify);
for (ModuleState module : projectState.getModules()) {
if (!module.isMain()) {
recommendationsAvailable |= logModuleInfo(projectState, module, baseDir, log, rectify);
}
}
} else {
for (ExtensionProvider provider : projectState.getExtensionProviders()) {
if (provider.isPlatform()) {
recommendationsAvailable = logProvidedExtensions(provider, rectify, log, recommendationsAvailable);
}
}
for (ExtensionProvider provider : projectState.getExtensionProviders()) {
if (!provider.isPlatform()) {
recommendationsAvailable = logProvidedExtensions(provider, rectify, log, recommendationsAvailable);
}
}
}
return recommendationsAvailable;
}
use of io.quarkus.devtools.project.state.ExtensionProvider in project quarkus by quarkusio.
the class InfoCommandHandler method logModuleInfo.
private static boolean logModuleInfo(ProjectState project, ModuleState module, Path baseDir, MessageWriter log, boolean rectify) {
if (module.getExtensions().isEmpty() && module.getPlatformBoms().isEmpty() && !module.isMain()) {
return false;
}
boolean recommendationsAvailable = false;
final StringBuilder sb = new StringBuilder();
if (module.isMain()) {
sb.append("Main application module ");
} else {
sb.append("Module ");
}
sb.append(module.getId().getGroupId()).append(':').append(module.getId().getArtifactId()).append(':');
log.info(sb.toString());
final Iterator<Path> i = module.getWorkspaceModule().getBuildFiles().iterator();
if (i.hasNext()) {
sb.setLength(0);
sb.append(" Build file: ");
sb.append(baseDir.relativize(i.next()));
while (i.hasNext()) {
sb.append(", ").append(baseDir.relativize(i.next()));
}
log.info(sb.toString());
}
if (!module.getPlatformBoms().isEmpty()) {
log.info(" Platform BOMs:");
for (ArtifactCoords bom : module.getPlatformBoms()) {
log.info(" " + bom.toCompactCoords());
}
}
if (!module.getExtensions().isEmpty()) {
final Map<String, List<TopExtensionDependency>> extDepsByProvider = new LinkedHashMap<>();
for (TopExtensionDependency dep : module.getExtensions()) {
extDepsByProvider.computeIfAbsent(dep.getProviderKey(), k -> new ArrayList<>()).add(dep);
}
for (ExtensionProvider provider : project.getExtensionProviders()) {
if (!provider.isPlatform()) {
continue;
}
final List<TopExtensionDependency> extList = extDepsByProvider.getOrDefault(provider.getKey(), Collections.emptyList());
if (!extList.isEmpty()) {
log.info(" Extensions from " + provider.getKey() + ":");
for (TopExtensionDependency dep : extList) {
sb.setLength(0);
sb.append(" ");
recommendationsAvailable = logExtensionInfo(dep, rectify, sb, recommendationsAvailable);
log.info(sb.toString());
}
log.info("");
}
}
for (ExtensionProvider provider : project.getExtensionProviders()) {
if (provider.isPlatform()) {
continue;
}
final List<TopExtensionDependency> extList = extDepsByProvider.getOrDefault(provider.getKey(), Collections.emptyList());
if (!extList.isEmpty()) {
log.info(" Extensions from " + provider.getKey() + ":");
for (TopExtensionDependency dep : extList) {
sb.setLength(0);
sb.append(" ");
recommendationsAvailable = logExtensionInfo(dep, rectify, sb, recommendationsAvailable);
log.info(sb.toString());
}
log.info("");
}
}
}
return recommendationsAvailable;
}
Aggregations