All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.xtext.gradle.idea.tasks.IdeaExtension Maven / Gradle / Ivy

There is a newer version: 2.0.9-alpha.3
Show newest version
package org.xtext.gradle.idea.tasks;

import com.google.common.collect.Iterables;
import groovy.lang.Closure;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.xtend.lib.annotations.Accessors;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.Functions.Function2;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.Pure;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.ConfigurableFileTree;
import org.gradle.api.file.FileCollection;
import org.gradle.api.internal.file.collections.LazilyInitializedFileCollection;
import org.gradle.api.tasks.TaskDependency;
import org.gradle.api.tasks.util.PatternFilterable;
import org.xtext.gradle.idea.tasks.DownloadIdea;
import org.xtext.gradle.idea.tasks.DownloadPlugins;
import org.xtext.gradle.idea.tasks.ExternalIdeaPluginDependency;
import org.xtext.gradle.idea.tasks.GradleExtensions;
import org.xtext.gradle.idea.tasks.IdeaPluginDependencies;
import org.xtext.gradle.idea.tasks.IdeaPluginRepositories;

@Accessors
@SuppressWarnings("all")
public class IdeaExtension {
  private final Project project;
  
  private final IdeaPluginRepositories pluginRepositories;
  
  private final IdeaPluginDependencies pluginDependencies;
  
  private Object ideaHome;
  
  private String ideaVersion;
  
  private DownloadIdea downloadIdea;
  
  private DownloadPlugins downloadPlugins;
  
  public IdeaExtension(final Project project) {
    this.project = project;
    IdeaPluginRepositories _ideaPluginRepositories = new IdeaPluginRepositories();
    this.pluginRepositories = _ideaPluginRepositories;
    IdeaPluginDependencies _ideaPluginDependencies = new IdeaPluginDependencies();
    this.pluginDependencies = _ideaPluginDependencies;
  }
  
  public List getIdeaLibs() {
    ArrayList _xblockexpression = null;
    {
      final ArrayList result = CollectionLiterals.newArrayList();
      HashSet _projectDependencies = this.pluginDependencies.getProjectDependencies();
      final Function1 _function = new Function1() {
        @Override
        public Project apply(final String it) {
          return IdeaExtension.this.project.project(it);
        }
      };
      Iterable _map = IterableExtensions.map(_projectDependencies, _function);
      Iterables.addAll(result, _map);
      FileCollection _externalLibs = this.getExternalLibs();
      result.add(_externalLibs);
      _xblockexpression = result;
    }
    return _xblockexpression;
  }
  
  public FileCollection getExternalLibs() {
    return new LazilyInitializedFileCollection() {
      @Override
      public FileCollection createDelegate() {
        FileCollection _xblockexpression = null;
        {
          TreeSet _externalDependencies = IdeaExtension.this.pluginDependencies.getExternalDependencies();
          final Function1 _function = new Function1() {
            @Override
            public File apply(final ExternalIdeaPluginDependency it) {
              File _destinationDir = IdeaExtension.this.downloadPlugins.getDestinationDir();
              String _id = it.getId();
              return GradleExtensions.operator_divide(_destinationDir, _id);
            }
          };
          final Iterable unpackedDependencies = IterableExtensions.map(_externalDependencies, _function);
          final Function1 _function_1 = new Function1() {
            @Override
            public ConfigurableFileCollection apply(final File it) {
              File _divide = GradleExtensions.operator_divide(it, "classes");
              return IdeaExtension.this.project.files(_divide);
            }
          };
          Iterable _map = IterableExtensions.map(unpackedDependencies, _function_1);
          final Function2 _function_2 = new Function2() {
            @Override
            public FileCollection apply(final FileCollection a, final FileCollection b) {
              return a.plus(b);
            }
          };
          final FileCollection dependencyClasses = IterableExtensions.reduce(_map, _function_2);
          final Function1 _function_3 = new Function1() {
            @Override
            public ConfigurableFileTree apply(final File it) {
              File _divide = GradleExtensions.operator_divide(it, "lib");
              return IdeaExtension.this.project.fileTree(_divide);
            }
          };
          Iterable _map_1 = IterableExtensions.map(unpackedDependencies, _function_3);
          final Function2 _function_4 = new Function2() {
            @Override
            public FileCollection apply(final FileCollection a, final FileCollection b) {
              return a.plus(b);
            }
          };
          final FileCollection dependencyLibs = IterableExtensions.reduce(_map_1, _function_4);
          FileCollection _ideaCoreLibs = IdeaExtension.this.getIdeaCoreLibs();
          Iterable _filterNull = IterableExtensions.filterNull(Collections.unmodifiableList(CollectionLiterals.newArrayList(_ideaCoreLibs, dependencyClasses, dependencyLibs)));
          final Function2 _function_5 = new Function2() {
            @Override
            public FileCollection apply(final FileCollection a, final FileCollection b) {
              return a.plus(b);
            }
          };
          _xblockexpression = IterableExtensions.reduce(_filterNull, _function_5);
        }
        return _xblockexpression;
      }
      
      @Override
      public TaskDependency getBuildDependencies() {
        final TaskDependency _function = new TaskDependency() {
          @Override
          public Set getDependencies(final Task it) {
            return Collections.unmodifiableSet(CollectionLiterals.newHashSet(IdeaExtension.this.downloadIdea, IdeaExtension.this.downloadPlugins));
          }
        };
        return _function;
      }
    };
  }
  
  public FileCollection getIdeaCoreLibs() {
    File _file = this.project.file(this.ideaHome);
    String _plus = (_file + "/lib");
    ConfigurableFileTree _fileTree = this.project.fileTree(_plus);
    ConfigurableFileTree _builtBy = _fileTree.builtBy(this.downloadIdea);
    PatternFilterable _include = _builtBy.include("*.jar");
    return ((FileCollection) _include);
  }
  
  public FileCollection getIdeaRunClasspath() {
    FileCollection _ideaCoreLibs = this.getIdeaCoreLibs();
    ConfigurableFileCollection _olsJar = this.toolsJar();
    return _ideaCoreLibs.plus(_olsJar);
  }
  
  public ConfigurableFileCollection toolsJar() {
    StringConcatenation _builder = new StringConcatenation();
    String _property = System.getProperty("java.home");
    _builder.append(_property, "");
    _builder.append("/../lib/tools.jar");
    return this.project.files(_builder);
  }
  
  public File getIdeaHome() {
    return this.project.file(this.ideaHome);
  }
  
  public File getSourcesZip() {
    File _file = this.project.file(this.ideaHome);
    return GradleExtensions.operator_divide(_file, "sources.zip");
  }
  
  public File getSandboxDir() {
    File _buildDir = this.project.getBuildDir();
    return GradleExtensions.operator_divide(_buildDir, "ideaSandbox");
  }
  
  public Object pluginDependencies(final Closure config) {
    return this.project.configure(((Object) this.pluginDependencies), config);
  }
  
  public Object pluginRepositories(final Closure config) {
    return this.project.configure(((Object) this.pluginRepositories), config);
  }
  
  @Pure
  public Project getProject() {
    return this.project;
  }
  
  @Pure
  public IdeaPluginRepositories getPluginRepositories() {
    return this.pluginRepositories;
  }
  
  @Pure
  public IdeaPluginDependencies getPluginDependencies() {
    return this.pluginDependencies;
  }
  
  public void setIdeaHome(final Object ideaHome) {
    this.ideaHome = ideaHome;
  }
  
  @Pure
  public String getIdeaVersion() {
    return this.ideaVersion;
  }
  
  public void setIdeaVersion(final String ideaVersion) {
    this.ideaVersion = ideaVersion;
  }
  
  @Pure
  public DownloadIdea getDownloadIdea() {
    return this.downloadIdea;
  }
  
  public void setDownloadIdea(final DownloadIdea downloadIdea) {
    this.downloadIdea = downloadIdea;
  }
  
  @Pure
  public DownloadPlugins getDownloadPlugins() {
    return this.downloadPlugins;
  }
  
  public void setDownloadPlugins(final DownloadPlugins downloadPlugins) {
    this.downloadPlugins = downloadPlugins;
  }
}