[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.symbols.impl.*
|
||||
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.structure.impl.JavaClassImpl
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -52,6 +53,7 @@ internal class LLFirCombinedJavaSymbolProvider private constructor(
|
||||
|
||||
private fun computeClassLikeSymbolByClassId(classId: ClassId): FirRegularClassSymbol? {
|
||||
val javaClasses = javaClassFinder.findClasses(classId)
|
||||
.filterNot { javaClass -> javaClass.annotations.any { it.isResolvedTo(JvmAnnotationNames.METADATA_FQ_NAME) } }
|
||||
if (javaClasses.isEmpty()) return null
|
||||
|
||||
val (javaClass, provider) = selectFirstElementInClasspathOrder(javaClasses) { javaClass ->
|
||||
|
||||
@@ -53,7 +53,7 @@ val JavaClass.classKind: ClassKind
|
||||
}
|
||||
|
||||
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 {
|
||||
return createConstantIfAny(session) ?: buildErrorExpression {
|
||||
|
||||
+10
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@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
|
||||
public boolean isFreshlySupportedTypeUseAnnotation() {
|
||||
return false;
|
||||
|
||||
@@ -54,6 +54,10 @@ interface JavaAnnotation : JavaElement {
|
||||
val isFreshlySupportedTypeUseAnnotation: Boolean
|
||||
get() = false
|
||||
|
||||
fun isResolvedTo(fqName: FqName) : Boolean {
|
||||
return classId?.asSingleFqName() == fqName
|
||||
}
|
||||
|
||||
fun resolve(): JavaClass?
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user