From 41775bf8a0686a272829897cf8acb6c677a8ba60 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 15 Oct 2015 22:05:32 +0300 Subject: [PATCH] Code refactoring --- .../kotlin/resolve/OverridingUtil.java | 2 +- .../kotlin/resolve/VisibilityUtil.java | 37 ------------------ .../kotlin/resolve/VisibilityUtil.kt | 38 +++++++++++++++++++ .../ChangeMemberFunctionSignatureFix.kt | 13 +------ 4 files changed, 41 insertions(+), 49 deletions(-) delete mode 100644 core/descriptors/src/org/jetbrains/kotlin/resolve/VisibilityUtil.java create mode 100644 core/descriptors/src/org/jetbrains/kotlin/resolve/VisibilityUtil.kt diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/OverridingUtil.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/OverridingUtil.java index 1da08be46fa..140247347d5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/OverridingUtil.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/OverridingUtil.java @@ -286,7 +286,7 @@ public class OverridingUtil { ) { Queue fromSuperQueue = new LinkedList(notOverridden); while (!fromSuperQueue.isEmpty()) { - CallableMemberDescriptor notOverriddenFromSuper = VisibilityUtil.findMemberWithMaxVisibility(fromSuperQueue); + CallableMemberDescriptor notOverriddenFromSuper = VisibilityUtilKt.findMemberWithMaxVisibility(fromSuperQueue); Collection overridables = extractMembersOverridableInBothWays(notOverriddenFromSuper, fromSuperQueue, sink); createAndBindFakeOverride(overridables, current, sink); diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/VisibilityUtil.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/VisibilityUtil.java deleted file mode 100644 index 8f18d96a6ee..00000000000 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/VisibilityUtil.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.resolve; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor; -import org.jetbrains.kotlin.descriptors.Visibilities; - -import java.util.Queue; - -public class VisibilityUtil { - @NotNull - public static CallableMemberDescriptor findMemberWithMaxVisibility(@NotNull Queue descriptors) { - CallableMemberDescriptor descriptor = descriptors.element(); - for (CallableMemberDescriptor candidate : descriptors) { - Integer result = Visibilities.compare(descriptor.getVisibility(), candidate.getVisibility()); - if (result != null && result < 0) { - descriptor = candidate; - } - } - return descriptor; - } -} diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/VisibilityUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/VisibilityUtil.kt new file mode 100644 index 00000000000..cdb12513b00 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/VisibilityUtil.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.resolve + +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.Visibilities + +fun findMemberWithMaxVisibility(descriptors: Collection): CallableMemberDescriptor { + assert(descriptors.isNotEmpty()) + + var descriptor: CallableMemberDescriptor? = null + for (candidate in descriptors) { + if (descriptor == null) { + descriptor = candidate + continue + } + + val result = Visibilities.compare(descriptor.visibility, candidate.visibility) + if (result != null && result < 0) { + descriptor = candidate + } + } + return descriptor!! +} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt index 2f86cfc2750..ff28a2492bb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.google.common.collect.Lists -import com.google.common.collect.Queues import com.intellij.codeInsight.hint.HintManager import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.command.CommandProcessor @@ -42,7 +41,7 @@ import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.NameShortness import org.jetbrains.kotlin.resolve.FunctionDescriptorUtil -import org.jetbrains.kotlin.resolve.VisibilityUtil +import org.jetbrains.kotlin.resolve.findMemberWithMaxVisibility import org.jetbrains.kotlin.types.checker.JetTypeChecker import org.jetbrains.kotlin.types.typeUtil.supertypes import org.jetbrains.kotlin.utils.addToStdlib.check @@ -127,7 +126,7 @@ class ChangeMemberFunctionSignatureFix private constructor( superFunction.copy( function.containingDeclaration, Modality.OPEN, - getVisibility(function, superFunction), + findMemberWithMaxVisibility(listOf(superFunction, function)).visibility, CallableMemberDescriptor.Kind.DELEGATION, /* copyOverrides = */ true), newParameters) @@ -136,14 +135,6 @@ class ChangeMemberFunctionSignatureFix private constructor( return Signature(newFunction) } - /** - * Returns new visibility for 'function' modified to override 'superFunction'. - */ - private fun getVisibility(function: FunctionDescriptor, superFunction: FunctionDescriptor): Visibility { - val descriptors = Queues.newArrayDeque(listOf(superFunction, function)) - return VisibilityUtil.findMemberWithMaxVisibility(descriptors).visibility - } - /** * Match function's parameters with super function's parameters using parameterChooser. * Doesn't have to preserve ordering, parameter names or types.