-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement findPrimaryConstructor in KspTypeElement
This CL implements findPrimaryConstructor in KspTypeElement. I've also found a bug in KotlinMetadata implementation where we would crash if it does not have a primary contructor. I've also added tests for Java sources which required adding a new synthetic constructor element for Java classes which are not abstract but has no explicit constructor. google/ksp#98 Also discovered another bug w/ KSP java interop where it could return the same function declaration twice if it is coming from java, added a workaround for it. google/ksp#99 With this change, we can enable more of XProcessingEnv tests to include KSP. I've enabled all except for the primitive types test. Bug: 160322705 Test: KspTypeElementTest#constructors, XProcessingEnvTest Change-Id: I2def5651fb3d7d693e7256646168d12622eb6928
- Loading branch information
Showing
5 changed files
with
231 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
68 changes: 68 additions & 0 deletions
68
...in/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticConstructorForJava.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/* | ||
* Copyright 2020 The Android Open Source Project | ||
* | ||
* 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. | ||
*/ | ||
|
||
package androidx.room.compiler.processing.ksp.synthetic | ||
|
||
import androidx.room.compiler.processing.XAnnotated | ||
import androidx.room.compiler.processing.XConstructorElement | ||
import androidx.room.compiler.processing.XExecutableParameterElement | ||
import androidx.room.compiler.processing.XTypeElement | ||
import androidx.room.compiler.processing.ksp.KspAnnotated | ||
import androidx.room.compiler.processing.ksp.KspProcessingEnv | ||
import androidx.room.compiler.processing.ksp.KspTypeElement | ||
|
||
/** | ||
* KSP does not create any constructor for java classes that do not have explicit constructor so | ||
* we synthesize one. | ||
* | ||
* see: https://github.com/google/ksp/issues/98 | ||
*/ | ||
internal class KspSyntheticConstructorForJava( | ||
val env: KspProcessingEnv, | ||
val origin: KspTypeElement | ||
) : XConstructorElement, | ||
XAnnotated by KspAnnotated.create( | ||
env = env, | ||
delegate = null, // there is no way to annotate this synthetic in kotlin | ||
filter = KspAnnotated.UseSiteFilter.NO_USE_SITE | ||
) { | ||
|
||
override val enclosingTypeElement: XTypeElement | ||
get() = origin | ||
|
||
override val parameters: List<XExecutableParameterElement> | ||
get() = emptyList() | ||
|
||
override fun isVarArgs() = false | ||
|
||
override fun isPublic() = origin.isPublic() | ||
|
||
override fun isProtected() = origin.isProtected() | ||
|
||
override fun isAbstract() = false | ||
|
||
override fun isPrivate() = origin.isPrivate() | ||
|
||
override fun isStatic() = false | ||
|
||
override fun isTransient() = false | ||
|
||
override fun isFinal() = origin.isFinal() | ||
|
||
override fun kindName(): String { | ||
return "synthetic java constructor" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters