Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions annotations/api/annotations.api
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ public abstract interface annotation class com/squareup/anvil/annotations/compat
public abstract fun value ()[Lcom/squareup/anvil/annotations/compat/MergeModules;
}

public abstract interface annotation class com/squareup/anvil/annotations/internal/InternalAnvilApi : java/lang/annotation/Annotation {
}

public abstract interface annotation class com/squareup/anvil/annotations/internal/InternalBindingMarker : java/lang/annotation/Annotation {
public abstract fun isMultibinding ()Z
public abstract fun originClass ()Ljava/lang/Class;
Expand All @@ -117,3 +120,19 @@ public abstract interface annotation class com/squareup/anvil/annotations/intern
public abstract fun value ()[Lcom/squareup/anvil/annotations/internal/InternalBindingMarker;
}

public abstract interface annotation class com/squareup/anvil/annotations/internal/InternalContributedComponentHints : java/lang/annotation/Annotation {
public abstract fun hints ()[Ljava/lang/String;
}

public abstract interface annotation class com/squareup/anvil/annotations/internal/InternalContributedComponentHints$Container : java/lang/annotation/Annotation {
public abstract fun value ()[Lcom/squareup/anvil/annotations/internal/InternalContributedComponentHints;
}

public abstract interface annotation class com/squareup/anvil/annotations/internal/InternalContributedModuleHints : java/lang/annotation/Annotation {
public abstract fun hints ()[Ljava/lang/String;
}

public abstract interface annotation class com/squareup/anvil/annotations/internal/InternalContributedModuleHints$Container : java/lang/annotation/Annotation {
public abstract fun value ()[Lcom/squareup/anvil/annotations/internal/InternalContributedModuleHints;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.squareup.anvil.annotations.internal

/** This Anvil API is meant for internal use and is subject to change. */
@RequiresOptIn("This Anvil API is meant for internal use and is subject to change.")
@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY)
public annotation class InternalAnvilApi
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.squareup.anvil.annotations.internal

/**
* An internal annotation that is used to propagate module contribution metadata to downstream compilations.
* Should not be used directly.
*
* @param hints Each hint corresponds to a single contributed module.
*/
@Target(AnnotationTarget.PROPERTY)
@Retention(AnnotationRetention.BINARY)
@Repeatable
@InternalAnvilApi
public annotation class InternalContributedModuleHints(val hints: Array<String>)

@Target(AnnotationTarget.PROPERTY)
@Retention(AnnotationRetention.BINARY)
@Repeatable
@InternalAnvilApi
public annotation class InternalContributedComponentHints(val hints: Array<String>)
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,10 @@ abstract class BasePlugin : Plugin<Project> {
// Only add the experimental opt-in if the project has the `annotations` dependency,
// otherwise the compiler will throw a warning and fail in CI.
if (target.hasAnnotationDependency(sourceSetName)) {
freeCompilerArgs.add("-opt-in=com.squareup.anvil.annotations.ExperimentalAnvilApi")
freeCompilerArgs.addAll(
"-opt-in=com.squareup.anvil.annotations.ExperimentalAnvilApi",
"-opt-in=com.squareup.anvil.compiler.k2.fir.internal.InternalAnvilApi",
)
}

freeCompilerArgs.addAll(extension.kotlinCompilerArgs.get())
Expand Down
159 changes: 155 additions & 4 deletions compiler-k2-api/api/compiler-k2-api.api
Original file line number Diff line number Diff line change
@@ -1,37 +1,188 @@
public abstract class com/squareup/anvil/compiler/k2/fir/AbstractAnvilFirProcessorFactory : com/squareup/anvil/compiler/k2/fir/AnvilFirProcessor$Factory {
public fun <init> (Lkotlin/jvm/functions/Function1;)V
public final fun create (Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext2;)Lcom/squareup/anvil/compiler/k2/fir/AnvilFirProcessor;
}

public final class com/squareup/anvil/compiler/k2/fir/AnvilFirContext {
public fun <init> (Lorg/jetbrains/kotlin/cli/common/messages/MessageCollector;)V
public final fun getLogger ()Lorg/jetbrains/kotlin/util/Logger;
public final fun getMessageCollector ()Lorg/jetbrains/kotlin/cli/common/messages/MessageCollector;
}

public final class com/squareup/anvil/compiler/k2/fir/AnvilFirContext2 {
public fun <init> (Lorg/jetbrains/kotlin/fir/FirSession;Lorg/jetbrains/kotlin/cli/common/messages/MessageCollector;)V
public final fun getLogger ()Lorg/jetbrains/kotlin/util/Logger;
public final fun getMessageCollector ()Lorg/jetbrains/kotlin/cli/common/messages/MessageCollector;
public final fun getSession ()Lorg/jetbrains/kotlin/fir/FirSession;
}

public abstract class com/squareup/anvil/compiler/k2/fir/AnvilFirDeclarationGenerationExtension : org/jetbrains/kotlin/fir/extensions/FirDeclarationGenerationExtension, com/squareup/anvil/compiler/k2/fir/AnvilFirExtension {
public fun <init> (Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;Lorg/jetbrains/kotlin/fir/FirSession;)V
public fun getAnvilFirContext ()Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;
public final fun getAnvilContext ()Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/AnvilFirDeclarationGenerationExtension$Factory : com/squareup/anvil/compiler/k2/fir/AnvilFirExtensionFactory {
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/AnvilFirExtension {
public abstract fun getAnvilFirContext ()Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/AnvilFirExtensionFactory {
public abstract fun create (Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;)Lorg/jetbrains/kotlin/fir/extensions/FirExtension$Factory;
}

public final class com/squareup/anvil/compiler/k2/fir/AnvilFirExtensionKt {
public static final fun getSession (Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;)Lorg/jetbrains/kotlin/fir/FirSession;
}

public abstract class com/squareup/anvil/compiler/k2/fir/AnvilFirExtensionSessionComponent : org/jetbrains/kotlin/fir/extensions/FirExtensionSessionComponent, com/squareup/anvil/compiler/k2/fir/AnvilFirExtension {
public fun <init> (Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;Lorg/jetbrains/kotlin/fir/FirSession;)V
public fun getAnvilFirContext ()Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;
public final fun getAnvilContext ()Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;
protected final fun lazyValue (Lkotlin/jvm/functions/Function0;)Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
protected final fun map (Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/AnvilFirExtensionSessionComponent$Factory : com/squareup/anvil/compiler/k2/fir/AnvilFirExtensionFactory {
}

public abstract class com/squareup/anvil/compiler/k2/fir/AnvilFirProcessor : com/squareup/anvil/compiler/k2/fir/HasAnvilFirContext {
protected final fun getCachesFactory ()Lorg/jetbrains/kotlin/fir/caches/FirCachesFactory;
protected final fun getSession ()Lorg/jetbrains/kotlin/fir/FirSession;
protected final fun lazySymbols (Lorg/jetbrains/kotlin/fir/extensions/predicate/LookupPredicate;)Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
protected final fun lazyValue (Lkotlin/jvm/functions/Function0;)Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
protected final fun map (Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/AnvilFirProcessor$Factory {
public abstract fun create (Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext2;)Lcom/squareup/anvil/compiler/k2/fir/AnvilFirProcessor;
}

public abstract class com/squareup/anvil/compiler/k2/fir/AnvilFirSupertypeGenerationExtension : org/jetbrains/kotlin/fir/extensions/FirSupertypeGenerationExtension, com/squareup/anvil/compiler/k2/fir/AnvilFirExtension {
public fun <init> (Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;Lorg/jetbrains/kotlin/fir/FirSession;)V
public fun getAnvilFirContext ()Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;
public final fun getAnvilContext ()Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext;
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/AnvilFirSupertypeGenerationExtension$Factory : com/squareup/anvil/compiler/k2/fir/AnvilFirExtensionFactory {
}

public final class com/squareup/anvil/compiler/k2/fir/BindingKey {
public fun <init> (Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/name/ClassId;Lcom/squareup/anvil/compiler/k2/fir/Qualifier;)V
public final fun getContributedType ()Lorg/jetbrains/kotlin/name/ClassId;
public final fun getQualifier ()Lcom/squareup/anvil/compiler/k2/fir/Qualifier;
public final fun getScopeType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
}

public final class com/squareup/anvil/compiler/k2/fir/ContributedBinding : com/squareup/anvil/compiler/k2/fir/ScopedContribution {
public fun <init> (Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/name/ClassId;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;IZZLorg/jetbrains/kotlin/name/ClassId;Lcom/squareup/anvil/compiler/k2/fir/Qualifier;)V
public final fun getBindingCallableName ()Lorg/jetbrains/kotlin/name/Name;
public final fun getBindingKey ()Lcom/squareup/anvil/compiler/k2/fir/BindingKey;
public final fun getBindingModule ()Lorg/jetbrains/kotlin/name/ClassId;
public final fun getBoundType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public fun getContributedType ()Lorg/jetbrains/kotlin/name/ClassId;
public final fun getIgnoreQualifier ()Z
public final fun getQualifier ()Lcom/squareup/anvil/compiler/k2/fir/Qualifier;
public final fun getRank ()I
public fun getReplaces ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public fun getScopeType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public final fun isMultibinding ()Z
}

public final class com/squareup/anvil/compiler/k2/fir/ContributedModule : com/squareup/anvil/compiler/k2/fir/ContributedTo {
public fun <init> (Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/name/ClassId;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;)V
public fun getContributedType ()Lorg/jetbrains/kotlin/name/ClassId;
public fun getReplaces ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public fun getScopeType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
}

public final class com/squareup/anvil/compiler/k2/fir/ContributedSubcomponent : com/squareup/anvil/compiler/k2/fir/ScopedContribution {
public fun <init> (Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/name/ClassId;Lorg/jetbrains/kotlin/name/ClassId;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Ljava/util/List;Ljava/util/List;)V
public fun getContributedType ()Lorg/jetbrains/kotlin/name/ClassId;
public final fun getExclude ()Ljava/util/List;
public final fun getModules ()Ljava/util/List;
public final fun getParentScopeType ()Lorg/jetbrains/kotlin/name/ClassId;
public fun getReplaces ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public fun getScopeType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
}

public final class com/squareup/anvil/compiler/k2/fir/ContributedSupertype : com/squareup/anvil/compiler/k2/fir/ContributedTo {
public fun <init> (Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/name/ClassId;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;)V
public fun getContributedType ()Lorg/jetbrains/kotlin/name/ClassId;
public fun getReplaces ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public fun getScopeType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/ContributedTo : com/squareup/anvil/compiler/k2/fir/ScopedContribution {
}

public abstract class com/squareup/anvil/compiler/k2/fir/FlushingSupertypeProcessor : com/squareup/anvil/compiler/k2/fir/SupertypeProcessor {
public fun <init> ()V
public fun addSupertypes (Lorg/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration;Ljava/util/List;Lorg/jetbrains/kotlin/fir/extensions/FirSupertypeGenerationExtension$TypeResolveService;)Ljava/util/List;
public abstract fun generateAnnotation (Lorg/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration;)Lorg/jetbrains/kotlin/fir/expressions/FirAnnotationCall;
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/HasAnvilFirContext {
public abstract fun getAnvilContext ()Lcom/squareup/anvil/compiler/k2/fir/AnvilFirContext2;
}

public final class com/squareup/anvil/compiler/k2/fir/MergedComponent : com/squareup/anvil/compiler/k2/fir/ScopedMerge {
public fun <init> (Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/name/ClassId;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;)V
public fun getContainingDeclaration ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public final fun getDependencies ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public fun getExclude ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public final fun getMergeAnnotationCall ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public final fun getModules ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public fun getScopeType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public fun getTargetType ()Lorg/jetbrains/kotlin/name/ClassId;
}

public final class com/squareup/anvil/compiler/k2/fir/PendingTopLevelClass {
public fun <init> (Lorg/jetbrains/kotlin/name/ClassId;Lorg/jetbrains/kotlin/GeneratedDeclarationKey;Lorg/jetbrains/kotlin/descriptors/ClassKind;Lorg/jetbrains/kotlin/descriptors/Visibility;Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;Lorg/jetbrains/kotlin/fir/caches/FirCachesFactory;Lorg/jetbrains/kotlin/fir/extensions/FirExtension;)V
public final fun getAnnotations ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public final fun getClassId ()Lorg/jetbrains/kotlin/name/ClassId;
public final fun getClassKind ()Lorg/jetbrains/kotlin/descriptors/ClassKind;
public final fun getGeneratedClass ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public final fun getKey ()Lorg/jetbrains/kotlin/GeneratedDeclarationKey;
public final fun getVisibility ()Lorg/jetbrains/kotlin/descriptors/Visibility;
}

public final class com/squareup/anvil/compiler/k2/fir/Qualifier {
public static final field Companion Lcom/squareup/anvil/compiler/k2/fir/Qualifier$Companion;
public fun <init> (Lorg/jetbrains/kotlin/name/ClassId;Ljava/lang/String;)V
public final fun getType ()Lorg/jetbrains/kotlin/name/ClassId;
public final fun getValue ()Ljava/lang/String;
}

public final class com/squareup/anvil/compiler/k2/fir/Qualifier$Companion {
}

public abstract interface annotation class com/squareup/anvil/compiler/k2/fir/RequiresTypesResolutionPhase : java/lang/annotation/Annotation {
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/ScopedContribution {
public abstract fun getContributedType ()Lorg/jetbrains/kotlin/name/ClassId;
public abstract fun getReplaces ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public abstract fun getScopeType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
}

public abstract interface class com/squareup/anvil/compiler/k2/fir/ScopedMerge {
public abstract fun getContainingDeclaration ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public abstract fun getExclude ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public abstract fun getScopeType ()Lorg/jetbrains/kotlin/fir/caches/FirLazyValue;
public abstract fun getTargetType ()Lorg/jetbrains/kotlin/name/ClassId;
}

public abstract class com/squareup/anvil/compiler/k2/fir/SupertypeProcessor : com/squareup/anvil/compiler/k2/fir/AnvilFirProcessor {
public fun <init> ()V
public fun addSupertypes (Lorg/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration;Ljava/util/List;Lorg/jetbrains/kotlin/fir/extensions/FirSupertypeGenerationExtension$TypeResolveService;)Ljava/util/List;
public fun computeAdditionalSupertypesForGeneratedNestedClass (Lorg/jetbrains/kotlin/fir/declarations/FirRegularClass;Lorg/jetbrains/kotlin/fir/extensions/FirSupertypeGenerationExtension$TypeResolveService;)Ljava/util/List;
public abstract fun shouldProcess (Lorg/jetbrains/kotlin/fir/declarations/FirClassLikeDeclaration;)Z
}

public abstract class com/squareup/anvil/compiler/k2/fir/TopLevelClassProcessor : com/squareup/anvil/compiler/k2/fir/AnvilFirProcessor {
public fun <init> ()V
public fun generateFunctions (Lorg/jetbrains/kotlin/name/CallableId;Lorg/jetbrains/kotlin/fir/extensions/DeclarationGenerationContext$Member;Lorg/jetbrains/kotlin/fir/extensions/FirExtension;)Ljava/util/List;
public abstract fun generateTopLevelClassLikeDeclaration (Lorg/jetbrains/kotlin/name/ClassId;Lorg/jetbrains/kotlin/fir/extensions/FirExtension;)Lcom/squareup/anvil/compiler/k2/fir/PendingTopLevelClass;
public fun getCallableNamesForClass (Lorg/jetbrains/kotlin/fir/symbols/impl/FirClassLikeSymbol;Lorg/jetbrains/kotlin/fir/extensions/DeclarationGenerationContext$Member;)Ljava/util/Set;
public abstract fun getTopLevelClassIds ()Ljava/util/Set;
public abstract fun hasPackage (Lorg/jetbrains/kotlin/name/FqName;)Z
}
2 changes: 2 additions & 0 deletions compiler-k2-api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ dependencies {
compileOnly(libs.auto.service.annotations)
api(libs.kotlin.compiler)

compileOnly(project(":annotations"))

testImplementation(libs.junit.jupiter.api)
testImplementation(libs.kase)
testImplementation(libs.kotest.assertions.api)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.squareup.anvil.compiler.k2.fir

import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.toLogger
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.extensions.FirExtensionSessionComponent
import org.jetbrains.kotlin.util.Logger

public val FirSession.anvilContext: AnvilFirContext by FirSession.sessionComponentAccessor()

public class AnvilFirContext(
public val messageCollector: MessageCollector,
session: FirSession,
) : FirExtensionSessionComponent(session) {
public val logger: Logger by lazy(LazyThreadSafetyMode.NONE) {
messageCollector.toLogger(treatWarningsAsErrors = false)
}
}

public interface HasAnvilFirContext {
public val anvilContext: AnvilFirContext
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,5 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.extensions.FirDeclarationGenerationExtension

public abstract class AnvilFirDeclarationGenerationExtension(
override val anvilFirContext: AnvilFirContext,
session: FirSession,
) : FirDeclarationGenerationExtension(session),
AnvilFirExtension {
public fun interface Factory : AnvilFirExtensionFactory<FirDeclarationGenerationExtension.Factory>
}
) : FirDeclarationGenerationExtension(session)

This file was deleted.

Loading
Loading