@@ -86,7 +86,13 @@ class ResolveTypes(specs: ClassSpecs, topClass: ClassSpec, opaqueTypes: Boolean)
8686 }
8787
8888 private def resolveUserType (curClass : ClassSpec , typeName : List [String ], path : List [String ]): (Option [ClassSpec ], Option [CompilationProblem ]) = {
89- val res = realResolveUserType(curClass, typeName, path)
89+ val res = try {
90+ val resolver = new ClassTypeProvider (specs, curClass)
91+ Some (resolver.resolveTypePath(curClass, typeName))
92+ } catch {
93+ case _ : TypeNotFoundError =>
94+ None
95+ }
9096
9197 res match {
9298 case None =>
@@ -105,51 +111,4 @@ class ResolveTypes(specs: ClassSpecs, topClass: ClassSpec, opaqueTypes: Boolean)
105111 (res, None )
106112 }
107113 }
108-
109- private def realResolveUserType (curClass : ClassSpec , typeName : List [String ], path : List [String ]): Option [ClassSpec ] = {
110- Log .typeResolve.info(() => s " resolveUserType: at ${curClass.name} doing ${typeName.mkString(" |" )}" )
111-
112- // First, try to do it in current class
113-
114- // If we're seeking composite name, we only have to resolve the very first
115- // part of it at this stage
116- val firstName :: restNames = typeName
117-
118- val resolvedHere = curClass.types.get(firstName).flatMap((nestedClass) =>
119- if (restNames.isEmpty) {
120- // No further names to resolve, here's our answer
121- Some (nestedClass)
122- } else {
123- // Try to resolve recursively
124- realResolveUserType(nestedClass, restNames, path)
125- }
126- )
127-
128- resolvedHere match {
129- case Some (_) => resolvedHere
130- case None =>
131- // No luck resolving here, let's try upper levels, if they exist
132- curClass.upClass match {
133- case Some (upClass) =>
134- realResolveUserType(upClass, typeName, path)
135- case None =>
136- // Check this class if it's top-level class
137- if (curClass.name.head == firstName) {
138- Some (curClass)
139- } else {
140- // Check if top-level specs has this name
141- // If there's None => no luck at all
142- val resolvedTop = specs.get(firstName)
143- resolvedTop match {
144- case None => None
145- case Some (classSpec) => if (restNames.isEmpty) {
146- resolvedTop
147- } else {
148- realResolveUserType(classSpec, restNames, path)
149- }
150- }
151- }
152- }
153- }
154- }
155114}
0 commit comments