Skip to content
This repository was archived by the owner on Dec 20, 2022. It is now read-only.

Commit d0fb240

Browse files
committed
3: detection of targetplatform(Native/JS/JVM) works, i need to figure out how to get names of the native targets (e.g. "linux_x64") out of the CompilerConfiguration Map
1 parent 36be0c6 commit d0fb240

File tree

13 files changed

+105
-119
lines changed

13 files changed

+105
-119
lines changed

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@
88
/.gradle/
99
/build/
1010
/mpapt-runtime/build/*
11-
/kotlin-plugin-shared/build/
11+
/kotlin-plugin-shared/build/
12+
/buildSrc/build/
13+
/buildSrc/.gradle/

kotlin-compiler-native-plugin/src/main/java/de/jensklingenberg/common/NativeTestComponentRegistrar.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
1818
class NativeTestComponentRegistrar : ComponentRegistrar {
1919

2020
override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
21-
val generator = MpAptTestProcessor(configuration)
22-
val mpapt = MpAptProject(generator)
21+
val generator = MpAptTestProcessor()
22+
val mpapt = MpAptProject(generator,configuration)
2323

2424
StorageComponentContainerContributor.registerExtension(project,mpapt)
2525
SyntheticResolveExtension.registerExtension(project, mpapt)

kotlin-plugin-shared/src/main/java/de/jensklingenberg/MpAptTestProcessor.kt

+15-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import de.jensklingenberg.mpapt.common.simpleName
77
import de.jensklingenberg.mpapt.model.Element
88
import de.jensklingenberg.testAnnotations.*
99
import org.jetbrains.kotlin.config.CompilerConfiguration
10+
import org.jetbrains.kotlin.platform.TargetPlatform
1011
import org.jetbrains.kotlin.resolve.descriptorUtil.module
1112

12-
class MpAptTestProcessor(configuration: CompilerConfiguration) : AbstractProcessor(configuration) {
13+
class MpAptTestProcessor : AbstractProcessor() {
1314
val TAG = "MyAnnotationProcessor"
1415

1516
val testFunction = TestFunction::class.java.name
@@ -20,6 +21,19 @@ class MpAptTestProcessor(configuration: CompilerConfiguration) : AbstractProcess
2021
val testConstructor = TestConstructor::class.java.name
2122
val testLocalVariable = TestLocalVariable::class.java.name
2223

24+
override fun isTargetPlatformSupported(platform: TargetPlatform): Boolean {
25+
val targetName = platform.first().platformName
26+
27+
return when(targetName){
28+
"JS"->false
29+
"JVM"->true
30+
else -> {
31+
log(targetName)
32+
false
33+
}
34+
}
35+
36+
}
2337

2438
override fun process(roundEnvironment: RoundEnvironment) {
2539

kotlin-plugin/src/main/java/de/jensklingenberg/CommonComponentRegistrar.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ open class CommonComponentRegistrar : ComponentRegistrar {
2020
project: MockProject,
2121
configuration: CompilerConfiguration
2222
) {
23-
val processor = MpAptTestProcessor(configuration)
24-
val mpapt = MpAptProject(processor)
23+
val processor = MpAptTestProcessor()
24+
val mpapt = MpAptProject(processor,configuration)
2525
StorageComponentContainerContributor.registerExtension(project,mpapt)
2626
SyntheticResolveExtension.registerExtension(project, mpapt)
2727
ClassBuilderInterceptorExtension.registerExtension(project,mpapt)
2828
JsSyntheticTranslateExtension.registerExtension(project,mpapt)
29+
2930
}
3031
}
31-

mpapt-runtime/src/main/java/de/jensklingenberg/mpapt/common/ClassParser.kt

+15-25
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package de.jensklingenberg.mpapt.common
22

3-
import de.jensklingenberg.mpapt.model.AbstractProcessor
43
import de.jensklingenberg.mpapt.model.Element
4+
import de.jensklingenberg.mpapt.model.Processor
55
import de.jensklingenberg.mpapt.model.RoundEnvironment
66
import org.jetbrains.kotlin.descriptors.*
77
import org.jetbrains.kotlin.name.FqName
@@ -15,7 +15,7 @@ class ClassParser() {
1515

1616
companion object {
1717

18-
fun parse(descriptor: ClassDescriptor, processor: AbstractProcessor, roundEnvironment: RoundEnvironment) {
18+
fun parse(descriptor: ClassDescriptor, processor: Processor, roundEnvironment: RoundEnvironment) {
1919

2020
processor.getSupportedAnnotationTypes().forEach { annotation ->
2121
if (descriptor.hasAnnotation(annotation)) {
@@ -38,24 +38,24 @@ class ClassParser() {
3838

3939
}
4040

41-
private fun parseClassConstructor(descriptor: ClassDescriptor, processor: AbstractProcessor, round: RoundEnvironment, annotation: String) {
41+
private fun parseClassConstructor(descriptor: ClassDescriptor, processor: Processor, round: RoundEnvironment, annotation: String) {
4242
try {
4343
descriptor.constructors.forEach {
44-
if (checkit(it, annotation)) {
44+
if (hasAnnnotations(it, annotation)) {
4545
val annotatedConstructors =
46-
descriptor.constructors.filter { constructor -> constructor.hasAnnotation(annotation) }
46+
descriptor.constructors.filter { constructor -> constructor.hasAnnotation(annotation) }
4747

4848
annotatedConstructors.forEach { annotatedConstructor ->
4949

5050
val annotationDesc = annotatedConstructor.annotations.findAnnotation(annotation)
5151

5252
round.module = descriptor.module
5353
round.elements.add(
54-
Element.ClassConstructorElement(
55-
classConstructorDescriptor = annotatedConstructor,
56-
annotation = annotationDesc
54+
Element.ClassConstructorElement(
55+
classConstructorDescriptor = annotatedConstructor,
56+
annotation = annotationDesc
5757

58-
)
58+
)
5959
)
6060
processor.process(round)
6161
}
@@ -72,7 +72,7 @@ class ClassParser() {
7272
fun parseMethod(
7373
descriptor: ClassDescriptor,
7474
function: FunctionDescriptor,
75-
processor: AbstractProcessor,
75+
processor: Processor,
7676
roundEnvironment: RoundEnvironment
7777
) {
7878

@@ -108,7 +108,7 @@ class ClassParser() {
108108

109109
}
110110

111-
private fun checkValueParameter(descriptor: ClassDescriptor, function: FunctionDescriptor, processor: AbstractProcessor, roundEnvironment: RoundEnvironment, annotationNames: String) {
111+
private fun checkValueParameter(descriptor: ClassDescriptor, function: FunctionDescriptor, processor: Processor, roundEnvironment: RoundEnvironment, annotationNames: String) {
112112
function.valueParameters.forEach { parameterDescriptor ->
113113
if (parameterDescriptor.annotations.hasAnnotation(FqName(annotationNames))) {
114114
val annotation = parameterDescriptor.annotations.findAnnotation(FqName(annotationNames))
@@ -131,7 +131,7 @@ class ClassParser() {
131131
}
132132

133133

134-
fun parseProperty(propertyDescriptor: PropertyDescriptor, processor: AbstractProcessor, roundEnvironment: RoundEnvironment, isLastClass: Boolean = false) {
134+
fun parseProperty(propertyDescriptor: PropertyDescriptor, processor: Processor, roundEnvironment: RoundEnvironment) {
135135

136136
processor.getSupportedAnnotationTypes().forEachIndexed { index, annotationNames ->
137137

@@ -159,7 +159,7 @@ class ClassParser() {
159159

160160
}
161161

162-
private fun checkPropertySetter(propertyDescriptor: PropertyDescriptor, processor: AbstractProcessor, roundEnvironment: RoundEnvironment, annotationNames: String) {
162+
private fun checkPropertySetter(propertyDescriptor: PropertyDescriptor, processor: Processor, roundEnvironment: RoundEnvironment, annotationNames: String) {
163163
propertyDescriptor.setter?.let { setterDesc ->
164164
if (setterDesc.annotations.hasAnnotation(annotationNames)) {
165165
val annotation = setterDesc.annotations.findAnnotation(annotationNames)
@@ -176,10 +176,9 @@ class ClassParser() {
176176
processor.process(roundEnvironment)
177177
}
178178
}
179-
180179
}
181180

182-
private fun checkPropertyGetter(propertyDescriptor: PropertyDescriptor, processor: AbstractProcessor, roundEnvironment: RoundEnvironment, annotationNames: String) {
181+
private fun checkPropertyGetter(propertyDescriptor: PropertyDescriptor, processor: Processor, roundEnvironment: RoundEnvironment, annotationNames: String) {
183182
propertyDescriptor.getter?.let { setterDesc ->
184183
if (setterDesc.annotations.hasAnnotation(annotationNames)) {
185184
val annotation = setterDesc.annotations.findAnnotation(annotationNames)
@@ -200,17 +199,8 @@ class ClassParser() {
200199

201200
}
202201

203-
fun parsePackage(thisDescriptor: PackageFragmentDescriptor, processor: AbstractProcessor, roundEnvironment: RoundEnvironment) {
204-
205-
processor.getSupportedAnnotationTypes().forEach { annotationNames ->
206-
207-
208-
}
209-
210-
211-
}
212202

213-
private fun checkit(it: ClassConstructorDescriptor, annotation: String): Boolean {
203+
private fun hasAnnnotations(it: ClassConstructorDescriptor, annotation: String): Boolean {
214204
/**I dont like this approach*/
215205

216206
try {

mpapt-runtime/src/main/java/de/jensklingenberg/mpapt/common/End.kt

-8
This file was deleted.

mpapt-runtime/src/main/java/de/jensklingenberg/mpapt/common/MpAptProject.kt

+9-6
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,26 @@ package de.jensklingenberg.mpapt.common
22

33
import de.jensklingenberg.mpapt.extension.*
44
import de.jensklingenberg.mpapt.extension.js.JsSyntheticTranslateExtensionExt
5-
import de.jensklingenberg.mpapt.extension.unused.DebugLogClassGenerationInterceptor
5+
import de.jensklingenberg.mpapt.extension.ClassBuilderInterceptorExtensionImpl
66
import de.jensklingenberg.mpapt.model.AbstractProcessor
77
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
88
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
9-
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
10-
import org.jetbrains.kotlin.extensions.CompilerConfigurationExtension
11-
import org.jetbrains.kotlin.extensions.PreprocessedVirtualFileFactoryExtension
9+
import org.jetbrains.kotlin.config.CompilerConfiguration
1210
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
1311
import org.jetbrains.kotlin.js.translate.extensions.JsSyntheticTranslateExtension
1412
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
1513

16-
class MpAptProject(abstractProcessor: AbstractProcessor) : SyntheticResolveExtension by SyntheticResolveExtensionImpl(abstractProcessor),
14+
class MpAptProject(abstractProcessor: AbstractProcessor,configuration: CompilerConfiguration) : SyntheticResolveExtension by SyntheticResolveExtensionImpl(abstractProcessor),
1715
IrGenerationExtension by NativeIrGenerationExtension(abstractProcessor),
1816
JsSyntheticTranslateExtension by JsSyntheticTranslateExtensionExt(abstractProcessor),
19-
ClassBuilderInterceptorExtension by DebugLogClassGenerationInterceptor(abstractProcessor),
17+
ClassBuilderInterceptorExtension by ClassBuilderInterceptorExtensionImpl(abstractProcessor),
2018
StorageComponentContainerContributor by StorageComponentContainerContributorImpl(abstractProcessor)
2119
// CompilerConfigurationExtension by CompilerConfigurationExtensionExt(abstractProcessor),
2220
// ExpressionCodegenExtension by ExpressionCodegenExtensionImpl(abstractProcessor)
2321
// PreprocessedVirtualFileFactoryExtension by MetaPreprocessedVirtualFileFactoryExtension(abstractProcessor)
2422
// AnalysisHandlerExtension by AnalysisHandlerExtensionImpl(abstractProcessor),
23+
{
24+
init {
25+
abstractProcessor.configuration=(configuration)
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package de.jensklingenberg.mpapt.extension
2+
3+
import de.jensklingenberg.mpapt.extension.unused.DelegatingClassBuilderImpl
4+
import de.jensklingenberg.mpapt.model.Processor
5+
import org.jetbrains.kotlin.codegen.ClassBuilderFactory
6+
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
7+
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
8+
import org.jetbrains.kotlin.resolve.BindingContext
9+
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
10+
11+
12+
class ClassBuilderInterceptorExtensionImpl(val processor: Processor) : ClassBuilderInterceptorExtension {
13+
14+
override fun interceptClassBuilderFactory(
15+
interceptedFactory: ClassBuilderFactory,
16+
bindingContext: BindingContext,
17+
diagnostics: DiagnosticSink
18+
): ClassBuilderFactory = object : ClassBuilderFactory by interceptedFactory {
19+
20+
override fun newClassBuilder(origin: JvmDeclarationOrigin): DelegatingClassBuilderImpl {
21+
processor.processingOver()
22+
23+
return DelegatingClassBuilderImpl(interceptedFactory.newClassBuilder(origin))
24+
}
25+
}
26+
27+
28+
}
29+

mpapt-runtime/src/main/java/de/jensklingenberg/mpapt/extension/SyntheticResolveExtensionImpl.kt

+14-22
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,54 @@
11
package de.jensklingenberg.mpapt.extension
22

33
import de.jensklingenberg.mpapt.common.ClassParser
4-
import de.jensklingenberg.mpapt.model.AbstractProcessor
5-
import de.jensklingenberg.mpapt.model.Platform
4+
import de.jensklingenberg.mpapt.model.Processor
65
import de.jensklingenberg.mpapt.model.RoundEnvironment
7-
import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots
86
import org.jetbrains.kotlin.descriptors.ClassDescriptor
97
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
108
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
119
import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor
1210
import org.jetbrains.kotlin.name.Name
13-
import org.jetbrains.kotlin.psi.KtClass
1411
import org.jetbrains.kotlin.resolve.BindingContext
1512
import org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension
1613
import org.jetbrains.kotlin.resolve.lazy.LazyClassContext
1714
import org.jetbrains.kotlin.resolve.lazy.declarations.PackageMemberDeclarationProvider
18-
import org.jetbrains.kotlin.resolve.source.KotlinSourceElement
1915
import java.util.*
2016

21-
internal class SyntheticResolveExtensionImpl(val abstractProcessor: AbstractProcessor) : SyntheticResolveExtension {
17+
internal class SyntheticResolveExtensionImpl(val abstractProcessor: Processor) : SyntheticResolveExtension {
2218

2319
override fun generateSyntheticClasses(thisDescriptor: PackageFragmentDescriptor, name: Name, ctx: LazyClassContext, declarationProvider: PackageMemberDeclarationProvider, result: MutableSet<ClassDescriptor>) {
24-
ClassParser.parsePackage(thisDescriptor, abstractProcessor, RoundEnvironment())
20+
if (!abstractProcessor.isTargetPlatformSupported()) {
21+
return
22+
}
2523

2624
val roundEnvironment = RoundEnvironment()
27-
if (
28-
abstractProcessor.supportedTargetPlatform().contains(Platform.ALL)
29-
) {
30-
31-
result.forEach {
32-
if (!it.isCompanionObject && name.identifier != "Companion") {
33-
ClassParser.parse(it, abstractProcessor, roundEnvironment)
34-
}
35-
//checkiflast(it)
25+
result.forEach {
26+
if (!it.isCompanionObject && name.identifier != "Companion") {
27+
ClassParser.parse(it, abstractProcessor, roundEnvironment)
3628
}
3729
}
38-
}
3930

40-
private fun checkiflast(thisDescriptor: ClassDescriptor, state: String): Boolean {
41-
((thisDescriptor.source as KotlinSourceElement).psi as KtClass).getProperties()
42-
return false
4331
}
4432

45-
4633
override fun generateSyntheticMethods(
4734
thisDescriptor: ClassDescriptor,
4835
name: Name,
4936
bindingContext: BindingContext,
5037
fromSupertypes: List<SimpleFunctionDescriptor>,
5138
result: MutableCollection<SimpleFunctionDescriptor>
5239
) {
40+
if (!abstractProcessor.isTargetPlatformSupported()) {
41+
return
42+
}
5343
result.forEach { function ->
5444
ClassParser.parseMethod(thisDescriptor, function, abstractProcessor, RoundEnvironment())
5545
}
5646
}
5747

5848
override fun generateSyntheticProperties(thisDescriptor: ClassDescriptor, name: Name, bindingContext: BindingContext, fromSupertypes: ArrayList<PropertyDescriptor>, result: MutableSet<PropertyDescriptor>) {
59-
49+
if (!abstractProcessor.isTargetPlatformSupported()) {
50+
return
51+
}
6052
result.forEach {
6153
ClassParser.parseProperty(it, abstractProcessor, RoundEnvironment())
6254
}

mpapt-runtime/src/main/java/de/jensklingenberg/mpapt/extension/unused/DebugLogClassGenerationInterceptor.kt

-35
This file was deleted.

mpapt-runtime/src/main/java/de/jensklingenberg/mpapt/extension/unused/DebugLogClassBuilder.kt mpapt-runtime/src/main/java/de/jensklingenberg/mpapt/extension/unused/DelegatingClassBuilderImpl.kt

+2-4
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
77
import org.jetbrains.org.objectweb.asm.FieldVisitor
88
import org.jetbrains.org.objectweb.asm.MethodVisitor
99

10-
class DebugLogClassBuilder(
11-
val delegateBuilder: ClassBuilder,
12-
val test: AbstractProcessor
13-
) : org.jetbrains.kotlin.codegen.DelegatingClassBuilder() {
10+
class DelegatingClassBuilderImpl(
11+
val delegateBuilder: ClassBuilder) : org.jetbrains.kotlin.codegen.DelegatingClassBuilder() {
1412
override fun getDelegate() = delegateBuilder
1513

1614

0 commit comments

Comments
 (0)