class PublicModifiersInImpl(config: Config = Config.empty) : Rule(config) {
override val issue: Issue = Issue(javaClass.simpleName, Severity.Maintainability,
- ISSUE_DESCRIPTION, Debt(mins=10))
+ ISSUE_DESCRIPTION, Debt(mins = 10))
override fun visitKtFile(file: KtFile) {
super.visitKtFile(file)
- if(file.packageFqName.toString().contains("impl")) {
- ImplVisitor.also {
- file.accept(it)
- if(it.publicDeclarations.isNotEmpty()){
- for(entity in it.publicDeclarations)
- report(CodeSmell(issue, entity, REPORT_MESSAGE))
- it.publicDeclarations.clear()
- }
- }
+ if (file.packageFqName.toString().contains("impl")) {
+ checkAccessModifiers(file)
}
}
+ private fun checkAccessModifiers(file: KtFile) {
+ val implVisitor = ImplVisitor()
+
+ file.accept(implVisitor)
+ if (implVisitor.publicDeclarations.isNotEmpty()) {
+ reportCodeSmells(implVisitor)
+ }
+ }
+
+ private fun reportCodeSmells(it: ImplVisitor) {
+ for (entity in it.publicDeclarations)
+ report(CodeSmell(issue, entity, REPORT_MESSAGE))
+ }
+
companion object {
- private val REPORT_MESSAGE = """
+ private val REPORT_MESSAGE = """
Implementation package members cannot have public declarations.
Please, add `internal` modifier for this element to disallow usage outside of module
""".trimIndent()
}
}
-private object ImplVisitor: DetektVisitor(){
+private class ImplVisitor : DetektVisitor() {
var publicDeclarations = mutableListOf<Entity>()
override fun visitClassOrObject(classOrObject: KtClassOrObject) {
- if(classOrObject.isTopLevel() && classOrObject.isPublic){
+ if (classOrObject.isTopLevel() && classOrObject.isPublic) {
publicDeclarations.add(Entity.from(classOrObject))
}
}
override fun visitNamedFunction(function: KtNamedFunction) {
- if(function.isTopLevel && function.isPublic){
+ if (function.isTopLevel && function.isPublic) {
publicDeclarations.add(Entity.from(function))
}
}
override fun visitProperty(property: KtProperty) {
- if(property.isTopLevel && property.isPublic) publicDeclarations.add(Entity.from(property))
+ if (property.isTopLevel && property.isPublic) publicDeclarations.add(Entity.from(property))
}
}
\ No newline at end of file
SuboptimalLoggerUsage:
active: false
PublicModifiersInImpl:
- active: false
+ active: true
import org.onap.dcae.collectors.veshv.domain.vesEventListenerVersionRegex
import org.onap.ves.VesEventOuterClass.CommonEventHeader
-typealias Validator = (CommonEventHeader) -> List<ValidationError>
+internal typealias Validator = (CommonEventHeader) -> List<ValidationError>
-object HeaderValidator {
+internal object HeaderValidator {
private val validators = (listOf(validateEventListenerVersion()) +
headerRequiredFieldDescriptors.map { fieldDescriptor ->
validateRequiredField(fieldDescriptor)
import org.onap.ves.VesEventOuterClass.CommonEventHeader
import reactor.core.publisher.Flux
-class Router internal constructor(private val routing: Routing,
+internal class Router internal constructor(private val routing: Routing,
private val messageSinks: Map<String, Lazy<Sink>>,
private val ctx: ClientContext,
private val metrics: Metrics) {
import org.onap.dcae.collectors.veshv.domain.vesEventListenerVersionRegex
-sealed class ValidationError(val errorMessage: String) {
+internal sealed class ValidationError(val errorMessage: String) {
class MissingField<A>(field: A) : ValidationError(
"Invalid header - missing $field field"
)
* @author Jakub Dudycz <jakub.dudycz@nokia.com>
* @since May 2018
*/
-open class HttpAdapter(private val httpClient: HttpClient) {
+internal open class HttpAdapter(private val httpClient: HttpClient) {
open fun get(url: String, invocationId: UUID, queryParams: Map<String, Any> = emptyMap()): Mono<String> =
httpClient
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since June 2018
*/
-class ProtobufSerializer : Serializer<MessageLite> {
+internal class ProtobufSerializer : Serializer<MessageLite> {
override fun configure(configs: MutableMap<String, *>?, isKey: Boolean) {
// no configuration
}
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since June 2018
*/
-class VesMessageSerializer : Serializer<VesMessage> {
+internal class VesMessageSerializer : Serializer<VesMessage> {
override fun configure(configs: MutableMap<String, *>?, isKey: Boolean) {
// not needed
}
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since June 2018
*/
-class WireFrameException(val error: WireFrameDecodingError)
+internal class WireFrameException(val error: WireFrameDecodingError)
: Exception("${error::class.simpleName}: ${error.message}")
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since August 2018
*/
-class DcaeAppSimulator(private val consumerFactory: ConsumerFactory,
+internal class DcaeAppSimulator(private val consumerFactory: ConsumerFactory,
private val messageStreamValidation: MessageStreamValidation) {
private val consumerState: MutableMap<String, ConsumerStateProvider> = synchronizedMap(mutableMapOf())
}
}
-class MissingConsumerException(message: String) : Throwable(message)
+internal class MissingConsumerException(message: String) : Throwable(message)
import java.io.InputStream
import javax.json.Json
-class MessageStreamValidation(
+internal class MessageStreamValidation(
private val messageGenerator: VesEventGenerator,
private val messageParametersParser: MessageParametersParser = MessageParametersParser.INSTANCE) {
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since May 2018
*/
-class DcaeAppApiServer(private val simulator: DcaeAppSimulator) {
+internal class DcaeAppApiServer(private val simulator: DcaeAppSimulator) {
fun start(socketAddress: InetSocketAddress, kafkaTopics: Set<String>): Mono<ServerHandle> =
Mono.defer {
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since May 2018
*/
-class KafkaSource(private val receiver: KafkaReceiver<ByteArray, ByteArray>) {
+internal class KafkaSource(private val receiver: KafkaReceiver<ByteArray, ByteArray>) {
fun start(): Flux<ReceiverRecord<ByteArray, ByteArray>> =
receiver.receive()
import org.onap.dcae.collectors.veshv.utils.arrow.OptionUtils.binding
import java.net.InetSocketAddress
-class ArgDcaeAppSimConfiguration : ArgBasedConfiguration<DcaeAppSimConfiguration>(DefaultParser()) {
+internal class ArgDcaeAppSimConfiguration : ArgBasedConfiguration<DcaeAppSimConfiguration>(DefaultParser()) {
override val cmdLineOptionsList: List<CommandLineOption> = listOf(
LISTEN_PORT,
MAXIMUM_PAYLOAD_SIZE_BYTES,
import java.net.InetSocketAddress
-data class DcaeAppSimConfiguration(
+internal data class DcaeAppSimConfiguration(
val apiAddress: InetSocketAddress,
val maxPayloadSizeBytes: Int,
val kafkaBootstrapServers: String,
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since June 2018
*/
-class ConsumerState(private val messages: ConcurrentLinkedQueue<ByteArray>) {
+internal class ConsumerState(private val messages: ConcurrentLinkedQueue<ByteArray>) {
val messagesCount: Int by lazy {
messages.size
}
}
}
-interface ConsumerStateProvider {
+internal interface ConsumerStateProvider {
fun currentState(): ConsumerState
fun reset()
}
-class Consumer : ConsumerStateProvider {
+internal class Consumer : ConsumerStateProvider {
private var consumedMessages: ConcurrentLinkedQueue<ByteArray> = ConcurrentLinkedQueue()
}
}
-class ConsumerFactory(private val kafkaBootstrapServers: String) {
+internal class ConsumerFactory(private val kafkaBootstrapServers: String) {
fun createConsumersForTopics(kafkaTopics: Set<String>): Map<String, Consumer> =
KafkaSource.create(kafkaBootstrapServers, kafkaTopics).let { kafkaSource ->
val topicToConsumer = kafkaTopics.associate { it to Consumer() }
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since August 2018
*/
-class XnfSimulator(
+internal class XnfSimulator(
private val clientFactory: ClientFactory,
private val generatorFactory: MessageGeneratorFactory,
private val messageParametersParser: MessageParametersParser = MessageParametersParser.INSTANCE) {
* @author Jakub Dudycz <jakub.dudycz@nokia.com>
* @since June 2018
*/
-class HvVesClient(private val producer: HvVesProducer) {
+internal class HvVesClient(private val producer: HvVesProducer) {
fun sendRawPayload(messages: Flux<ByteBuffer>, payloadType: PayloadType = PayloadType.UNDEFINED): Mono<Unit> =
producer.sendRaw(messages, payloadType)
* @author Jakub Dudycz <jakub.dudycz@nokia.com>
* @since February 2019
*/
-data class ClientConfiguration(val collectorAddresses: Set<InetSocketAddress>,
+internal data class ClientConfiguration(val collectorAddresses: Set<InetSocketAddress>,
val securityProvider: () -> SecurityConfiguration)
* @author Jakub Dudycz <jakub.dudycz@nokia.com>
* @since June 2018
*/
-data class SimulatorConfiguration(
+internal data class SimulatorConfiguration(
val listenAddress: InetSocketAddress,
val healthCheckApiListenAddress: InetSocketAddress,
val hvVesAddress: InetSocketAddress,
* @since September 2018
*/
-const val KEY_STORE_FILE = "/etc/ves-hv/server.p12"
-const val KEY_STORE_PASSWORD_FILE = "/etc/ves-hv/server.pass"
-const val TRUST_STORE_FILE = "/etc/ves-hv/trust.p12"
-const val TRUST_STORE_PASSWORD_FILE = "/etc/ves-hv/trust.pass"
+internal const val KEY_STORE_FILE = "/etc/ves-hv/server.p12"
+internal const val KEY_STORE_PASSWORD_FILE = "/etc/ves-hv/server.pass"
+internal const val TRUST_STORE_FILE = "/etc/ves-hv/trust.p12"
+internal const val TRUST_STORE_PASSWORD_FILE = "/etc/ves-hv/trust.pass"
-fun createSecurityConfigurationProvider(cmdLine: CommandLine): Try<() -> SecurityConfiguration> =
+internal fun createSecurityConfigurationProvider(cmdLine: CommandLine): Try<() -> SecurityConfiguration> =
if (shouldDisableSsl(cmdLine))
Try { { disabledSecurityConfiguration() } }
else
* @author Jakub Dudycz <jakub.dudycz@nokia.com>
* @since February 2019
*/
-class ClientFactory(private val configuration: ClientConfiguration) {
+internal class ClientFactory(private val configuration: ClientConfiguration) {
fun create() = hvVesClient(partialConfiguration().build())
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since August 2018
*/
-class OngoingSimulations(private val scheduler: Scheduler = Schedulers.elastic(),
+internal class OngoingSimulations(private val scheduler: Scheduler = Schedulers.elastic(),
private val healthState: HealthState = HealthState.INSTANCE) {
private val simulations = ConcurrentHashMap<UUID, Status>()
}
}
-sealed class Status(val message: String) {
+internal sealed class Status(val message: String) {
override fun toString() = this::class.simpleName ?: "null"
}
-object StatusNotFound : Status("not found")
-object StatusOngoing : Status("ongoing")
-object StatusSuccess : Status("success")
-data class StatusFailure(val cause: Throwable) : Status("Error ${cause.message}")
+internal object StatusNotFound : Status("not found")
+internal object StatusOngoing : Status("ongoing")
+internal object StatusSuccess : Status("success")
+internal data class StatusFailure(val cause: Throwable) : Status("Error ${cause.message}")