<?xml version="1.0"?>
<ruleset name="smtinterpolrules"
         xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
   <description>Rule set for SMTInterpol</description>
   <exclude-pattern>.*Lexer.*</exclude-pattern>
   <exclude-pattern>.*Parser.java</exclude-pattern>
   <rule ref="rulesets/java/basic.xml/JumbledIncrementer"/>
   <rule ref="rulesets/java/basic.xml/UnconditionalIfStatement"/>
   <rule ref="rulesets/java/basic.xml/CollapsibleIfStatements"/>
   <rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray"/>
   <rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor"/>
   <rule ref="rulesets/java/basic.xml/MisplacedNullCheck"/>
   <rule ref="rulesets/java/basic.xml/BrokenNullCheck"/>
   <rule ref="rulesets/java/basic.xml/AvoidUsingOctalValues"/>
   <rule ref="rulesets/java/basic.xml/AvoidMultipleUnaryOperators"/>
   <rule ref="rulesets/java/basic.xml/ExtendsObject"/>
   <rule ref="rulesets/java/basic.xml/CheckSkipResult"/>
   <rule ref="rulesets/java/basic.xml/AvoidBranchingStatementAsLastInLoop"/>
   <rule ref="rulesets/java/basic.xml/DontUseFloatTypeForLoopIndices"/>
   <rule ref="rulesets/java/controversial.xml/UnnecessaryConstructor"/>
   <rule ref="rulesets/java/controversial.xml/DontImportSun"/>
   <rule ref="rulesets/java/controversial.xml/SuspiciousOctalEscape"/>
   <rule ref="rulesets/java/controversial.xml/UnnecessaryParentheses"/>
   <rule ref="rulesets/java/controversial.xml/BooleanInversion"/>
   <rule ref="rulesets/java/controversial.xml/AvoidUsingShortType"/>
   <rule ref="rulesets/java/controversial.xml/AvoidUsingVolatile"/>
   <rule ref="rulesets/java/controversial.xml/AvoidUsingNativeCode"/>
   <rule ref="rulesets/java/controversial.xml/AvoidAccessibilityAlteration"/>
   <rule ref="rulesets/java/controversial.xml/DoNotCallGarbageCollectionExplicitly"/>
   <rule ref="rulesets/java/controversial.xml/AvoidPrefixingMethodParameters"/>
   <rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod"/>
   <rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic"/>
   <rule ref="rulesets/java/design.xml/NonCaseLabelInSwitchStatement"/>
   <rule ref="rulesets/java/design.xml/OptimizableToArrayCall"/>
   <rule ref="rulesets/java/design.xml/BadComparison"/>
   <rule ref="rulesets/java/design.xml/EqualsNull"/>
   <rule ref="rulesets/java/design.xml/ConfusingTernary"/>
   <rule ref="rulesets/java/design.xml/InstantiationToGetClass"/>
   <rule ref="rulesets/java/design.xml/IdempotentOperations"/>
   <rule ref="rulesets/java/design.xml/ImmutableField"/>
   <rule ref="rulesets/java/design.xml/AvoidProtectedFieldInFinalClass"/>
   <rule ref="rulesets/java/design.xml/AssignmentToNonFinalStatic"/>
   <rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass"/>
   <rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause"/>
   <rule ref="rulesets/java/design.xml/AbstractClassWithoutAbstractMethod"/>
   <rule ref="rulesets/java/design.xml/SimplifyConditional"/>
   <rule ref="rulesets/java/design.xml/UncommentedEmptyMethod"/>
   <rule ref="rulesets/java/design.xml/UncommentedEmptyConstructor"/>
   <rule ref="rulesets/java/design.xml/UseCollectionIsEmpty"/>
   <rule ref="rulesets/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal"/>
   <rule ref="rulesets/java/design.xml/EmptyMethodInAbstractClassShouldBeAbstract"/>
   <rule ref="rulesets/java/design.xml/SingularField"/>
   <rule ref="rulesets/java/design.xml/ReturnEmptyArrayRatherThanNull"/>
   <rule ref="rulesets/java/design.xml/AbstractClassWithoutAnyMethod"/>
   <rule ref="rulesets/java/design.xml/LogicInversion"/>
   <rule ref="rulesets/java/empty.xml/EmptyStatementNotInLoop"/>
   <rule ref="rulesets/java/empty.xml/EmptyInitializer"/>
   <rule ref="rulesets/java/finalizers.xml/EmptyFinalizer"/>
   <rule ref="rulesets/java/finalizers.xml/FinalizeOnlyCallsSuperFinalize"/>
   <rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded"/>
   <rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize"/>
   <rule ref="rulesets/java/finalizers.xml/FinalizeShouldBeProtected"/>
   <rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize"/>
   <rule ref="rulesets/java/migrating.xml/ReplaceVectorWithList"/>
   <rule ref="rulesets/java/migrating.xml/ReplaceHashtableWithMap"/>
   <rule ref="rulesets/java/migrating.xml/ReplaceEnumerationWithIterator"/>
   <rule ref="rulesets/java/naming.xml/AvoidDollarSigns"/>
   <rule ref="rulesets/java/naming.xml/BooleanGetMethodName"/>
   <rule ref="rulesets/java/optimizations.xml/SimplifyStartsWith"/>
   <rule ref="rulesets/java/optimizations.xml/UseStringBufferForStringAppends"/>
   <rule ref="rulesets/java/optimizations.xml/UseArraysAsList"/>
   <rule ref="rulesets/java/optimizations.xml/AvoidArrayLoops"/>
   <rule ref="rulesets/java/optimizations.xml/UnnecessaryWrapperObjectCreation"/>
   <rule ref="rulesets/java/optimizations.xml/AddEmptyString"/>
   <rule ref="rulesets/java/optimizations.xml/PrematureDeclaration"/>
   <rule ref="rulesets/java/strictexception.xml/AvoidThrowingNewInstanceOfSameException"/>
   <rule ref="rulesets/java/strictexception.xml/AvoidLosingExceptionInformation"/>
   <rule ref="rulesets/java/strings.xml/StringInstantiation"/>
   <rule ref="rulesets/java/strings.xml/StringToString"/>
   <rule ref="rulesets/java/strings.xml/InefficientStringBuffering"/>
   <rule ref="rulesets/java/strings.xml/UnnecessaryCaseChange"/>
   <rule ref="rulesets/java/strings.xml/UseStringBufferLength"/>
   <rule ref="rulesets/java/strings.xml/AppendCharacterWithChar"/>
   <rule ref="rulesets/java/strings.xml/ConsecutiveLiteralAppends"/>
   <rule ref="rulesets/java/strings.xml/UseIndexOfChar"/>
   <rule ref="rulesets/java/strings.xml/InsufficientStringBufferDeclaration"/>
   <rule ref="rulesets/java/strings.xml/UselessStringValueOf"/>
   <rule ref="rulesets/java/strings.xml/StringBufferInstantiationWithChar"/>
   <rule ref="rulesets/java/strings.xml/AvoidStringBufferField"/>
   <rule ref="rulesets/java/unnecessary.xml/UnnecessaryReturn"/>
   <rule ref="rulesets/java/unnecessary.xml/UselessOverridingMethod"/>
   <rule ref="rulesets/smtinterpol/smtinterpol.xml/ConfigurableUselessOperationOnImmutable">
    <properties>
      <property name="immutableOperations" value="de.uni_freiburg.informatik.ultimate.logic.Rational:abs,add,addmul,ceil,div,floor,frac,gcd,inverse,mul,negate,sub,subdiv;de.uni_freiburg.informatik.ultimate.smtinterpol.theory.linar.InfinitNumber:add,addmul,ceil,div,floor,inverse,mul,negate,sub,subdiv;de.uni_freiburg.informatik.ultimate.smtinterpol.convert.SMTAffineTerm:add,addUnchecked,div,mul,negate,toReal;java.util.BigDecimal:abs,add,divide,divideToIntegralValue,max,min,movePointLeft,movePointRight,multiply,negate,plus,pow,remainder,round,scaleByPowerOfTen,setScale,stripTrailingZeros,subtract,ulp;java.util.BigInteger:abs,add,and,andNot,clearBit,divide,flipBit,gcd,max,min,mod,modInverse,modPow,multiply,negate,nextProbablePrine,not,or,pow,remainder,setBit,shiftLeft,shiftRight,subtract,xor;java.lang.String:concat,intern,replace,replaceAll,replaceFirst,substring,toLowerCase,toString,toUpperCase,trim"/>
    </properties>
  </rule>
</ruleset>
