/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ apply plugin: 'com.palantir.baseline-config' allprojects { apply plugin: 'com.palantir.baseline-idea' } subprojects { if (it.name == 'iceberg-bom') { // the BOM does not build anything, the below plugins are not necessary (and can fail) return } // Currently, if any subproject applies the blanket Baseline plugin, it forces the Baseline plugin // to be applied to ALL projects. And we are not prepared to address all of the build errors that // occur as a result at this time. Furthermore, baseline-format will not work out of the box for // us - see below. // Thus we concede to applying all of the Baseline plugins individually on all the projects we are // ready to enforce linting on. apply plugin: 'org.inferred.processors' if (!project.hasProperty('quick')) { apply plugin: 'com.palantir.baseline-checkstyle' apply plugin: 'com.palantir.baseline-error-prone' } apply plugin: 'com.palantir.baseline-class-uniqueness' // What 'com.palantir.baseline-reproducibility' used to do, except the check for the // `sourceCompatibility` Java compile option, which conflicts with the `release` compile option. tasks.withType(AbstractArchiveTask.class).configureEach(t -> { t.setPreserveFileTimestamps(false); t.setReproducibleFileOrder(true); t.setDuplicatesStrategy(DuplicatesStrategy.WARN); }); apply plugin: 'com.palantir.baseline-exact-dependencies' apply plugin: 'com.diffplug.spotless' pluginManager.withPlugin('com.palantir.baseline-checkstyle') { checkstyle { // com.palantir.baseline:gradle-baseline-java:4.42.0 (the last version supporting Java 8) pulls // in an old version of the checkstyle(9.1), which has this OutOfMemory bug https://github.com/checkstyle/checkstyle/issues/10934. // So, override its checkstyle version using CheckstyleExtension to 9.3 (the latest java 8 supported version) which contains a fix. toolVersion '9.3' } } pluginManager.withPlugin('com.diffplug.spotless') { spotless { java { target 'src/main/java/**/*.java', 'src/test/java/**/*.java', 'src/testFixtures/java/**/*.java', 'src/jmh/java/**/*.java', 'src/integration/java/**/*.java' // 1.23.0 has an issue in formatting comments https://github.com/google/google-java-format/issues/1155 // so we stick to 1.22.0 to produce consistent result for JDK 11/17/21 googleJavaFormat("1.22.0") removeUnusedImports() licenseHeaderFile "$rootDir/.baseline/copyright/copyright-header-java.txt" } } } pluginManager.withPlugin('com.palantir.baseline-error-prone') { tasks.withType(JavaCompile).configureEach { options.errorprone.errorproneArgs.addAll ( // error-prone is slow, don't run on tests/generated-src/generated '-XepExcludedPaths:.*/(test|generated-src|generated)/.*', '-Xep:AnnotateFormatMethod:ERROR', '-Xep:BadComparable:ERROR', '-Xep:BadInstanceof:ERROR', '-Xep:CatchFail:ERROR', '-Xep:ClassCanBeStatic:ERROR', '-Xep:ClassNewInstance:ERROR', '-Xep:CollectionUndefinedEquality:ERROR', // specific to Palantir - Uses name `log` but we use name `LOG` '-Xep:ConsistentLoggerName:OFF', '-Xep:DangerousJavaDeserialization:ERROR', '-Xep:DangerousThreadPoolExecutorUsage:OFF', '-Xep:DefaultCharset:ERROR', '-Xep:DefaultLocale:ERROR', // subclasses are not equal '-Xep:EqualsGetClass:OFF', '-Xep:EqualsUnsafeCast:ERROR', '-Xep:EqualsUsingHashCode:ERROR', '-Xep:ExtendsObject:ERROR', '-Xep:FallThrough:ERROR', // specific to Palantir '-Xep:FinalClass:OFF', '-Xep:Finalize:ERROR', '-Xep:FormatStringAnnotation:ERROR', '-Xep:GetClassOnEnum:ERROR', '-Xep:HidingField:ERROR', '-Xep:ImmutableSetForContains:ERROR', '-Xep:ImmutablesReferenceEquality:ERROR', '-Xep:InconsistentCapitalization:ERROR', '-Xep:InconsistentHashCode:ERROR', '-Xep:IntLongMath:ERROR', '-Xep:JdkObsolete:ERROR', // prefer method references over lambdas '-Xep:LambdaMethodReference:ERROR', // enforce logging conventions '-Xep:LoggerEnclosingClass:ERROR', // patterns that are allowed '-Xep:MissingCasesInEnumSwitch:OFF', // Enforce missing override '-Xep:MissingOverride:ERROR', '-Xep:MissingSummary:ERROR', '-Xep:ModifiedButNotUsed:ERROR', '-Xep:MutablePublicArray:ERROR', '-Xep:NarrowCalculation:ERROR', '-Xep:NarrowingCompoundAssignment:ERROR', '-Xep:NullOptional:ERROR', '-Xep:NullableOptional:ERROR', '-Xep:NullablePrimitive:ERROR', '-Xep:ObjectEqualsForPrimitives:ERROR', // Enforce hashCode over hash '-Xep:ObjectsHashCodeUnnecessaryVarargs:ERROR', '-Xep:OrphanedFormatString:ERROR', '-Xep:Overrides:ERROR', // Triggers false-positives whenever relocated @VisibleForTesting is used '-Xep:PreferCommonAnnotations:OFF', // specific to Palantir '-Xep:PreferSafeLoggableExceptions:OFF', '-Xep:PreferSafeLogger:OFF', // specific to Palantir '-Xep:PreferSafeLoggingPreconditions:OFF', '-Xep:PreferStaticLoggers:ERROR', // specific to Palantir '-Xep:RawTypes:OFF', // specific to Palantir '-Xep:Slf4jLogsafeArgs:OFF', '-Xep:Slf4jThrowable:ERROR', // Added because it errors out compile, but we need to figure out if we want it '-Xep:StrictUnusedVariable:OFF', // Enforce safe string splitting '-Xep:StringSplitter:ERROR', '-Xep:TypeParameterShadowing:OFF', '-Xep:TypeParameterUnusedInFormals:OFF', '-Xep:UnicodeEscape:ERROR', // Palantir's UnnecessarilyQualified may throw during analysis '-Xep:UnnecessarilyQualified:OFF', '-Xep:UnnecessaryLongToIntConversion:ERROR', '-Xep:UnnecessaryMethodReference:ERROR', '-Xep:UnusedMethod:ERROR', '-Xep:UnusedVariable:ERROR', '-Xep:UseEnumSwitch:ERROR', ) } } pluginManager.withPlugin('com.github.alisiikh.scalastyle') { scalastyle { config = file("${rootDir}/project/scalastyle_config.xml") inputEncoding = 'UTF-8' outputEncoding = 'UTF-8' failOnWarning = false verbose = false quiet = false } } }