[LL] don't include kotlin classes in combined java provider
do not resolve annotations when short name doesn't match
This commit is contained in:
+2
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
|||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
|
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProviderInternals
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
||||||
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||||
import org.jetbrains.kotlin.load.java.createJavaClassFinder
|
import org.jetbrains.kotlin.load.java.createJavaClassFinder
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -52,6 +53,7 @@ internal class LLFirCombinedJavaSymbolProvider private constructor(
|
|||||||
|
|
||||||
private fun computeClassLikeSymbolByClassId(classId: ClassId): FirRegularClassSymbol? {
|
private fun computeClassLikeSymbolByClassId(classId: ClassId): FirRegularClassSymbol? {
|
||||||
val javaClasses = javaClassFinder.findClasses(classId)
|
val javaClasses = javaClassFinder.findClasses(classId)
|
||||||
|
.filterNot { javaClass -> javaClass.annotations.any { it.isResolvedTo(JvmAnnotationNames.METADATA_FQ_NAME) } }
|
||||||
if (javaClasses.isEmpty()) return null
|
if (javaClasses.isEmpty()) return null
|
||||||
|
|
||||||
val (javaClass, provider) = selectFirstElementInClasspathOrder(javaClasses) { javaClass ->
|
val (javaClass, provider) = selectFirstElementInClasspathOrder(javaClasses) { javaClass ->
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ val JavaClass.classKind: ClassKind
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun JavaClass.hasMetadataAnnotation(): Boolean =
|
fun JavaClass.hasMetadataAnnotation(): Boolean =
|
||||||
annotations.any { it.classId?.asSingleFqName() == JvmAnnotationNames.METADATA_FQ_NAME }
|
annotations.any { it.isResolvedTo(JvmAnnotationNames.METADATA_FQ_NAME) }
|
||||||
|
|
||||||
internal fun Any?.createConstantOrError(session: FirSession): FirExpression {
|
internal fun Any?.createConstantOrError(session: FirSession): FirExpression {
|
||||||
return createConstantIfAny(session) ?: buildErrorExpression {
|
return createConstantIfAny(session) ?: buildErrorExpression {
|
||||||
|
|||||||
+10
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.name.FqName;
|
|||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.load.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.namedAnnotationArguments;
|
import static org.jetbrains.kotlin.load.java.structure.impl.JavaElementCollectionFromPsiArrayUtil.namedAnnotationArguments;
|
||||||
|
|
||||||
@@ -95,6 +96,15 @@ public class JavaAnnotationImpl extends JavaElementImpl<PsiAnnotation> implement
|
|||||||
return externalAnnotationManager.isExternalAnnotation(psi);
|
return externalAnnotationManager.isExternalAnnotation(psi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isResolvedTo(@NotNull FqName fqName) {
|
||||||
|
PsiJavaCodeReferenceElement referenceElement = getPsi().getNameReferenceElement();
|
||||||
|
if (referenceElement == null || !Objects.equals(referenceElement.getReferenceName(), fqName.shortNameOrSpecial().asString())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return getPsi().hasQualifiedName(fqName.asString());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFreshlySupportedTypeUseAnnotation() {
|
public boolean isFreshlySupportedTypeUseAnnotation() {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -54,6 +54,10 @@ interface JavaAnnotation : JavaElement {
|
|||||||
val isFreshlySupportedTypeUseAnnotation: Boolean
|
val isFreshlySupportedTypeUseAnnotation: Boolean
|
||||||
get() = false
|
get() = false
|
||||||
|
|
||||||
|
fun isResolvedTo(fqName: FqName) : Boolean {
|
||||||
|
return classId?.asSingleFqName() == fqName
|
||||||
|
}
|
||||||
|
|
||||||
fun resolve(): JavaClass?
|
fun resolve(): JavaClass?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user