Skip to content

Commit

Permalink
review fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
glefloch committed Jul 6, 2020
1 parent 8a80673 commit b4139b6
Show file tree
Hide file tree
Showing 13 changed files with 121 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ public void relink(AppArtifact appArtifact, Path localPath) throws AppModelResol
public Path resolve(AppArtifact appArtifact) throws AppModelResolverException {
if (!appArtifact.isResolved()) {
for (io.quarkus.gradle.workspace.model.Dependency dependency : model.getAppDependencies()) {
// TODO there used to be a check on appArtifact.getType()
if (appArtifact.getArtifactId().equals(dependency.getName()) &&
appArtifact.getGroupId().equals(dependency.getGroupId())) {
appArtifact.getGroupId().equals(dependency.getGroupId()) &&
appArtifact.getType().equals(dependency.getType())) {
appArtifact.setPaths(QuarkusGradleUtils.toPathsCollection(dependency.getPaths()));
break;
}
Expand Down Expand Up @@ -134,7 +134,6 @@ public AppModel resolveModel(AppArtifact appArtifact) {
sourceSet.getSourceDirectories().stream().filter(File::exists).map(File::toPath).forEach(paths::add);
sourceSet.getResourcesDirectories().stream().filter(File::exists).map(File::toPath).forEach(paths::add);
}
paths.build().forEach(System.out::println);
appArtifact.setPaths(paths.build());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,17 @@
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.testing.Test;
import org.gradle.jvm.tasks.Jar;
import org.gradle.tooling.BuildAction;
import org.gradle.tooling.BuildController;
import org.gradle.tooling.GradleConnector;
import org.gradle.tooling.ModelBuilder;
import org.gradle.tooling.ProjectConnection;

import io.quarkus.bootstrap.BootstrapConstants;
import io.quarkus.bootstrap.model.AppArtifact;
import io.quarkus.bootstrap.model.AppModel;
import io.quarkus.bootstrap.resolver.AppModelResolver;
import io.quarkus.gradle.tasks.QuarkusGradleUtils;
import io.quarkus.gradle.workspace.model.ModelParameter;
import io.quarkus.gradle.workspace.model.QuarkusModel;
import io.quarkus.runtime.LaunchMode;

Expand Down Expand Up @@ -175,13 +177,11 @@ public QuarkusModel getQuarkusModel() {
}

public QuarkusModel getQuarkusModel(LaunchMode mode) {
project.getExtensions().getExtraProperties().set("launchMode", mode);
ProjectConnection connection = GradleConnector.newConnector()
try (ProjectConnection connection = GradleConnector.newConnector()
.forProjectDirectory(project.getProjectDir())
.connect();
ModelBuilder<QuarkusModel> modelBuilder = connection.model(QuarkusModel.class);

return modelBuilder.get();
.connect()) {
return connection.action(new QuarkusModelBuildAction(mode)).run();
}
}

/**
Expand All @@ -197,4 +197,18 @@ private File getLastFile(FileCollection fileCollection) {
}
return result;
}

private static class QuarkusModelBuildAction implements BuildAction<QuarkusModel> {

private final LaunchMode mode;

public QuarkusModelBuildAction(LaunchMode mode) {
this.mode = mode;
}

@Override
public QuarkusModel execute(BuildController controller) {
return controller.getModel(QuarkusModel.class, ModelParameter.class, p -> p.setMode(mode));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,7 @@
import io.quarkus.bootstrap.resolver.AppModelResolverException;
import io.quarkus.deployment.dev.DevModeContext;
import io.quarkus.deployment.dev.DevModeMain;
import io.quarkus.gradle.AppModelGradleResolver;
import io.quarkus.gradle.QuarkusPluginExtension;
import io.quarkus.gradle.workspace.model.QuarkusModel;
import io.quarkus.runtime.LaunchMode;
import io.quarkus.utilities.JavaBinFinder;

Expand Down Expand Up @@ -284,8 +282,7 @@ public void startDev() {
StringBuilder classPathManifest = new StringBuilder();

final AppModel appModel;
final QuarkusModel quarkusModel = extension().getQuarkusModel(LaunchMode.DEVELOPMENT);
final AppModelResolver modelResolver = new AppModelGradleResolver(quarkusModel);
final AppModelResolver modelResolver = extension().getAppModelResolver(LaunchMode.DEVELOPMENT);
try {
final AppArtifact appArtifact = extension.getAppArtifact();
appArtifact.setPaths(QuarkusGradleUtils.getOutputPaths(project));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;

import org.gradle.api.GradleException;
import org.gradle.api.Project;
Expand All @@ -31,18 +30,20 @@
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.SourceSet;
import org.gradle.tooling.provider.model.ToolingModelBuilder;
import org.gradle.tooling.provider.model.ParameterizedToolingModelBuilder;

import io.quarkus.bootstrap.BootstrapConstants;
import io.quarkus.gradle.tasks.QuarkusGradleUtils;
import io.quarkus.gradle.workspace.model.Dependency;
import io.quarkus.gradle.workspace.model.ModelParameter;
import io.quarkus.gradle.workspace.model.QuarkusModel;
import io.quarkus.gradle.workspace.model.impl.DependencyImpl;
import io.quarkus.gradle.workspace.model.impl.ModelParameterImpl;
import io.quarkus.gradle.workspace.model.impl.QuarkusModelImpl;
import io.quarkus.gradle.workspace.model.impl.SourceSetImpl;
import io.quarkus.runtime.LaunchMode;

public class QuarkusModelBuilder implements ToolingModelBuilder {
public class QuarkusModelBuilder implements ParameterizedToolingModelBuilder {

private static final List<String> scannedConfigurations = new LinkedList();

Expand All @@ -51,17 +52,30 @@ public boolean canBuild(String modelName) {
return modelName.equals(QuarkusModel.class.getName());
}

@Override
public Class getParameterType() {
return ModelParameter.class;
}

@Override
public Object buildAll(String modelName, Project project) {
LaunchMode mode;
if (project.getExtensions().getExtraProperties().has("launchMode")) {
mode = LaunchMode.valueOf(project.getExtensions().getExtraProperties().get("launchMode").toString());
} else {
mode = LaunchMode.NORMAL;
}
final ModelParameterImpl modelParameter = new ModelParameterImpl();
modelParameter.setMode(LaunchMode.NORMAL);
return buildAll(modelName, modelParameter, project);
}

@Override
public Object buildAll(String modelName, Object parameter, Project project) {
LaunchMode mode = ((ModelParameter) parameter).getMode();
Collection<io.quarkus.gradle.workspace.model.SourceSet> sourceSets = new ArrayList<>();

final SourceSet mainSourceSet = QuarkusGradleUtils.getSourceSet(project, SourceSet.MAIN_SOURCE_SET_NAME);
sourceSets.add(convert(mainSourceSet));

if (LaunchMode.TEST.equals(mode)) {
scannedConfigurations.add(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME);
final SourceSet testSourceSet = QuarkusGradleUtils.getSourceSet(project, SourceSet.TEST_SOURCE_SET_NAME);
sourceSets.add(convert(testSourceSet));
} else {
scannedConfigurations.add(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME);
}
Expand All @@ -70,28 +84,24 @@ public Object buildAll(String modelName, Project project) {
scannedConfigurations.add(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME);
}

final SourceSet mainSourceSet = QuarkusGradleUtils.getSourceSet(project, SourceSet.MAIN_SOURCE_SET_NAME);
final SourceSet testSourceSet = QuarkusGradleUtils.getSourceSet(project, SourceSet.TEST_SOURCE_SET_NAME);

final Collection<org.gradle.api.artifacts.Dependency> platformExtension = getPlatformExtension(project);
final Collection<org.gradle.api.artifacts.Dependency> directExtensionDependencies = getDirectExtension(project);

final Collection<Dependency> appDependencies = new LinkedList<>();
for (String configurationName : scannedConfigurations) {
final ResolvedConfiguration configuration = project.getConfigurations().getByName(configurationName)
.getResolvedConfiguration();
appDependencies.addAll(collectDependencies(configuration, configurationName, mode, project));
platformExtension.addAll(getExtensions(configuration.getFirstLevelModuleDependencies(), appDependencies));
directExtensionDependencies
.addAll(getDirectExtensions(configuration.getFirstLevelModuleDependencies(), appDependencies));
}

final Collection<Dependency> platformDependencies = collectExtensionDependencies(project, platformExtension);
final Collection<Dependency> extensionDependencies = collectExtensionDependencies(project, directExtensionDependencies);

return new QuarkusModelImpl(Arrays.asList(convert(mainSourceSet), convert(testSourceSet)), appDependencies,
platformExtension.stream().map(ext -> ext.getGroup() + ":" + ext.getName() + ":" + ext.getVersion())
.collect(Collectors.toList()),
platformDependencies);
return new QuarkusModelImpl(sourceSets, appDependencies,
extensionDependencies);
}

private Collection<org.gradle.api.artifacts.Dependency> getPlatformExtension(Project project) {
private Collection<org.gradle.api.artifacts.Dependency> getDirectExtension(Project project) {
final List<org.gradle.api.artifacts.Dependency> directExtension = new ArrayList<>();
// collect enforced platforms
final Configuration impl = project.getConfigurations()
Expand All @@ -109,7 +119,7 @@ private Collection<org.gradle.api.artifacts.Dependency> getPlatformExtension(Pro
return directExtension;
}

private Collection<org.gradle.api.artifacts.Dependency> getExtensions(Set<ResolvedDependency> dependencies,
private Collection<org.gradle.api.artifacts.Dependency> getDirectExtensions(Set<ResolvedDependency> dependencies,
Collection<Dependency> appDependencies) {
Collection<org.gradle.api.artifacts.Dependency> extensions = new LinkedList<>();
for (ResolvedDependency d : dependencies) {
Expand Down Expand Up @@ -184,7 +194,6 @@ private Collection<Dependency> collectDependencies(ResolvedConfiguration configu
Project projectDep = project.getRootProject()
.findProject(((ProjectComponentIdentifier) a.getId().getComponentIdentifier()).getProjectPath());
modelDependencies.add(toDependency(a, configurationName, projectDep));

} else {
modelDependencies.add(toDependency(a, configurationName));
}
Expand All @@ -195,8 +204,8 @@ private Collection<Dependency> collectDependencies(ResolvedConfiguration configu

private SourceSetImpl convert(SourceSet sourceSet) {
return new SourceSetImpl(
sourceSet.getAllJava().getSrcDirs(),
sourceSet.getResources().getSrcDirs());
sourceSet.getOutput().getClassesDirs().getFiles(),
Collections.singletonList(sourceSet.getOutput().getResourcesDir()));
}

private static boolean isDependency(ResolvedArtifact a) {
Expand All @@ -207,7 +216,7 @@ private static boolean isDependency(ResolvedArtifact a) {
private DependencyImpl toDependency(ResolvedArtifact a, String configuration, Project project) {
final String[] split = a.getModuleVersion().toString().split(":");
final DependencyImpl dependency = new DependencyImpl(split[1], split[0], split.length > 2 ? split[2] : null,
configuration, getModuleId(a));
configuration, a.getType(), getModuleId(a));
final JavaPluginConvention javaConvention = project.getConvention().findPlugin(JavaPluginConvention.class);
if (javaConvention != null) {
SourceSet mainSourceSet = javaConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
Expand All @@ -231,9 +240,11 @@ private static ModuleIdentifier getModuleId(ResolvedArtifact a) {

static DependencyImpl toDependency(ResolvedArtifact a, String configuration) {
final String[] split = a.getModuleVersion().toString().split(":");

final DependencyImpl dependency = new DependencyImpl(split[1], split[0], split.length > 2 ? split[2] : null,
configuration, getModuleId(a));
configuration, a.getType(), getModuleId(a));
dependency.addPath(a.getFile());
return dependency;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public interface Dependency {

Collection<File> getPaths();

String getType();

String getScope();

ModuleIdentifier getModuleId();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.quarkus.gradle.workspace.model;

import io.quarkus.runtime.LaunchMode;

public interface ModelParameter {

LaunchMode getMode();

void setMode(LaunchMode mode);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ public interface QuarkusModel {

Collection<Dependency> getAppDependencies();

Collection<String> getExtensions();

Collection<Dependency> getExtensionDependencies();

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,21 @@ public class DependencyImpl implements Dependency, Serializable {
private final String version;
private final Collection<File> paths = new LinkedList<>();
private final String scope;
private final String type;
private final ModuleIdentifier moduleId;

public DependencyImpl(String name, String groupId, String version, File path, String scope, ModuleIdentifier moduleId) {
this.name = name;
this.groupId = groupId;
this.version = version;
public DependencyImpl(String name, String groupId, String version, File path, String scope, String type,
ModuleIdentifier moduleId) {
this(name, groupId, version, scope, type, moduleId);
this.paths.add(path);
this.scope = scope;
this.moduleId = moduleId;
}

public DependencyImpl(String name, String groupId, String version, String scope, ModuleIdentifier moduleId) {
public DependencyImpl(String name, String groupId, String version, String scope, String type, ModuleIdentifier moduleId) {
this.name = name;
this.groupId = groupId;
this.version = version;
this.scope = scope;
this.type = type;
this.moduleId = moduleId;
}

Expand All @@ -50,6 +49,11 @@ public String getVersion() {
return version;
}

@Override
public String getType() {
return type;
}

@Override
public Collection<File> getPaths() {
return paths;
Expand All @@ -75,6 +79,7 @@ public String toString() {
"name='" + name + '\'' +
", groupId='" + groupId + '\'' +
", version='" + version + '\'' +
", type='" + type + '\'' +
", path=" + paths +
", scope='" + scope + '\'' +
", moduleId='" + moduleId + '\'' +
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.quarkus.gradle.workspace.model.impl;

import java.io.Serializable;

import io.quarkus.gradle.workspace.model.ModelParameter;
import io.quarkus.runtime.LaunchMode;

public class ModelParameterImpl implements ModelParameter, Serializable {

private LaunchMode mode;

@Override
public LaunchMode getMode() {
return mode;
}

@Override
public void setMode(LaunchMode mode) {
this.mode = mode;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,13 @@ public class QuarkusModelImpl implements QuarkusModel, Serializable {

private final Collection<SourceSet> sourceSets;
private final Collection<Dependency> appDependencies;
private final Collection<Dependency> platformDependencies;
private final Collection<String> extensions;
private final Collection<Dependency> extensionDependencies;

public QuarkusModelImpl(Collection<SourceSet> sourceSets, Collection<Dependency> appDependencies,
Collection<String> extensions,
Collection<Dependency> platformDependencies) {
Collection<Dependency> extensionDependencies) {
this.sourceSets = sourceSets;
this.appDependencies = appDependencies;
this.extensions = extensions;
this.platformDependencies = platformDependencies;
this.extensionDependencies = extensionDependencies;
}

@Override
Expand All @@ -33,13 +30,8 @@ public Collection<Dependency> getAppDependencies() {
return appDependencies;
}

@Override
public Collection<String> getExtensions() {
return extensions;
}

@Override
public Collection<Dependency> getExtensionDependencies() {
return platformDependencies;
return extensionDependencies;
}
}
Loading

0 comments on commit b4139b6

Please sign in to comment.