This is an automated email from the ASF dual-hosted git repository. donaldp pushed a commit to branch SupportExternalAnnotationArtifacts in repository https://gitbox.apache.org/repos/asf/buildr.git
commit fbe7875ab5a40b1897c714f6a07117d4a07b753f Author: Peter Donald <pe...@realityforge.org> AuthorDate: Sat Jul 13 17:22:40 2019 +1000 Add support for downloading external annotations and attaching them to IntelliJ IDEA module dependencies --- CHANGELOG | 1 + lib/buildr/ide/idea.rb | 33 ++++++++++++++++++++++++--------- lib/buildr/packaging/artifact.rb | 20 ++++++++++++++++++-- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index c09b7ac..4323deb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ * Fixed: Replace references to long removed `http://www.ibiblio.org/maven2/` repository with `https://repo1.maven.org/maven2`. * Fixed: Ensure pom files used in tests use https when referring to maven repositories. +* Added: Add support for downloading external annotations and attaching them to IntelliJ IDEA module dependencies. 1.5.7 (2019-02-16) * Fixed: The fix that allowed special characters in usernames and passwords was only partially applied diff --git a/lib/buildr/ide/idea.rb b/lib/buildr/ide/idea.rb index dfd050d..3ead679 100644 --- a/lib/buildr/ide/idea.rb +++ b/lib/buildr/ide/idea.rb @@ -478,12 +478,18 @@ module Buildr #:nodoc: dependency_path = d.to_s export = true source_path = nil + annotations_path = nil if d.respond_to?(:to_spec_hash) source_spec = d.to_spec_hash.merge(:classifier => 'sources') source_path = Buildr.artifact(source_spec).to_s source_path = nil unless File.exist?(source_path) end - [dependency_path, export, source_path] + if d.respond_to?(:to_spec_hash) + annotations_spec = d.to_spec_hash.merge(:classifier => 'annotations') + annotations_path = Buildr.artifact(annotations_spec).to_s + annotations_path = nil unless File.exist?(annotations_path) + end + [dependency_path, export, source_path, annotations_path] end end @@ -494,12 +500,18 @@ module Buildr #:nodoc: dependency_path = d.to_s export = main_dependencies_paths.include?(dependency_path) source_path = nil + annotations_path = nil if d.respond_to?(:to_spec_hash) source_spec = d.to_spec_hash.merge(:classifier => 'sources') source_path = Buildr.artifact(source_spec).to_s source_path = nil unless File.exist?(source_path) end - [dependency_path, export, source_path] + if d.respond_to?(:to_spec_hash) + annotations_spec = d.to_spec_hash.merge(:classifier => 'annotations') + annotations_path = Buildr.artifact(annotations_spec).to_s + annotations_path = nil unless File.exist?(annotations_path) + end + [dependency_path, export, source_path, annotations_path] end end @@ -545,22 +557,22 @@ module Buildr #:nodoc: end main_project_dependencies = project_dependencies.dup - self.test_dependency_details.each do |dependency_path, export, source_path| + self.test_dependency_details.each do |dependency_path, export, source_path, annotations_path| next if export - generate_lib(xml, dependency_path, export, source_path, project_dependencies) + generate_lib(xml, dependency_path, export, source_path, annotations_path, project_dependencies) end test_project_dependencies = project_dependencies - main_project_dependencies - self.main_dependency_details.each do |dependency_path, export, source_path| + self.main_dependency_details.each do |dependency_path, export, source_path, annotations_path| next unless export - generate_lib(xml, dependency_path, export, source_path, test_project_dependencies) + generate_lib(xml, dependency_path, export, source_path, annotations_path, test_project_dependencies) end xml.orderEntryProperties end end - def generate_lib(xml, dependency_path, export, source_path, project_dependencies) + def generate_lib(xml, dependency_path, export, source_path, annotations_path, project_dependencies) project_for_dependency = Buildr.projects.detect do |project| [project.packages, project.compile.target, project.resources.target, project.test.compile.target, project.test.resources.target].flatten. detect { |artifact| artifact.to_s == dependency_path } @@ -573,7 +585,7 @@ module Buildr #:nodoc: end project_dependencies << project_for_dependency else - generate_module_lib(xml, url_for_path(dependency_path), export, (source_path ? url_for_path(source_path) : nil), !export) + generate_module_lib(xml, url_for_path(dependency_path), export, (source_path ? url_for_path(source_path) : nil), (annotations_path ? url_for_path(annotations_path) : nil), !export) end end @@ -649,12 +661,15 @@ module Buildr #:nodoc: xml.orderEntry attribs end - def generate_module_lib(xml, path, export, source_path, test = false) + def generate_module_lib(xml, path, export, source_path, annotations_path, test = false) attribs = {:type => 'module-library'} attribs[:exported] = '' if export attribs[:scope] = 'TEST' if test xml.orderEntry attribs do xml.library do + xml.ANNOTATIONS do + xml.root :url => annotations_path + end if annotations_path xml.CLASSES do xml.root :url => path end diff --git a/lib/buildr/packaging/artifact.rb b/lib/buildr/packaging/artifact.rb index 2af68c7..27f87be 100644 --- a/lib/buildr/packaging/artifact.rb +++ b/lib/buildr/packaging/artifact.rb @@ -21,6 +21,9 @@ module Buildr #:nodoc: desc "Download all artifacts' sources" task 'artifacts:sources' + desc "Download all artifacts' external annotations" + task 'artifacts:annotations' + desc "Download all artifacts' javadoc" task 'artifacts:javadoc' @@ -127,7 +130,7 @@ module Buildr #:nodoc: def sources_artifact sources_spec = to_spec_hash.merge(:classifier=>'sources') sources_task = OptionalArtifact.define_task(Buildr.repositories.locate(sources_spec)) - sources_task.send :apply_spec, sources_spec + sources_task.send :apply_spec, sources_spec if sources_task.respond_to?(:apply_spec) sources_task end @@ -138,11 +141,23 @@ module Buildr #:nodoc: def javadoc_artifact javadoc_spec = to_spec_hash.merge(:classifier=>'javadoc') javadoc_task = OptionalArtifact.define_task(Buildr.repositories.locate(javadoc_spec)) - javadoc_task.send :apply_spec, javadoc_spec + javadoc_task.send :apply_spec, javadoc_spec if javadoc_task.respond_to?(:apply_spec) javadoc_task end # :call-seq: + # annotations_artifact => Artifact + # + # Convenience method that returns an annotations artifact. The annotations artifact is used by + # Intellij IDEA as a source of external annotations. + def annotations_artifact + annotations_spec = to_spec_hash.merge(:classifier=>'annotations') + annotations_task = OptionalArtifact.define_task(Buildr.repositories.locate(annotations_spec)) + annotations_task.send :apply_spec, annotations_spec if annotations_task.respond_to?(:apply_spec) + annotations_task + end + + # :call-seq: # pom_xml => string # # Creates POM XML for this artifact. @@ -948,6 +963,7 @@ module Buildr #:nodoc: unless spec[:type] == :pom Rake::Task['artifacts:sources'].enhance [task.sources_artifact] Rake::Task['artifacts:javadoc'].enhance [task.javadoc_artifact] + Rake::Task['artifacts:annotations'].enhance [task.annotations_artifact] end end task.enhance &block