@@ -42,14 +42,14 @@ public class ElementFactory : Datamodel.Codecs.IElementFactory
4242
4343 var ( compilation , classDeclList ) = tuple ;
4444
45- var runningAssembly = new FactoryAssembly ( compilation . AssemblyName ! ) ;
45+ var runningAssembly = new FactoryAssembly ( compilation . AssemblyName ) ;
4646 foreach ( var classDecl in classDeclList )
4747 {
4848 var type = compilation . GetSemanticModel ( classDecl . SyntaxTree ) . GetDeclaredSymbol ( classDecl ) ;
4949
50- if ( type is not null )
50+ if ( type is not null )
5151 {
52- runningAssembly . AddType ( type . ContainingNamespace . Name , type ) ;
52+ runningAssembly . AddType ( type . ContainingNamespace . ToDisplayString ( ) , type ) ;
5353 }
5454 }
5555 assemblies . Add ( runningAssembly ) ;
@@ -66,7 +66,7 @@ public class ElementFactory : Datamodel.Codecs.IElementFactory
6666 var assemblyTypes = GetAllClassesFromAssembly ( assemblySymbol ) ;
6767 foreach ( var assemblyType in assemblyTypes )
6868 {
69- referencedAssembly . AddType ( assemblyType . ContainingNamespace . Name , assemblyType ) ;
69+ referencedAssembly . AddType ( assemblyType . ContainingNamespace . ToDisplayString ( ) , assemblyType ) ;
7070 }
7171
7272 assemblies . Add ( referencedAssembly ) ;
@@ -97,26 +97,26 @@ public class ElementFactory : Datamodel.Codecs.IElementFactory
9797 var validTypes = 0 ;
9898 foreach ( var type in nameSpace . Types )
9999 {
100- if ( ValidateType ( type ) )
100+ if ( ValidateType ( type , compilation ) )
101101 {
102102 validTypes ++ ;
103103
104- typeseStringBuilder . AppendLine (
105- $ """"
104+ typeseStringBuilder . AppendLine (
105+ $ """"
106106
107107 case "{ type . Name } ":
108108 return new { type . ToDisplayString ( ) } ();
109109 """" ) ;
110110 }
111-
111+
112112 }
113113
114114 typeseStringBuilder . AppendLine (
115115 """"
116116 }
117117 """" ) ;
118118
119- if ( validTypes > 0 )
119+ if ( validTypes > 0 )
120120 {
121121 validNamespaces ++ ;
122122 namespaceStringBuilder . AppendLine (
@@ -127,15 +127,15 @@ public class ElementFactory : Datamodel.Codecs.IElementFactory
127127 break;
128128 """" ) ;
129129 }
130-
130+
131131 }
132132
133133 namespaceStringBuilder . AppendLine (
134134 """"
135135 }
136136 """" ) ;
137137
138- if ( validNamespaces > 0 )
138+ if ( validNamespaces > 0 )
139139 {
140140 elementFactory . AppendLine (
141141 $ """
@@ -145,7 +145,7 @@ public class ElementFactory : Datamodel.Codecs.IElementFactory
145145
146146 """ ) ;
147147 }
148-
148+
149149 }
150150
151151 elementFactory . AppendLine (
@@ -161,7 +161,7 @@ public class ElementFactory : Datamodel.Codecs.IElementFactory
161161 context . AddSource ( "ElementFactory.g.cs" , elementFactory . ToString ( ) ) ;
162162 }
163163
164- private static bool ValidateType ( INamedTypeSymbol type )
164+ private static bool ValidateType ( INamedTypeSymbol type , Compilation compilation )
165165 {
166166 if ( InheritsFromFullName ( type , "Datamodel.Element" ) )
167167 {
@@ -171,12 +171,20 @@ private static bool ValidateType(INamedTypeSymbol type)
171171 return false ;
172172 }
173173
174- // only allow public and internal classes
175- if ( type . DeclaredAccessibility != Accessibility . Public && type . DeclaredAccessibility != Accessibility . Internal )
174+ if ( type . DeclaredAccessibility != Accessibility . Internal && type . DeclaredAccessibility != Accessibility . Public )
176175 {
177176 return false ;
178177 }
179178
179+ // only internal classes in execution assembly are fine
180+ if ( type . DeclaredAccessibility == Accessibility . Internal )
181+ {
182+ if ( compilation . Assembly != type . ContainingAssembly )
183+ {
184+ return false ;
185+ }
186+ }
187+
180188 return true ;
181189 }
182190
@@ -249,7 +257,7 @@ public void AddType(string nameSpaceName, INamedTypeSymbol type)
249257 {
250258 NamespacesContainsNamespace ( nameSpaceName , out FactoryNamespace ? foundNameSpace ) ;
251259
252- if ( foundNameSpace == null )
260+ if ( foundNameSpace == null )
253261 {
254262 foundNameSpace = new FactoryNamespace ( nameSpaceName ) ;
255263 Namespaces . Add ( foundNameSpace ) ;
@@ -262,7 +270,7 @@ private bool NamespacesContainsNamespace(string namespaceName, out FactoryNamesp
262270 {
263271 foreach ( var nameSpace in Namespaces )
264272 {
265- if ( nameSpace . Name == namespaceName )
273+ if ( nameSpace . Name == namespaceName )
266274 {
267275 outNameSpace = nameSpace ;
268276 return true ;
0 commit comments