module Hydra.Langs.Java.Language where
import qualified Hydra.Basics as Basics
import qualified Hydra.Coders as Coders
import qualified Hydra.Core as Core
import qualified Hydra.Lib.Equality as Equality
import qualified Hydra.Lib.Lists as Lists
import qualified Hydra.Lib.Sets as Sets
import qualified Hydra.Mantle as Mantle
import Data.Int
import Data.List as L
import Data.Map as M
import Data.Set as S
javaMaxTupleLength :: Int
javaMaxTupleLength :: Int
javaMaxTupleLength = Int
9
javaLanguage :: Coders.Language
javaLanguage :: Language
javaLanguage = Coders.Language {
languageName :: LanguageName
Coders.languageName = (String -> LanguageName
Coders.LanguageName String
"hydra/langs/java"),
languageConstraints :: LanguageConstraints
Coders.languageConstraints = Coders.LanguageConstraints {
languageConstraintsEliminationVariants :: Set EliminationVariant
Coders.languageConstraintsEliminationVariants = ([EliminationVariant] -> Set EliminationVariant
forall x. Ord x => [x] -> Set x
Sets.fromList [EliminationVariant]
Basics.eliminationVariants),
languageConstraintsLiteralVariants :: Set LiteralVariant
Coders.languageConstraintsLiteralVariants = ([LiteralVariant] -> Set LiteralVariant
forall x. Ord x => [x] -> Set x
Sets.fromList [
LiteralVariant
Mantle.LiteralVariantBoolean,
LiteralVariant
Mantle.LiteralVariantFloat,
LiteralVariant
Mantle.LiteralVariantInteger,
LiteralVariant
Mantle.LiteralVariantString]),
languageConstraintsFloatTypes :: Set FloatType
Coders.languageConstraintsFloatTypes = ([FloatType] -> Set FloatType
forall x. Ord x => [x] -> Set x
Sets.fromList [
FloatType
Core.FloatTypeFloat32,
FloatType
Core.FloatTypeFloat64]),
languageConstraintsFunctionVariants :: Set FunctionVariant
Coders.languageConstraintsFunctionVariants = ([FunctionVariant] -> Set FunctionVariant
forall x. Ord x => [x] -> Set x
Sets.fromList [FunctionVariant]
Basics.functionVariants),
languageConstraintsIntegerTypes :: Set IntegerType
Coders.languageConstraintsIntegerTypes = ([IntegerType] -> Set IntegerType
forall x. Ord x => [x] -> Set x
Sets.fromList [
IntegerType
Core.IntegerTypeBigint,
IntegerType
Core.IntegerTypeInt16,
IntegerType
Core.IntegerTypeInt32,
IntegerType
Core.IntegerTypeInt64,
IntegerType
Core.IntegerTypeUint8,
IntegerType
Core.IntegerTypeUint16]),
languageConstraintsTermVariants :: Set TermVariant
Coders.languageConstraintsTermVariants = ([TermVariant] -> Set TermVariant
forall x. Ord x => [x] -> Set x
Sets.fromList [
TermVariant
Mantle.TermVariantApplication,
TermVariant
Mantle.TermVariantFunction,
TermVariant
Mantle.TermVariantLet,
TermVariant
Mantle.TermVariantList,
TermVariant
Mantle.TermVariantLiteral,
TermVariant
Mantle.TermVariantMap,
TermVariant
Mantle.TermVariantOptional,
TermVariant
Mantle.TermVariantProduct,
TermVariant
Mantle.TermVariantRecord,
TermVariant
Mantle.TermVariantSet,
TermVariant
Mantle.TermVariantUnion,
TermVariant
Mantle.TermVariantVariable,
TermVariant
Mantle.TermVariantWrap]),
languageConstraintsTypeVariants :: Set TypeVariant
Coders.languageConstraintsTypeVariants = ([TypeVariant] -> Set TypeVariant
forall x. Ord x => [x] -> Set x
Sets.fromList [
TypeVariant
Mantle.TypeVariantAnnotated,
TypeVariant
Mantle.TypeVariantApplication,
TypeVariant
Mantle.TypeVariantFunction,
TypeVariant
Mantle.TypeVariantLambda,
TypeVariant
Mantle.TypeVariantList,
TypeVariant
Mantle.TypeVariantLiteral,
TypeVariant
Mantle.TypeVariantMap,
TypeVariant
Mantle.TypeVariantOptional,
TypeVariant
Mantle.TypeVariantProduct,
TypeVariant
Mantle.TypeVariantRecord,
TypeVariant
Mantle.TypeVariantSet,
TypeVariant
Mantle.TypeVariantUnion,
TypeVariant
Mantle.TypeVariantVariable,
TypeVariant
Mantle.TypeVariantWrap]),
languageConstraintsTypes :: Type -> Bool
Coders.languageConstraintsTypes = (\Type
x -> case Type
x of
Core.TypeProduct [Type]
v276 -> (Int -> Int -> Bool
Equality.ltInt32 ([Type] -> Int
forall a. [a] -> Int
Lists.length [Type]
v276) Int
javaMaxTupleLength)
Type
_ -> Bool
True)}}
reservedWords :: (Set String)
reservedWords :: Set String
reservedWords = ([String] -> Set String
forall x. Ord x => [x] -> Set x
Sets.fromList ([[String]] -> [String]
forall a. [[a]] -> [a]
Lists.concat [
[String]
specialNames,
[String]
classNames,
[String]
keywords,
[String]
literals]))
where
specialNames :: [String]
specialNames = [
String
"Elements"]
classNames :: [String]
classNames = [
String
"AbstractMethodError",
String
"Appendable",
String
"ArithmeticException",
String
"ArrayIndexOutOfBoundsException",
String
"ArrayStoreException",
String
"AssertionError",
String
"AutoCloseable",
String
"Boolean",
String
"BootstrapMethodError",
String
"Byte",
String
"CharSequence",
String
"Character",
String
"Class",
String
"ClassCastException",
String
"ClassCircularityError",
String
"ClassFormatError",
String
"ClassLoader",
String
"ClassNotFoundException",
String
"ClassValue",
String
"CloneNotSupportedException",
String
"Cloneable",
String
"Comparable",
String
"Compiler",
String
"Deprecated",
String
"Double",
String
"Enum",
String
"EnumConstantNotPresentException",
String
"Error",
String
"Exception",
String
"ExceptionInInitializerError",
String
"Float",
String
"IllegalAccessError",
String
"IllegalAccessException",
String
"IllegalArgumentException",
String
"IllegalMonitorStateException",
String
"IllegalStateException",
String
"IllegalThreadStateException",
String
"IncompatibleClassChangeError",
String
"IndexOutOfBoundsException",
String
"InheritableThreadLocal",
String
"InstantiationError",
String
"InstantiationException",
String
"Integer",
String
"InternalError",
String
"InterruptedException",
String
"Iterable",
String
"LinkageError",
String
"Long",
String
"Math",
String
"NegativeArraySizeException",
String
"NoClassDefFoundError",
String
"NoSuchFieldError",
String
"NoSuchFieldException",
String
"NoSuchMethodError",
String
"NoSuchMethodException",
String
"NullPointerException",
String
"Number",
String
"NumberFormatException",
String
"Object",
String
"OutOfMemoryError",
String
"Override",
String
"Package",
String
"Process",
String
"ProcessBuilder",
String
"Readable",
String
"ReflectiveOperationException",
String
"Runnable",
String
"Runtime",
String
"RuntimeException",
String
"RuntimePermission",
String
"SafeVarargs",
String
"SecurityException",
String
"SecurityManager",
String
"Short",
String
"StackOverflowError",
String
"StackTraceElement",
String
"StrictMath",
String
"String",
String
"StringBuffer",
String
"StringBuilder",
String
"StringIndexOutOfBoundsException",
String
"SuppressWarnings",
String
"System",
String
"Thread",
String
"ThreadDeath",
String
"ThreadGroup",
String
"ThreadLocal",
String
"Throwable",
String
"TypeNotPresentException",
String
"UnknownError",
String
"UnsatisfiedLinkError",
String
"UnsupportedClassVersionError",
String
"UnsupportedOperationException",
String
"VerifyError",
String
"VirtualMachineError",
String
"Void"]
keywords :: [String]
keywords = [
String
"abstract",
String
"assert",
String
"boolean",
String
"break",
String
"byte",
String
"case",
String
"catch",
String
"char",
String
"class",
String
"const",
String
"continue",
String
"default",
String
"do",
String
"double",
String
"else",
String
"enum",
String
"extends",
String
"final",
String
"finally",
String
"float",
String
"for",
String
"goto",
String
"if",
String
"implements",
String
"import",
String
"instanceof",
String
"int",
String
"interface",
String
"long",
String
"native",
String
"new",
String
"package",
String
"private",
String
"protected",
String
"public",
String
"return",
String
"short",
String
"static",
String
"strictfp",
String
"super",
String
"switch",
String
"synchronized",
String
"this",
String
"throw",
String
"throws",
String
"transient",
String
"try",
String
"void",
String
"volatile",
String
"while"]
literals :: [String]
literals = [
String
"false",
String
"null",
String
"true"]