From cae0388a578a428f2317c620e8e78239f4d79dd6 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 16 Oct 2015 17:15:45 +0300 Subject: [PATCH] Code cleanup: data deprecations and some effective visibility stuff --- .../Conditional.kt | 2 +- .../Evaluator.kt | 10 ++--- .../instructions/eval/accessInstructions.kt | 12 +++++- .../deserialization/ClassDeserializer.kt | 8 ++-- .../idea/caches/resolve/IdeaModuleInfos.kt | 43 +++++++++++-------- .../jps/incremental/IncrementalCacheImpl.kt | 7 ++- .../android/synthetic/res/androidResources.kt | 7 ++- 7 files changed, 59 insertions(+), 30 deletions(-) diff --git a/compiler/conditional-preprocessor/src/org.jetbrains.kotlin.preprocessor/Conditional.kt b/compiler/conditional-preprocessor/src/org.jetbrains.kotlin.preprocessor/Conditional.kt index ae2fdea4568..0038a28fcfc 100644 --- a/compiler/conditional-preprocessor/src/org.jetbrains.kotlin.preprocessor/Conditional.kt +++ b/compiler/conditional-preprocessor/src/org.jetbrains.kotlin.preprocessor/Conditional.kt @@ -34,7 +34,7 @@ interface Conditional { }) } - data class JsVersion(): PlatformVersion { + data class JsVersion(val version: Int = 5): PlatformVersion { companion object : Parser("JsVersion", parse = { JsVersion() }) } diff --git a/compiler/conditional-preprocessor/src/org.jetbrains.kotlin.preprocessor/Evaluator.kt b/compiler/conditional-preprocessor/src/org.jetbrains.kotlin.preprocessor/Evaluator.kt index ac918f81ea8..404fdcb8a5e 100644 --- a/compiler/conditional-preprocessor/src/org.jetbrains.kotlin.preprocessor/Evaluator.kt +++ b/compiler/conditional-preprocessor/src/org.jetbrains.kotlin.preprocessor/Evaluator.kt @@ -18,22 +18,22 @@ package org.jetbrains.kotlin.preprocessor interface Evaluator : (List) -> Boolean -abstract class PlatformEvaluator : Evaluator { - final override fun invoke(conditions: List): Boolean = evaluate(conditions.filterIsInstance()) +interface PlatformEvaluator : Evaluator { + override fun invoke(conditions: List): Boolean = evaluate(conditions.filterIsInstance()) open fun evaluate(conditions: List): Boolean = conditions.isEmpty() || conditions.any { match(it) } - abstract fun match(platformCondition: Conditional.PlatformVersion): Boolean + fun match(platformCondition: Conditional.PlatformVersion): Boolean } -data class JvmPlatformEvaluator(val version: Int): PlatformEvaluator() { +data class JvmPlatformEvaluator(val version: Int): PlatformEvaluator { override fun match(platformCondition: Conditional.PlatformVersion) = platformCondition is Conditional.JvmVersion && version in platformCondition.versionRange override fun toString() = "platform: JVM$version" } -data class JsPlatformEvaluator(val ecmaScriptVersion: Int = 5): PlatformEvaluator() { +data class JsPlatformEvaluator(val ecmaScriptVersion: Int = 5): PlatformEvaluator { override fun match(platformCondition: Conditional.PlatformVersion) = platformCondition is Conditional.JsVersion override fun toString() = "platform: JS" diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/instructions/eval/accessInstructions.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/instructions/eval/accessInstructions.kt index 2312e875e70..5a3cb9ceb0e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/instructions/eval/accessInstructions.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/pseudocode/instructions/eval/accessInstructions.kt @@ -26,8 +26,16 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue public sealed class AccessTarget { - public data class Declaration(val descriptor: VariableDescriptor): AccessTarget() - public data class Call(val resolvedCall: ResolvedCall<*>): AccessTarget() + public class Declaration(val descriptor: VariableDescriptor): AccessTarget() { + override fun equals(other: Any?) = other is Declaration && descriptor == other.descriptor + + override fun hashCode() = descriptor.hashCode() + } + public class Call(val resolvedCall: ResolvedCall<*>): AccessTarget() { + override fun equals(other: Any?) = other is Call && resolvedCall == other.resolvedCall + + override fun hashCode() = resolvedCall.hashCode() + } public object BlackBox: AccessTarget() } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ClassDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ClassDeserializer.kt index 73cbe9ba1f8..6cbb3270a3f 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ClassDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ClassDeserializer.kt @@ -62,8 +62,10 @@ public class ClassDeserializer(private val components: DeserializationComponents return DeserializedClassDescriptor(outerContext, classProto, nameResolver, sourceElement) } - private data class ClassKey(val classId: ClassId, classDataWithSource: ClassDataWithSource?) { - // This property is not declared in the constructor because it shouldn't participate in equals/hashCode - val classDataWithSource: ClassDataWithSource? = classDataWithSource + private class ClassKey(val classId: ClassId, val classDataWithSource: ClassDataWithSource?) { + // classDataWithSource *intentionally* not used in equals() / hashCode() + override fun equals(other: Any?) = other is ClassKey && classId == other.classId + + override fun hashCode() = classId.hashCode() } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt index 7a610b32f8c..a5145317b10 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt @@ -33,8 +33,8 @@ import java.util.* public val LIBRARY_NAME_PREFIX: String = "library " -public abstract class IdeaModuleInfo : ModuleInfo { - abstract fun contentScope(): GlobalSearchScope +public interface IdeaModuleInfo : ModuleInfo { + fun contentScope(): GlobalSearchScope } private fun orderEntryToModuleInfo(project: Project, orderEntry: OrderEntry, productionOnly: Boolean): List { @@ -80,14 +80,14 @@ fun ideaModelDependencies(module: Module, productionOnly: Boolean): List") - override fun contentScope() = ModuleProductionSourceScope(module) + override fun contentScope(): GlobalSearchScope = ModuleProductionSourceScope(module) override fun dependencies() = module.cached(CachedValueProvider { CachedValueProvider.Result( @@ -99,10 +99,10 @@ public data class ModuleProductionSourceInfo(override val module: Module) : Modu } //TODO: (module refactoring) do not create ModuleTestSourceInfo when there are no test roots for module -public data class ModuleTestSourceInfo(override val module: Module) : ModuleSourceInfo() { +public data class ModuleTestSourceInfo(override val module: Module) : ModuleSourceInfo { override val name = Name.special("") - override fun contentScope() = ModuleTestSourceScope(module) + override fun contentScope(): GlobalSearchScope = ModuleTestSourceScope(module) override fun dependencies() = module.cached(CachedValueProvider { CachedValueProvider.Result( @@ -148,10 +148,10 @@ private class ModuleTestSourceScope(module: Module) : ModuleSourceScope(module) override fun contains(file: VirtualFile) = moduleFileIndex.isInTestSourceContent(file) } -public data class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo() { +public data class LibraryInfo(val project: Project, val library: Library) : IdeaModuleInfo { override val name: Name = Name.special("<$LIBRARY_NAME_PREFIX${library.getName()}>") - override fun contentScope() = LibraryWithoutSourceScope(project, library) + override fun contentScope(): GlobalSearchScope = LibraryWithoutSourceScope(project, library) override val isLibrary: Boolean get() = true @@ -171,7 +171,7 @@ public data class LibraryInfo(val project: Project, val library: Library) : Idea override fun toString() = "LibraryInfo(libraryName=${library.getName()})" } -internal data class LibrarySourceInfo(val project: Project, val library: Library) : IdeaModuleInfo() { +internal data class LibrarySourceInfo(val project: Project, val library: Library) : IdeaModuleInfo { override val name: Name = Name.special("") override fun contentScope() = GlobalSearchScope.EMPTY_SCOPE @@ -187,15 +187,15 @@ internal data class LibrarySourceInfo(val project: Project, val library: Library } //TODO: (module refactoring) there should be separate SdkSourceInfo but there are no kotlin source in existing sdks for now :) -public data class SdkInfo(val project: Project, val sdk: Sdk) : IdeaModuleInfo() { +public data class SdkInfo(val project: Project, val sdk: Sdk) : IdeaModuleInfo { override val name: Name = Name.special("<$LIBRARY_NAME_PREFIX${sdk.getName()}>") - override fun contentScope() = SdkScope(project, sdk) + override fun contentScope(): GlobalSearchScope = SdkScope(project, sdk) override fun dependencies(): List = listOf(this) } -internal object NotUnderContentRootModuleInfo : IdeaModuleInfo() { +internal object NotUnderContentRootModuleInfo : IdeaModuleInfo { override val name: Name = Name.special("") override fun contentScope() = GlobalSearchScope.EMPTY_SCOPE @@ -204,12 +204,21 @@ internal object NotUnderContentRootModuleInfo : IdeaModuleInfo() { override fun dependencies(): List = listOf(this) } -private data class LibraryWithoutSourceScope(project: Project, private val library: Library) : +private class LibraryWithoutSourceScope(project: Project, private val library: Library) : LibraryScopeBase(project, library.getFiles(OrderRootType.CLASSES), arrayOf()) { + + override fun equals(other: Any?) = other is LibraryWithoutSourceScope && library == other.library + + override fun hashCode() = library.hashCode() } //TODO: (module refactoring) android sdk has modified scope -private data class SdkScope(project: Project, private val sdk: Sdk) : - LibraryScopeBase(project, sdk.getRootProvider().getFiles(OrderRootType.CLASSES), arrayOf()) +private class SdkScope(project: Project, private val sdk: Sdk) : + LibraryScopeBase(project, sdk.getRootProvider().getFiles(OrderRootType.CLASSES), arrayOf()) { + + override fun equals(other: Any?) = other is SdkScope && sdk == other.sdk + + override fun hashCode() = sdk.hashCode() +} internal fun IdeaModuleInfo.isLibraryClasses() = this is SdkInfo || this is LibraryInfo diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index ff37c5b5d2a..5973ba0c983 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -675,9 +675,14 @@ data class ChangesInfo( public fun BuildDataPaths.getKotlinCacheVersion(target: BuildTarget<*>): CacheFormatVersion = CacheFormatVersion(getTargetDataRoot(target)) -private data class KotlinIncrementalStorageProvider( +private class KotlinIncrementalStorageProvider( private val target: ModuleBuildTarget ) : StorageProvider() { + + override fun equals(other: Any?) = other is KotlinIncrementalStorageProvider && target == other.target + + override fun hashCode() = target.hashCode() + override fun createStorage(targetDataDir: File): IncrementalCacheImpl = IncrementalCacheImpl(targetDataDir, target) } diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/android/synthetic/res/androidResources.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/android/synthetic/res/androidResources.kt index 58dcd121f43..1945b34aba4 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/android/synthetic/res/androidResources.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/android/synthetic/res/androidResources.kt @@ -18,7 +18,12 @@ package org.jetbrains.kotlin.android.synthetic.res import org.jetbrains.kotlin.android.synthetic.AndroidConst -public data class AndroidModuleInfo(val applicationPackage: String, resDirectories: List) { +public class AndroidModuleInfo(val applicationPackage: String, resDirectories: List) { + + override fun equals(other: Any?) = other is AndroidModuleInfo && applicationPackage == other.applicationPackage + + override fun hashCode() = applicationPackage.hashCode() + val resDirectories = resDirectories.sorted() }