Minor. Moved stuff from companion object to top-level.

This commit is contained in:
Evgeny Gerashchenko
2015-04-17 15:26:50 +03:00
parent 11020cacfd
commit 5eadf4db17
@@ -78,145 +78,143 @@ public class KotlinLineMarkerProvider : LineMarkerProvider {
collectOverridingAccessors(functions, result)
collectOverridingPropertiesAccessors(properties, result)
}
}
companion object {
public val OVERRIDING_MARK: Icon = AllIcons.Gutter.OverridingMethod
public val IMPLEMENTING_MARK: Icon = AllIcons.Gutter.ImplementingMethod
protected val OVERRIDDEN_MARK: Icon = AllIcons.Gutter.OverridenMethod
protected val IMPLEMENTED_MARK: Icon = AllIcons.Gutter.ImplementedMethod
private val OVERRIDING_MARK: Icon = AllIcons.Gutter.OverridingMethod
private val IMPLEMENTING_MARK: Icon = AllIcons.Gutter.ImplementingMethod
private val OVERRIDDEN_MARK: Icon = AllIcons.Gutter.OverridenMethod
private val IMPLEMENTED_MARK: Icon = AllIcons.Gutter.ImplementedMethod
private val SUBCLASSED_CLASS = MarkerType(
{ getPsiClass(it)?.let { MarkerType.getSubclassedClassTooltip(it) } },
object : LineMarkerNavigator() {
override fun browse(e: MouseEvent?, element: PsiElement?) {
getPsiClass(element)?.let { MarkerType.navigateToSubclassedClass(e, it) }
}
})
private val OVERRIDDEN_FUNCTION = MarkerType(
{ getPsiMethod(it)?.let { getOverriddenMethodTooltip(it) } },
object : LineMarkerNavigator() {
override fun browse(e: MouseEvent?, element: PsiElement?) {
getPsiMethod(element)?.let { navigateToOverriddenMethod(e, it) }
}
})
private val OVERRIDDEN_PROPERTY = MarkerType(
{ it?.let { getOverriddenPropertyTooltip(it.getParent() as JetProperty) } },
object : LineMarkerNavigator() {
override fun browse(e: MouseEvent?, element: PsiElement?) {
element?.let { navigateToPropertyOverriddenDeclarations(e, it.getParent() as JetProperty) }
}
})
private fun isImplementsAndNotOverrides(descriptor: CallableMemberDescriptor, overriddenMembers: Collection<CallableMemberDescriptor>): Boolean {
return descriptor.getModality() != Modality.ABSTRACT && overriddenMembers.all { it.getModality() == Modality.ABSTRACT }
}
private fun collectSuperDeclarationMarkers(declaration: JetDeclaration, result: MutableCollection<LineMarkerInfo<*>>) {
assert((declaration is JetNamedFunction || declaration is JetProperty))
if (!declaration.hasModifier(JetTokens.OVERRIDE_KEYWORD)) return
val resolveWithParents = resolveDeclarationWithParents(declaration)
if (resolveWithParents.overriddenDescriptors.isEmpty()) return
val implements = isImplementsAndNotOverrides(resolveWithParents.descriptor!!, resolveWithParents.overriddenDescriptors)
// NOTE: Don't store descriptors in line markers because line markers are not deleted while editing other files and this can prevent
// clearing the whole BindingTrace.
val marker = LineMarkerInfo(
declaration,
declaration.getTextOffset(),
if (implements) IMPLEMENTING_MARK else OVERRIDING_MARK,
Pass.UPDATE_OVERRIDEN_MARKERS,
SuperDeclarationMarkerTooltip,
SuperDeclarationMarkerNavigationHandler()
)
result.add(marker)
}
private fun collectInheritedClassMarker(element: JetClass, result: MutableCollection<LineMarkerInfo<*>>) {
val isTrait = element.isTrait()
if (!(isTrait || element.hasModifier(JetTokens.OPEN_KEYWORD) || element.hasModifier(JetTokens.ABSTRACT_KEYWORD))) {
return
private val SUBCLASSED_CLASS = MarkerType(
{ getPsiClass(it)?.let { MarkerType.getSubclassedClassTooltip(it) } },
object : LineMarkerNavigator() {
override fun browse(e: MouseEvent?, element: PsiElement?) {
getPsiClass(element)?.let { MarkerType.navigateToSubclassedClass(e, it) }
}
})
val lightClass = LightClassUtil.getPsiClass(element) ?: return
if (ClassInheritorsSearch.search(lightClass, false).findFirst() == null) return
val anchor = element.getNameIdentifier() ?: element
result.add(LineMarkerInfo(
anchor,
anchor.getTextOffset(),
if (isTrait) IMPLEMENTED_MARK else OVERRIDDEN_MARK,
Pass.UPDATE_OVERRIDEN_MARKERS,
SUBCLASSED_CLASS.getTooltip(),
SUBCLASSED_CLASS.getNavigationHandler()
))
}
private fun collectOverridingPropertiesAccessors(properties: Collection<JetProperty>, result: MutableCollection<LineMarkerInfo<*>>) {
val mappingToJava = Maps.newHashMap<PsiMethod, JetProperty>()
for (property in properties) {
if (property.isOverridable()) {
val accessorsPsiMethods = LightClassUtil.getLightClassPropertyMethods(property)
for (psiMethod in accessorsPsiMethods) {
mappingToJava.put(psiMethod, property)
}
}
private val OVERRIDDEN_FUNCTION = MarkerType(
{ getPsiMethod(it)?.let { getOverriddenMethodTooltip(it) } },
object : LineMarkerNavigator() {
override fun browse(e: MouseEvent?, element: PsiElement?) {
getPsiMethod(element)?.let { navigateToOverriddenMethod(e, it) }
}
})
val classes = collectContainingClasses(mappingToJava.keySet())
for (property in getOverriddenDeclarations(mappingToJava, classes)) {
ProgressManager.checkCanceled()
var anchor = property.getNameIdentifier()
if (anchor == null) anchor = property
result.add(LineMarkerInfo(
anchor,
anchor!!.getTextOffset(),
if (isImplemented(property)) IMPLEMENTED_MARK else OVERRIDDEN_MARK,
Pass.UPDATE_OVERRIDEN_MARKERS,
OVERRIDDEN_PROPERTY.getTooltip(),
OVERRIDDEN_PROPERTY.getNavigationHandler(),
GutterIconRenderer.Alignment.RIGHT
))
private val OVERRIDDEN_PROPERTY = MarkerType(
{ it?.let { getOverriddenPropertyTooltip(it.getParent() as JetProperty) } },
object : LineMarkerNavigator() {
override fun browse(e: MouseEvent?, element: PsiElement?) {
element?.let { navigateToPropertyOverriddenDeclarations(e, it.getParent() as JetProperty) }
}
}
})
private fun collectOverridingAccessors(functions: Collection<JetNamedFunction>, result: MutableCollection<LineMarkerInfo<*>>) {
val mappingToJava = Maps.newHashMap<PsiMethod, JetNamedFunction>()
for (function in functions) {
if (function.isOverridable()) {
val method = LightClassUtil.getLightClassMethod(function)
if (method != null) {
mappingToJava.put(method, function)
}
}
}
private fun isImplementsAndNotOverrides(descriptor: CallableMemberDescriptor, overriddenMembers: Collection<CallableMemberDescriptor>): Boolean {
return descriptor.getModality() != Modality.ABSTRACT && overriddenMembers.all { it.getModality() == Modality.ABSTRACT }
}
val classes = collectContainingClasses(mappingToJava.keySet())
private fun collectSuperDeclarationMarkers(declaration: JetDeclaration, result: MutableCollection<LineMarkerInfo<*>>) {
assert((declaration is JetNamedFunction || declaration is JetProperty))
for (function in getOverriddenDeclarations(mappingToJava, classes)) {
ProgressManager.checkCanceled()
if (!declaration.hasModifier(JetTokens.OVERRIDE_KEYWORD)) return
val anchor = function.getNameIdentifier() ?: function
val resolveWithParents = resolveDeclarationWithParents(declaration)
if (resolveWithParents.overriddenDescriptors.isEmpty()) return
result.add(LineMarkerInfo(
anchor,
anchor!!.getTextOffset(),
if (isImplemented(function)) IMPLEMENTED_MARK else OVERRIDDEN_MARK,
Pass.UPDATE_OVERRIDEN_MARKERS, OVERRIDDEN_FUNCTION.getTooltip(),
OVERRIDDEN_FUNCTION.getNavigationHandler(),
GutterIconRenderer.Alignment.RIGHT
))
val implements = isImplementsAndNotOverrides(resolveWithParents.descriptor!!, resolveWithParents.overriddenDescriptors)
// NOTE: Don't store descriptors in line markers because line markers are not deleted while editing other files and this can prevent
// clearing the whole BindingTrace.
val marker = LineMarkerInfo(
declaration,
declaration.getTextOffset(),
if (implements) IMPLEMENTING_MARK else OVERRIDING_MARK,
Pass.UPDATE_OVERRIDEN_MARKERS,
SuperDeclarationMarkerTooltip,
SuperDeclarationMarkerNavigationHandler()
)
result.add(marker)
}
private fun collectInheritedClassMarker(element: JetClass, result: MutableCollection<LineMarkerInfo<*>>) {
val isTrait = element.isTrait()
if (!(isTrait || element.hasModifier(JetTokens.OPEN_KEYWORD) || element.hasModifier(JetTokens.ABSTRACT_KEYWORD))) {
return
}
val lightClass = LightClassUtil.getPsiClass(element) ?: return
if (ClassInheritorsSearch.search(lightClass, false).findFirst() == null) return
val anchor = element.getNameIdentifier() ?: element
result.add(LineMarkerInfo(
anchor,
anchor.getTextOffset(),
if (isTrait) IMPLEMENTED_MARK else OVERRIDDEN_MARK,
Pass.UPDATE_OVERRIDEN_MARKERS,
SUBCLASSED_CLASS.getTooltip(),
SUBCLASSED_CLASS.getNavigationHandler()
))
}
private fun collectOverridingPropertiesAccessors(properties: Collection<JetProperty>, result: MutableCollection<LineMarkerInfo<*>>) {
val mappingToJava = Maps.newHashMap<PsiMethod, JetProperty>()
for (property in properties) {
if (property.isOverridable()) {
val accessorsPsiMethods = LightClassUtil.getLightClassPropertyMethods(property)
for (psiMethod in accessorsPsiMethods) {
mappingToJava.put(psiMethod, property)
}
}
}
}
val classes = collectContainingClasses(mappingToJava.keySet())
for (property in getOverriddenDeclarations(mappingToJava, classes)) {
ProgressManager.checkCanceled()
var anchor = property.getNameIdentifier()
if (anchor == null) anchor = property
result.add(LineMarkerInfo(
anchor,
anchor!!.getTextOffset(),
if (isImplemented(property)) IMPLEMENTED_MARK else OVERRIDDEN_MARK,
Pass.UPDATE_OVERRIDEN_MARKERS,
OVERRIDDEN_PROPERTY.getTooltip(),
OVERRIDDEN_PROPERTY.getNavigationHandler(),
GutterIconRenderer.Alignment.RIGHT
))
}
}
private fun collectOverridingAccessors(functions: Collection<JetNamedFunction>, result: MutableCollection<LineMarkerInfo<*>>) {
val mappingToJava = Maps.newHashMap<PsiMethod, JetNamedFunction>()
for (function in functions) {
if (function.isOverridable()) {
val method = LightClassUtil.getLightClassMethod(function)
if (method != null) {
mappingToJava.put(method, function)
}
}
}
val classes = collectContainingClasses(mappingToJava.keySet())
for (function in getOverriddenDeclarations(mappingToJava, classes)) {
ProgressManager.checkCanceled()
val anchor = function.getNameIdentifier() ?: function
result.add(LineMarkerInfo(
anchor,
anchor!!.getTextOffset(),
if (isImplemented(function)) IMPLEMENTED_MARK else OVERRIDDEN_MARK,
Pass.UPDATE_OVERRIDEN_MARKERS, OVERRIDDEN_FUNCTION.getTooltip(),
OVERRIDDEN_FUNCTION.getNavigationHandler(),
GutterIconRenderer.Alignment.RIGHT
))
}
}