2525
2626public abstract class BuildPhase extends Element
2727{
28+
29+ private final static Package buildPhasesPackage = BuildPhase .class .getPackage ();
30+
2831 public BuildPhase (ProjectFile projectFile )
2932 {
3033 this (projectFile , projectFile .createDict ());
@@ -37,41 +40,15 @@ public BuildPhase(ProjectFile projectFile, Dict dict)
3740
3841 public static BuildPhase create (ProjectFile projectFile , Dict dict )
3942 {
40- String isa = dict .getString ("isa" );
41- BuildPhase phase = null ;
42- if (AppleScriptBuildPhase .isa .equals (isa ))
43- {
44- phase = new AppleScriptBuildPhase (projectFile , dict );
43+ final String isa = dict .getString ("isa" );
44+ try {
45+ final Class <?> clazz = Class .forName (buildPhasesPackage .getName () + "." + isa );
46+ return (BuildPhase )clazz .getDeclaredConstructor (new Class [] {ProjectFile .class , Dict .class }).newInstance (projectFile , dict );
4547 }
46- else if (CopyFilesBuildPhase .isa .equals (isa ))
47- {
48- phase = new CopyFilesBuildPhase (projectFile , dict );
48+ catch (RuntimeException e ) {
49+ throw e ;
50+ } catch (Exception e ) {
51+ throw new RuntimeException ("Could not instanciate build phase for type (isa) '" + isa + "'." , e );
4952 }
50- else if (FrameworksBuildPhase .isa .equals (isa ))
51- {
52- phase = new FrameworksBuildPhase (projectFile , dict );
53- }
54- else if (HeadersBuildPhase .isa .equals (isa ))
55- {
56- phase = new HeadersBuildPhase (projectFile , dict );
57- }
58- else if (ResourcesBuildPhase .isa .equals (isa ))
59- {
60- phase = new ResourcesBuildPhase (projectFile , dict );
61- }
62- else if (ShellScriptBuildPhase .isa .equals (isa ))
63- {
64- phase = new ShellScriptBuildPhase (projectFile , dict );
65- }
66- else if (SourcesBuildPhase .isa .equals (isa ))
67- {
68- phase = new SourcesBuildPhase (projectFile , dict );
69- }
70- else
71- {
72- throw new IllegalStateException ("Unknown build phase (isa: " + isa + ")" );
73- }
74- return phase ;
7553 }
76-
7754}
0 commit comments