@@ -47,9 +47,26 @@ class ResolveTypes(specs: ClassSpecs, topClass: ClassSpec, opaqueTypes: Boolean)
4747 private def resolveUserType (curClass : ClassSpec , dataType : DataType , path : List [String ]): Iterable [CompilationProblem ] = {
4848 dataType match {
4949 case ut : UserType =>
50- val (resClassSpec, problems) = resolveUserType(curClass, ut.name, path ++ List (" type" ))
51- ut.classSpec = resClassSpec
52- problems
50+ try {
51+ val resolver = new ClassTypeProvider (specs, curClass)
52+ val ty = resolver.resolveTypePath(curClass, ut.name)
53+ Log .typeResolve.info(() => s " => ${ty.nameAsStr}" )
54+ ut.classSpec = Some (ty)
55+ None
56+ } catch {
57+ case _ : TypeNotFoundError =>
58+ // Type definition not found
59+ if (opaqueTypes) {
60+ // Generate special "opaque placeholder" ClassSpec
61+ Log .typeResolve.info(() => " => ??? (generating opaque type)" )
62+ ut.classSpec = Some (ClassSpec .opaquePlaceholder(ut.name))
63+ None
64+ } else {
65+ // Opaque types are disabled => that is an error
66+ Log .typeResolve.info(() => " => ??? (opaque type are disabled => error)" )
67+ Some (TypeNotFoundErr (ut.name, curClass, path :+ " type" ))
68+ }
69+ }
5370 case et : EnumType =>
5471 try {
5572 val resolver = new ClassTypeProvider (specs, curClass)
@@ -77,25 +94,4 @@ class ResolveTypes(specs: ClassSpecs, topClass: ClassSpec, opaqueTypes: Boolean)
7794 None
7895 }
7996 }
80-
81- private def resolveUserType (curClass : ClassSpec , typeName : List [String ], path : List [String ]): (Option [ClassSpec ], Option [CompilationProblem ]) = {
82- try {
83- val resolver = new ClassTypeProvider (specs, curClass)
84- val ty = resolver.resolveTypePath(curClass, typeName)
85- Log .typeResolve.info(() => s " => ${ty.nameAsStr}" )
86- (Some (ty), None )
87- } catch {
88- case _ : TypeNotFoundError =>
89- // Type definition not found
90- if (opaqueTypes) {
91- // Generate special "opaque placeholder" ClassSpec
92- Log .typeResolve.info(() => " => ??? (generating opaque type)" )
93- (Some (ClassSpec .opaquePlaceholder(typeName)), None )
94- } else {
95- // Opaque types are disabled => that is an error
96- Log .typeResolve.info(() => " => ??? (opaque type are disabled => error)" )
97- (None , Some (TypeNotFoundErr (typeName, curClass, path)))
98- }
99- }
100- }
10197}
0 commit comments