[FE] Add flag to java model to distinguish source java classes from binaries

This commit is contained in:
Dmitriy Novozhilov
2022-05-26 12:17:20 +03:00
committed by teamcity
parent 09ff6303cc
commit 26df9d74e8
19 changed files with 68 additions and 6 deletions
@@ -125,6 +125,9 @@ class MockKotlinClassifier(override val classId: ClassId,
cache.createMockKotlinClassifier(nestedClassOrObject, ktFile, classId.createNestedClassId(nestedClassOrObject.nameAsSafeName)) cache.createMockKotlinClassifier(nestedClassOrObject, ktFile, classId.createNestedClassId(nestedClassOrObject.nameAsSafeName))
} ?: emptyList() } ?: emptyList()
override val isFromSource: Boolean
get() = true
override val lightClassOriginKind override val lightClassOriginKind
get() = LightClassOriginKind.SOURCE get() = LightClassOriginKind.SOURCE
@@ -198,6 +201,7 @@ class MockKotlinField(private val psiField: PsiField) : JavaField {
override val type get() = shouldNotBeCalled() override val type get() = shouldNotBeCalled()
override val hasConstantNotNullInitializer get() = shouldNotBeCalled() override val hasConstantNotNullInitializer get() = shouldNotBeCalled()
override fun findAnnotation(fqName: FqName) = shouldNotBeCalled() override fun findAnnotation(fqName: FqName) = shouldNotBeCalled()
override val isFromSource: Boolean get() = shouldNotBeCalled()
} }
private fun KtClassOrObject.computeClassId(): ClassId? = private fun KtClassOrObject.computeClassId(): ClassId? =
@@ -28,6 +28,9 @@ abstract class SymbolBasedClassifier<out T : Element>(
javac: JavacWrapper javac: JavacWrapper
) : SymbolBasedElement<T>(element, javac), JavaClassifier, JavaAnnotationOwner { ) : SymbolBasedElement<T>(element, javac), JavaClassifier, JavaAnnotationOwner {
override val isFromSource: Boolean
get() = true
override val annotations: Collection<JavaAnnotation> override val annotations: Collection<JavaAnnotation>
get() = element.annotationMirrors.map { SymbolBasedAnnotation(it, javac) } get() = element.annotationMirrors.map { SymbolBasedAnnotation(it, javac) }
@@ -31,6 +31,9 @@ abstract class SymbolBasedMember<out T : Element>(
javac: JavacWrapper javac: JavacWrapper
) : SymbolBasedElement<T>(element, javac), JavaMember { ) : SymbolBasedElement<T>(element, javac), JavaMember {
override val isFromSource: Boolean
get() = true
override val annotations: Collection<JavaAnnotation> override val annotations: Collection<JavaAnnotation>
get() = element.annotationMirrors.map { SymbolBasedAnnotation(it, javac) } get() = element.annotationMirrors.map { SymbolBasedAnnotation(it, javac) }
@@ -43,6 +43,9 @@ class SymbolBasedValueParameter(
override val name: Name override val name: Name
get() = Name.identifier(elementName) get() = Name.identifier(elementName)
override val isFromSource: Boolean
get() = true
override val type: JavaType override val type: JavaType
get() = SymbolBasedType.create(element.asType(), javac) get() = SymbolBasedType.create(element.asType(), javac)
@@ -40,6 +40,9 @@ class TreeBasedClass(
override val outerClass: JavaClass? override val outerClass: JavaClass?
) : TreeBasedElement<JCTree.JCClassDecl>(tree, compilationUnit, javac), JavaClassWithClassId { ) : TreeBasedElement<JCTree.JCClassDecl>(tree, compilationUnit, javac), JavaClassWithClassId {
override val isFromSource: Boolean
get() = true
override val name: Name override val name: Name
get() = Name.identifier(tree.simpleName.toString()) get() = Name.identifier(tree.simpleName.toString())
@@ -30,6 +30,9 @@ abstract class TreeBasedMember<out T : JCTree>(
javac: JavacWrapper javac: JavacWrapper
) : TreeBasedElement<T>(tree, compilationUnit, javac), JavaMember { ) : TreeBasedElement<T>(tree, compilationUnit, javac), JavaMember {
override val isFromSource: Boolean
get() = true
override val isDeprecatedInJavaDoc: Boolean override val isDeprecatedInJavaDoc: Boolean
get() = javac.isDeprecatedInJavaDoc(tree, compilationUnit) get() = javac.isDeprecatedInJavaDoc(tree, compilationUnit)
@@ -39,6 +42,6 @@ abstract class TreeBasedMember<out T : JCTree>(
override fun findAnnotation(fqName: FqName) = override fun findAnnotation(fqName: FqName) =
annotations annotations
.filter { it.annotation.annotationType.toString().endsWith(fqName.shortName().asString()) } .filter { it.annotation.annotationType.toString().endsWith(fqName.shortName().asString()) }
.find { it.classId?.asSingleFqName() == fqName } .find { it.classId.asSingleFqName() == fqName }
} }
@@ -33,6 +33,9 @@ class TreeBasedTypeParameter(
private val containingElement: JavaElement private val containingElement: JavaElement
) : TreeBasedElement<JCTree.JCTypeParameter>(tree, compilationUnit, javac), JavaTypeParameter { ) : TreeBasedElement<JCTree.JCTypeParameter>(tree, compilationUnit, javac), JavaTypeParameter {
override val isFromSource: Boolean
get() = true
override val name: Name override val name: Name
get() = Name.identifier(tree.name.toString()) get() = Name.identifier(tree.name.toString())
@@ -40,7 +40,7 @@ class TreeBasedValueParameter(
override fun findAnnotation(fqName: FqName) = override fun findAnnotation(fqName: FqName) =
annotations annotations
.filter { it.annotation.annotationType.toString().endsWith(fqName.shortName().asString()) } .filter { it.annotation.annotationType.toString().endsWith(fqName.shortName().asString()) }
.find { it.classId?.asSingleFqName() == fqName } .find { it.classId.asSingleFqName() == fqName }
override val isDeprecatedInJavaDoc: Boolean override val isDeprecatedInJavaDoc: Boolean
get() = javac.isDeprecatedInJavaDoc(tree, compilationUnit) get() = javac.isDeprecatedInJavaDoc(tree, compilationUnit)
@@ -48,6 +48,9 @@ class TreeBasedValueParameter(
override val name: Name override val name: Name
get() = Name.identifier(tree.name.toString()) get() = Name.identifier(tree.name.toString())
override val isFromSource: Boolean
get() = true
override val type: JavaType override val type: JavaType
get() = TreeBasedType.create(tree.getType(), compilationUnit, javac, annotations, containingElement) get() = TreeBasedType.create(tree.getType(), compilationUnit, javac, annotations, containingElement)
@@ -41,6 +41,11 @@ public abstract class JavaClassifierImpl<Psi extends PsiClass> extends JavaEleme
} }
} }
@Override
public final boolean isFromSource() {
return true;
}
@NotNull @NotNull
@Override @Override
public Collection<JavaAnnotation> getAnnotations() { public Collection<JavaAnnotation> getAnnotations() {
@@ -51,6 +51,11 @@ public abstract class JavaMemberImpl<Psi extends PsiMember> extends JavaElementI
return Name.identifier(name); return Name.identifier(name);
} }
@Override
public final boolean isFromSource() {
return true;
}
@NotNull @NotNull
@Override @Override
public JavaClass getContainingClass() { public JavaClass getContainingClass() {
@@ -58,6 +58,11 @@ public class JavaValueParameterImpl extends JavaElementImpl<PsiParameter>
return false; return false;
} }
@Override
public boolean isFromSource() {
return true;
}
@NotNull @NotNull
@Override @Override
public Visibility getVisibility() { public Visibility getVisibility() {
@@ -45,6 +45,8 @@ class BinaryJavaClass(
override lateinit var typeParameters: List<JavaTypeParameter> override lateinit var typeParameters: List<JavaTypeParameter>
override lateinit var supertypes: List<JavaClassifierType> override lateinit var supertypes: List<JavaClassifierType>
override val isFromSource: Boolean get() = false
override val methods = arrayListOf<JavaMethod>() override val methods = arrayListOf<JavaMethod>()
override val fields = arrayListOf<JavaField>() override val fields = arrayListOf<JavaField>()
override val constructors = arrayListOf<JavaConstructor>() override val constructors = arrayListOf<JavaConstructor>()
@@ -37,6 +37,7 @@ abstract class BinaryJavaMethodBase(
) : JavaMember, BinaryJavaModifierListOwner, MutableJavaAnnotationOwner { ) : JavaMember, BinaryJavaModifierListOwner, MutableJavaAnnotationOwner {
override val annotations: MutableCollection<JavaAnnotation> = SmartList() override val annotations: MutableCollection<JavaAnnotation> = SmartList()
override val annotationsByFqName by buildLazyValueForMap() override val annotationsByFqName by buildLazyValueForMap()
override val isFromSource: Boolean get() = false
companion object { companion object {
private class MethodInfo( private class MethodInfo(
@@ -33,6 +33,7 @@ class BinaryJavaField(
) : JavaField, BinaryJavaModifierListOwner, MutableJavaAnnotationOwner { ) : JavaField, BinaryJavaModifierListOwner, MutableJavaAnnotationOwner {
override val annotations: MutableCollection<JavaAnnotation> = SmartList() override val annotations: MutableCollection<JavaAnnotation> = SmartList()
override val annotationsByFqName by buildLazyValueForMap() override val annotationsByFqName by buildLazyValueForMap()
override val isFromSource: Boolean get() = false
override val hasConstantNotNullInitializer: Boolean override val hasConstantNotNullInitializer: Boolean
get() = initializerValue != null get() = initializerValue != null
@@ -46,6 +47,8 @@ class BinaryJavaTypeParameter(
) : JavaTypeParameter, ListBasedJavaAnnotationOwner, MutableJavaAnnotationOwner { ) : JavaTypeParameter, ListBasedJavaAnnotationOwner, MutableJavaAnnotationOwner {
override val annotations: MutableCollection<JavaAnnotation> = SmartList() override val annotations: MutableCollection<JavaAnnotation> = SmartList()
override val isDeprecatedInJavaDoc = false override val isDeprecatedInJavaDoc = false
override val isFromSource: Boolean
get() = false
} }
class BinaryJavaValueParameter( class BinaryJavaValueParameter(
@@ -57,6 +60,9 @@ class BinaryJavaValueParameter(
override var name: Name? = null override var name: Name? = null
override val isFromSource: Boolean
get() = false
internal fun updateName(newName: Name) { internal fun updateName(newName: Name) {
assert(name == null) { "Parameter can't have two names: $name and $newName" } assert(name == null) { "Parameter can't have two names: $name and $newName" }
name = newName name = newName
@@ -69,6 +75,8 @@ class BinaryJavaRecordComponent(
override val type: JavaType, override val type: JavaType,
override val isVararg: Boolean, override val isVararg: Boolean,
) : JavaRecordComponent, BinaryJavaModifierListOwner { ) : JavaRecordComponent, BinaryJavaModifierListOwner {
override val isFromSource: Boolean get() = false
override val annotations: Collection<JavaAnnotation> override val annotations: Collection<JavaAnnotation>
get() = emptyList() get() = emptyList()
@@ -25,6 +25,7 @@ interface JavaElement
interface JavaNamedElement : JavaElement { interface JavaNamedElement : JavaElement {
val name: Name val name: Name
val isFromSource: Boolean
} }
interface JavaAnnotationOwner : JavaElement { interface JavaAnnotationOwner : JavaElement {
@@ -145,6 +146,7 @@ interface JavaValueParameter : JavaAnnotationOwner {
val name: Name? val name: Name?
val type: JavaType val type: JavaType
val isVararg: Boolean val isVararg: Boolean
val isFromSource: Boolean
} }
interface JavaRecordComponent : JavaMember { interface JavaRecordComponent : JavaMember {
@@ -33,6 +33,8 @@ class ReflectJavaClass(
override val modifiers: Int get() = klass.modifiers override val modifiers: Int get() = klass.modifiers
override val isFromSource: Boolean get() = false
override val innerClassNames: List<Name> override val innerClassNames: List<Name>
get() = klass.declaredClasses get() = klass.declaredClasses
.asSequence() .asSequence()
@@ -28,6 +28,8 @@ import java.lang.reflect.Type
abstract class ReflectJavaMember : ReflectJavaElement(), ReflectJavaAnnotationOwner, ReflectJavaModifierListOwner, JavaMember { abstract class ReflectJavaMember : ReflectJavaElement(), ReflectJavaAnnotationOwner, ReflectJavaModifierListOwner, JavaMember {
abstract val member: Member abstract val member: Member
final override val isFromSource: Boolean get() = false
override val element: AnnotatedElement get() = member as AnnotatedElement override val element: AnnotatedElement get() = member as AnnotatedElement
override val modifiers: Int get() = member.modifiers override val modifiers: Int get() = member.modifiers
@@ -31,6 +31,8 @@ class ReflectJavaTypeParameter(
return bounds return bounds
} }
override val isFromSource: Boolean get() = false
@Suppress("USELESS_CAST") @Suppress("USELESS_CAST")
override val element: AnnotatedElement? override val element: AnnotatedElement?
// TypeVariable is AnnotatedElement only in JDK8 // TypeVariable is AnnotatedElement only in JDK8
@@ -38,5 +38,8 @@ class ReflectJavaValueParameter(
override val name: Name? override val name: Name?
get() = reflectName?.let(Name::guessByFirstCharacter) get() = reflectName?.let(Name::guessByFirstCharacter)
override val isFromSource: Boolean
get() = false
override fun toString() = this::class.java.name + ": " + (if (isVararg) "vararg " else "") + name + ": " + type override fun toString() = this::class.java.name + ": " + (if (isVararg) "vararg " else "") + name + ": " + type
} }