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