Refactoring: move IC classes into separate package
This commit is contained in:
+2
-2
@@ -26,8 +26,8 @@ import org.jetbrains.kotlin.com.intellij.openapi.util.io.ZipFileCache
|
|||||||
import org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.ZipHandler
|
import org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.ZipHandler
|
||||||
import org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
import org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistry
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistry
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistryProvider
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
||||||
import org.jetbrains.kotlin.gradle.tasks.incremental.BuildCacheStorage
|
import org.jetbrains.kotlin.gradle.tasks.incremental.BuildCacheStorage
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.gradle.internal.Kapt2KotlinGradleSubplugin
|
|||||||
import org.jetbrains.kotlin.gradle.internal.initKapt
|
import org.jetbrains.kotlin.gradle.internal.initKapt
|
||||||
import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper
|
import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper
|
||||||
import org.jetbrains.kotlin.gradle.tasks.*
|
import org.jetbrains.kotlin.gradle.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.tasks.incremental.android.ArtifactDifferenceRegistryProviderAndroidWrapper
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProviderAndroidWrapper
|
||||||
import org.jetbrains.kotlin.gradle.tasks.incremental.configureMultiProjectIncrementalCompilation
|
import org.jetbrains.kotlin.gradle.tasks.incremental.configureMultiProjectIncrementalCompilation
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
|
|||||||
+1
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.gradle.dsl.*
|
|||||||
import org.jetbrains.kotlin.incremental.*
|
import org.jetbrains.kotlin.incremental.*
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
||||||
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
||||||
|
|||||||
+20
-3
@@ -1,9 +1,26 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks.incremental
|
/*
|
||||||
|
* Copyright 2010-2016 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.incremental
|
||||||
|
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistry
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistry
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistryProvider
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
||||||
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryImpl
|
||||||
import org.jetbrains.kotlin.incremental.CacheVersion
|
import org.jetbrains.kotlin.incremental.CacheVersion
|
||||||
import org.jetbrains.kotlin.incremental.stackTraceStr
|
import org.jetbrains.kotlin.incremental.stackTraceStr
|
||||||
import org.jetbrains.kotlin.incremental.storage.BasicMapsOwner
|
import org.jetbrains.kotlin.incremental.storage.BasicMapsOwner
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import java.io.*
|
import java.io.*
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
|
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
|
||||||
import java.io.File
|
import java.io.File
|
||||||
+3
-1
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
@@ -26,6 +26,8 @@ import org.jetbrains.kotlin.com.intellij.psi.PsiFile
|
|||||||
import org.jetbrains.kotlin.com.intellij.psi.PsiFileFactory
|
import org.jetbrains.kotlin.com.intellij.psi.PsiFileFactory
|
||||||
import org.jetbrains.kotlin.com.intellij.psi.PsiJavaFile
|
import org.jetbrains.kotlin.com.intellij.psi.PsiJavaFile
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.kotlinDebug
|
||||||
|
import org.jetbrains.kotlin.incremental.ChangesEither
|
||||||
import org.jetbrains.kotlin.incremental.LookupSymbol
|
import org.jetbrains.kotlin.incremental.LookupSymbol
|
||||||
import org.jetbrains.kotlin.incremental.snapshots.FileCollectionDiff
|
import org.jetbrains.kotlin.incremental.snapshots.FileCollectionDiff
|
||||||
import java.io.File
|
import java.io.File
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.jetbrains.kotlin.incremental.LookupSymbol
|
import org.jetbrains.kotlin.incremental.LookupSymbol
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.jetbrains.kotlin.incremental.IncReporter
|
import org.jetbrains.kotlin.gradle.tasks.kotlinDebug
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
internal class GradleIncReporter(private val projectRootFile: File) : IncReporter() {
|
internal class GradleIncReporter(private val projectRootFile: File) : IncReporter() {
|
||||||
+13
-12
@@ -14,10 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
||||||
import org.jetbrains.kotlin.incremental.CompilationResult
|
import org.jetbrains.kotlin.incremental.CompilationResult
|
||||||
import org.jetbrains.kotlin.incremental.IncrementalCacheImpl
|
import org.jetbrains.kotlin.incremental.IncrementalCacheImpl
|
||||||
import org.jetbrains.kotlin.incremental.dumpCollection
|
import org.jetbrains.kotlin.incremental.dumpCollection
|
||||||
@@ -30,34 +31,34 @@ import org.jetbrains.kotlin.incremental.storage.StringCollectionExternalizer
|
|||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
internal class GradleIncrementalCacheImpl(targetDataRoot: File, targetOutputDir: File?, target: TargetId) : IncrementalCacheImpl<TargetId>(targetDataRoot, targetOutputDir, target) {
|
internal class GradleIncrementalCacheImpl(targetDataRoot: java.io.File, targetOutputDir: java.io.File?, target: org.jetbrains.kotlin.modules.TargetId) : org.jetbrains.kotlin.incremental.IncrementalCacheImpl<org.jetbrains.kotlin.modules.TargetId>(targetDataRoot, targetOutputDir, target) {
|
||||||
companion object {
|
companion object {
|
||||||
private val SOURCES_TO_CLASSFILES = "sources-to-classfiles"
|
private val SOURCES_TO_CLASSFILES = "sources-to-classfiles"
|
||||||
private val FILE_SNAPSHOT = "file-snapshot"
|
private val FILE_SNAPSHOT = "file-snapshot"
|
||||||
}
|
}
|
||||||
|
|
||||||
private val log = Logging.getLogger(this.javaClass)
|
private val log = org.gradle.api.logging.Logging.getLogger(this.javaClass)
|
||||||
|
|
||||||
private val sourceToClassfilesMap = registerMap(SourceToClassfilesMap(SOURCES_TO_CLASSFILES.storageFile))
|
private val sourceToClassfilesMap = registerMap(SourceToClassfilesMap(org.jetbrains.kotlin.incremental.GradleIncrementalCacheImpl.Companion.SOURCES_TO_CLASSFILES.storageFile))
|
||||||
private val fileSnapshotMap = registerMap(FileSnapshotMap(FILE_SNAPSHOT.storageFile))
|
private val fileSnapshotMap = registerMap(org.jetbrains.kotlin.incremental.snapshots.FileSnapshotMap(FILE_SNAPSHOT.storageFile))
|
||||||
|
|
||||||
fun compareAndUpdateFileSnapshots(files: Iterable<File>): FileCollectionDiff =
|
fun compareAndUpdateFileSnapshots(files: Iterable<java.io.File>): org.jetbrains.kotlin.incremental.snapshots.FileCollectionDiff =
|
||||||
fileSnapshotMap.compareAndUpdate(files, SimpleFileSnapshotProviderImpl())
|
fileSnapshotMap.compareAndUpdate(files, org.jetbrains.kotlin.incremental.snapshots.SimpleFileSnapshotProviderImpl())
|
||||||
|
|
||||||
fun removeClassfilesBySources(sources: Iterable<File>): Unit =
|
fun removeClassfilesBySources(sources: Iterable<java.io.File>): Unit =
|
||||||
sources.forEach { sourceToClassfilesMap.remove(it) }
|
sources.forEach { sourceToClassfilesMap.remove(it) }
|
||||||
|
|
||||||
override fun saveFileToCache(generatedClass: GeneratedJvmClass<TargetId>): CompilationResult {
|
override fun saveFileToCache(generatedClass: org.jetbrains.kotlin.build.GeneratedJvmClass<org.jetbrains.kotlin.modules.TargetId>): org.jetbrains.kotlin.incremental.CompilationResult {
|
||||||
generatedClass.sourceFiles.forEach { sourceToClassfilesMap.add(it, generatedClass.outputFile) }
|
generatedClass.sourceFiles.forEach { sourceToClassfilesMap.add(it, generatedClass.outputFile) }
|
||||||
return super.saveFileToCache(generatedClass)
|
return super.saveFileToCache(generatedClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class SourceToClassfilesMap(storageFile: File) : BasicStringMap<Collection<String>>(storageFile, PathStringDescriptor, StringCollectionExternalizer) {
|
inner class SourceToClassfilesMap(storageFile: java.io.File) : org.jetbrains.kotlin.incremental.storage.BasicStringMap<Collection<String>>(storageFile, org.jetbrains.kotlin.incremental.storage.PathStringDescriptor, org.jetbrains.kotlin.incremental.storage.StringCollectionExternalizer) {
|
||||||
fun add(sourceFile: File, classFile: File) {
|
fun add(sourceFile: java.io.File, classFile: java.io.File) {
|
||||||
storage.append(sourceFile.absolutePath, classFile.absolutePath)
|
storage.append(sourceFile.absolutePath, classFile.absolutePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun get(sourceFile: File): Collection<File> =
|
operator fun get(sourceFile: java.io.File): Collection<java.io.File> =
|
||||||
storage[sourceFile.absolutePath].orEmpty().map(::File)
|
storage[sourceFile.absolutePath].orEmpty().map(::File)
|
||||||
|
|
||||||
override fun dumpValue(value: Collection<String>) = value.dumpCollection()
|
override fun dumpValue(value: Collection<String>) = value.dumpCollection()
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.jetbrains.kotlin.incremental.LookupStorage
|
import org.jetbrains.kotlin.incremental.LookupStorage
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
+4
-2
@@ -1,4 +1,4 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.jetbrains.kotlin.annotation.AnnotationFileUpdater
|
import org.jetbrains.kotlin.annotation.AnnotationFileUpdater
|
||||||
import org.jetbrains.kotlin.annotation.SourceAnnotationsRegistry
|
import org.jetbrains.kotlin.annotation.SourceAnnotationsRegistry
|
||||||
@@ -14,8 +14,10 @@ import org.jetbrains.kotlin.com.intellij.util.io.PersistentEnumeratorBase
|
|||||||
import org.jetbrains.kotlin.compilerRunner.ArgumentUtils
|
import org.jetbrains.kotlin.compilerRunner.ArgumentUtils
|
||||||
import org.jetbrains.kotlin.compilerRunner.OutputItemsCollector
|
import org.jetbrains.kotlin.compilerRunner.OutputItemsCollector
|
||||||
import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl
|
import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl
|
||||||
import org.jetbrains.kotlin.incremental.*
|
import org.jetbrains.kotlin.incremental.ChangedFiles
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifference
|
||||||
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
||||||
import org.jetbrains.kotlin.incremental.snapshots.FileCollectionDiff
|
import org.jetbrains.kotlin.incremental.snapshots.FileCollectionDiff
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.IncrementalCompilation
|
import org.jetbrains.kotlin.config.IncrementalCompilation
|
||||||
import org.jetbrains.kotlin.incremental.CacheVersion
|
import org.jetbrains.kotlin.incremental.CacheVersion
|
||||||
+19
-3
@@ -1,4 +1,20 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks.incremental
|
/*
|
||||||
|
* Copyright 2010-2016 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.incremental
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
@@ -7,8 +23,8 @@ import org.gradle.api.tasks.compile.AbstractCompile
|
|||||||
import org.gradle.api.tasks.compile.JavaCompile
|
import org.gradle.api.tasks.compile.JavaCompile
|
||||||
import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil
|
import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil
|
||||||
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistry
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistry
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistryProvider
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.incremental.multiproject
|
||||||
|
|
||||||
import org.jetbrains.kotlin.incremental.DirtyData
|
import org.jetbrains.kotlin.incremental.DirtyData
|
||||||
import org.jetbrains.kotlin.incremental.IncReporter
|
import org.jetbrains.kotlin.incremental.IncReporter
|
||||||
+4
-4
@@ -14,11 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.tasks.incremental.android
|
package org.jetbrains.kotlin.incremental.multiproject
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifference
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifference
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistry
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistry
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistryProvider
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
internal class ArtifactDifferenceRegistryProviderAndroidWrapper(
|
internal class ArtifactDifferenceRegistryProviderAndroidWrapper(
|
||||||
+3
-3
@@ -1,8 +1,8 @@
|
|||||||
package org.jetbrains.kotlin.gradle.tasks.incremental
|
package org.jetbrains.kotlin.incremental.multiproject
|
||||||
|
|
||||||
import org.jetbrains.kotlin.com.intellij.util.io.DataExternalizer
|
import org.jetbrains.kotlin.com.intellij.util.io.DataExternalizer
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifference
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifference
|
||||||
import org.jetbrains.kotlin.gradle.tasks.ArtifactDifferenceRegistry
|
import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistry
|
||||||
import org.jetbrains.kotlin.incremental.DirtyData
|
import org.jetbrains.kotlin.incremental.DirtyData
|
||||||
import org.jetbrains.kotlin.incremental.LookupSymbol
|
import org.jetbrains.kotlin.incremental.LookupSymbol
|
||||||
import org.jetbrains.kotlin.incremental.storage.BasicStringMap
|
import org.jetbrains.kotlin.incremental.storage.BasicStringMap
|
||||||
Reference in New Issue
Block a user