old_contents: # Copyright 2018 The Bazel Authors. All rights reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #    http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  load("//kotlin/internal:kt.bzl", "kt")
  
  def _mk_processor_entry(l,p):
      return struct(
            label=l,
            processor_class=p.processor_class,
            classpath=[cp.path for cp in java_common.merge([j[JavaInfo] for j in p.deps]).full_compile_jars],
            generates_api=p.generates_api,
      )
  
  def _merge_plugin_infos(attrs):
      tally={}
      annotation_processors=[]
      for info in [a[kt.info.KtPluginInfo] for a in attrs]:
          for p in info.annotation_processors:
              if p.label not in tally:
                  tally[p.label] = True
                  annotation_processors.append(p)
      return kt.info.KtPluginInfo(annotation_processors=annotation_processors)
  
  def _restore_label(l):
      lbl = l.workspace_root
      if lbl.startswith("external/"):
          lbl = lbl.replace("external/", "@")
      return lbl + "//" + l.package + ":" + l.name
  
  _EMPTY_PLUGIN_INFO = [kt.info.KtPluginInfo(annotation_processors = [])]
  
  def _kt_jvm_plugin_aspect_impl(target, ctx):
      if ctx.rule.kind == "java_plugin":
          return [kt.info.KtPluginInfo(
              annotation_processors = [_mk_processor_entry(_restore_label(ctx.label),ctx.rule.attr)]
          )]
      else:
        if ctx.rule.kind == "java_library":
            return [_merge_plugin_infos(ctx.rule.attr.exported_plugins)]
        else:
            return _EMPTY_PLUGIN_INFO
  
  kt_jvm_plugin_aspect = aspect(
      attr_aspects = [
          "plugins",
          "exported_plugins",
      ],
      implementation = _kt_jvm_plugin_aspect_impl,
  )
  
  """renders a java info into a kt.info.KtPluginInfo."""
  
  plugins = struct(
      kt_jvm_plugin_aspect = kt_jvm_plugin_aspect,
      merge_plugin_infos = _merge_plugin_infos,
  )
  
new_contents: # Copyright 2018 The Bazel Authors. All rights reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #    http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  load("//kotlin/internal:kt.bzl", "kt")
  
  def _mk_processor_entry(l,p):
      merged_info=java_common.merge([j[JavaInfo] for j in p.deps])
      classpath_jars = depset([cp for cp in merged_info.full_compile_jars])
      classpath_jars = classpath_jars + merged_info.transitive_runtime_jars
      return struct(
            label=l,
            processor_class=p.processor_class,
            classpath=[cpj.path for cpj in classpath_jars.to_list()],
            generates_api=p.generates_api,
      )
  
  def _merge_plugin_infos(attrs):
      tally={}
      annotation_processors=[]
      for info in [a[kt.info.KtPluginInfo] for a in attrs]:
          for p in info.annotation_processors:
              if p.label not in tally:
                  tally[p.label] = True
                  annotation_processors.append(p)
      return kt.info.KtPluginInfo(annotation_processors=annotation_processors)
  
  def _restore_label(l):
      lbl = l.workspace_root
      if lbl.startswith("external/"):
          lbl = lbl.replace("external/", "@")
      return lbl + "//" + l.package + ":" + l.name
  
  _EMPTY_PLUGIN_INFO = [kt.info.KtPluginInfo(annotation_processors = [])]
  
  def _kt_jvm_plugin_aspect_impl(target, ctx):
      if ctx.rule.kind == "java_plugin":
          return [kt.info.KtPluginInfo(
              annotation_processors = [_mk_processor_entry(_restore_label(ctx.label),ctx.rule.attr)]
          )]
      else:
        if ctx.rule.kind == "java_library":
            return [_merge_plugin_infos(ctx.rule.attr.exported_plugins)]
        else:
            return _EMPTY_PLUGIN_INFO
  
  kt_jvm_plugin_aspect = aspect(
      attr_aspects = [
          "plugins",
          "exported_plugins",
      ],
      implementation = _kt_jvm_plugin_aspect_impl,
  )
  
  """renders a java info into a kt.info.KtPluginInfo."""
  
  plugins = struct(
      kt_jvm_plugin_aspect = kt_jvm_plugin_aspect,
      merge_plugin_infos = _merge_plugin_infos,
  )
  
subject: fix annotation processing classpath issues