/* * Copyright (c) 2015 the original author or authors. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Etienne Studer & Donát Csikós (Gradle Inc.) - initial API and implementation and initial documentation */ package org.eclipse.buildship.core.gradle; import java.util.List; import org.gradle.util.GradleVersion; import com.google.common.collect.ImmutableList; import com.gradleware.tooling.toolingmodel.util.Pair; /** * Provides the Buildship features that are missing for a given target Gradle version. */ public final class MissingFeatures { private final GradleVersion targetVersion; public MissingFeatures(GradleVersion targetVersion) { this.targetVersion = targetVersion; } public List<Pair<GradleVersion, String>> getMissingFeatures() { ImmutableList.Builder<Pair<GradleVersion, String>> missingFeatures = ImmutableList.builder(); addIfNeeded("2.1", "Cancellation support", missingFeatures); addIfNeeded("2.4", "Test progress visualization", missingFeatures); addIfNeeded("2.5", "Build/task progress visualization", missingFeatures); addIfNeeded("2.5", "Transitive dependency managament", missingFeatures); addIfNeeded("2.6", "Tests can be run from the Executions View", missingFeatures); addIfNeeded("2.6", "Failed tests can be re-run from the Executions View", missingFeatures); addIfNeeded("2.7", "Test classes and methods can be run from the Editor", missingFeatures); addIfNeeded("2.9", "Custom project natures and build commands are added", missingFeatures); addIfNeeded("2.10", "Language source level is set on Java projects", missingFeatures); addIfNeeded("2.11", "Target bytecode version is set on Java projects", missingFeatures); addIfNeeded("2.11", "Java runtime is set on Java projects", missingFeatures); addIfNeeded("2.13", "Improved performance when loading models", missingFeatures); addIfNeeded("2.14", "Attributes defined for Java classpath entries", missingFeatures); addIfNeeded("2.14", "WTP deployment attributes defined for web projects", missingFeatures); addIfNeeded("3.0", "Output location, classpath containers, source folder excludes-includes and JRE name are set on Java projects", missingFeatures); addIfNeeded("3.0", "Java classpath customization done in 'eclipse.classpath.file.whenMerged' is synchronized", missingFeatures); return missingFeatures.build(); } private void addIfNeeded(String version, String missingFeature, ImmutableList.Builder<Pair<GradleVersion, String>> missingFeatures) { GradleVersion gradleVersion = GradleVersion.version(version); if (this.targetVersion.getBaseVersion().compareTo(gradleVersion) < 0) { missingFeatures.add(createLimitation(gradleVersion, missingFeature)); } } private Pair<GradleVersion, String> createLimitation(GradleVersion version, String missingFeature) { return new Pair<GradleVersion, String>(version, missingFeature + " since " + version + "."); } }