in psi/src/com/intellij/r/psi/skeleton/RSkeletonFileStubBuilder.kt [33:84]
override fun buildStubTree(fileContent: FileContent): Stub {
val skeletonFileStub = RSkeletonFileStub()
val content = fileContent.getContent()
val binPackage: LibrarySummary.RLibraryPackage = ByteArrayInputStream(content).use {
LibrarySummary.RLibraryPackage.parseFrom(it)
}
for (symbol in binPackage.symbolsList) {
when (symbol.representationCase) {
RepresentationCase.S4CLASSREPRESENTATION -> {
val s4ClassRepresentation = symbol.s4ClassRepresentation
RSkeletonCallExpressionStub(skeletonFileStub,
R_SKELETON_CALL_EXPRESSION,
RS4ClassInfo(symbol.name,
s4ClassRepresentation.packageName,
s4ClassRepresentation.slotsList.map { RS4ClassSlot(it.name, it.type, it.declarationClass)
},
s4ClassRepresentation.superClassesList.map {
RS4SuperClass(it.name, it.distance) },
s4ClassRepresentation.isVirtual
)
)
}
else -> {
val functionRepresentation = symbol.functionRepresentation
val (s4GenericOrMethodInfo, extraNamedArguments) =
when (symbol.type) {
Type.S4GENERIC -> {
val signature = functionRepresentation.s4GenericSignature.let { RS4GenericSignature(it.parametersList, it.valueClassesList, false) }
RS4GenericInfo(symbol.name, signature) to FunctionRepresentation.ExtraNamedArguments.getDefaultInstance()
}
Type.S4METHOD -> {
val methodsParameters = functionRepresentation.s4ParametersInfo.s4MethodParametersList.map {
RS4MethodParameterInfo(it.name, it.type)
}
RS4RawMethodInfo(symbol.name, methodsParameters) to FunctionRepresentation.ExtraNamedArguments.getDefaultInstance()
}
else -> null to functionRepresentation.extraNamedArguments
}
RSkeletonAssignmentStub(skeletonFileStub,
R_SKELETON_ASSIGNMENT_STATEMENT,
symbol.name,
symbol.type,
functionRepresentation.parameters,
symbol.exported,
RExtraNamedArgumentsInfo(extraNamedArguments.argNamesList,
extraNamedArguments.funArgNamesList),
s4GenericOrMethodInfo)
}
}
}
return skeletonFileStub
}