override fun processData()

in plugin-dotnet-agent/src/main/kotlin/jetbrains/buildServer/inspect/DupFinderCodeDataProcessor.kt [20:76]


    override fun processData(context: DataProcessorContext) {
        _reporter.startDuplicates()

        try {
            _fileSystem.read(context.file) {
                var cost: Int? = null
                var fragment: Fragment? = null
                var fragments = mutableListOf<Fragment>()
                var hashes = mutableSetOf<Int>()
                var duplicates = mutableListOf<DuplicateInfo>()

                for (e in _xmlReader.read(it)) {
                    when (e.name.lowercase()) {
                        "duplicate" -> {
                            tryCreateDuplicate(cost, fragments, hashes)?.let {
                                duplicates.add(it)
                                publish(duplicates, false)
                            }

                            fragments = mutableListOf()
                            cost = e["Cost"]?.toIntOrNull()
                        }

                        "fragment" -> {
                            fragment = Fragment()
                            fragments.add(fragment)
                        }

                        "filename" -> {
                            fragment?.let {
                                it.fileName = e.value
                            }
                        }

                        "linerange" -> {
                            fragment?.let {
                                it.lineRangeStart = e["Start"]?.toIntOrNull() ?: -1
                                it.lineRangeEnd = e["End"]?.toIntOrNull() ?: -1
                            }
                        }

                        "text" -> {
                            fragment?.let {
                                it.text = e.value
                            }
                        }
                    }
                }

                tryCreateDuplicate(cost, fragments, hashes)?.let { duplicates.add(it) }
                publish(duplicates, true)
            }
        }
        finally {
            _reporter.finishDuplicates()
        }
    }