Skip to content

Commit 3b30689

Browse files
committed
Shrink instanciation of build phases
The concrete build phase is derived from the isa property. The contract is that the build phase class is named like the isa property. Change-Id: Idc256e78f04bbdd1d0bac6699a0f5476cffefea5
1 parent dfff456 commit 3b30689

11 files changed

Lines changed: 44 additions & 67 deletions

File tree

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/BuildPhase.java

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525

2626
public 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
}

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/AppleScriptBuildPhase.java renamed to src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/PBXAppleScriptBuildPhase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
import com.sap.prd.mobile.ios.mios.xcodeprojreader.Dict;
2323
import com.sap.prd.mobile.ios.mios.xcodeprojreader.ProjectFile;
2424

25-
public class AppleScriptBuildPhase extends BuildPhase
25+
public class PBXAppleScriptBuildPhase extends BuildPhase
2626
{
2727
public static final String isa = "PBXAppleScriptBuildPhase"; // unconfirmed
2828

29-
public AppleScriptBuildPhase(ProjectFile projectFile)
29+
public PBXAppleScriptBuildPhase(ProjectFile projectFile)
3030
{
3131
this(projectFile, projectFile.createDict());
3232
}
3333

34-
AppleScriptBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
34+
PBXAppleScriptBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
3535
{
3636
super(projectFile, buildConfigurationList);
3737
}

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/CopyFilesBuildPhase.java renamed to src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/PBXCopyFilesBuildPhase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
import com.sap.prd.mobile.ios.mios.xcodeprojreader.Dict;
2323
import com.sap.prd.mobile.ios.mios.xcodeprojreader.ProjectFile;
2424

25-
public class CopyFilesBuildPhase extends BuildPhase
25+
public class PBXCopyFilesBuildPhase extends BuildPhase
2626
{
2727
public static final String isa = "PBXCopyFilesBuildPhase";
2828

29-
public CopyFilesBuildPhase(ProjectFile projectFile)
29+
public PBXCopyFilesBuildPhase(ProjectFile projectFile)
3030
{
3131
this(projectFile, projectFile.createDict());
3232
}
3333

34-
CopyFilesBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
34+
PBXCopyFilesBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
3535
{
3636
super(projectFile, buildConfigurationList);
3737
}

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/FrameworksBuildPhase.java renamed to src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/PBXFrameworksBuildPhase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
import com.sap.prd.mobile.ios.mios.xcodeprojreader.Dict;
2323
import com.sap.prd.mobile.ios.mios.xcodeprojreader.ProjectFile;
2424

25-
public class FrameworksBuildPhase extends BuildPhase
25+
public class PBXFrameworksBuildPhase extends BuildPhase
2626
{
2727
public static final String isa = "PBXFrameworksBuildPhase";
2828

29-
public FrameworksBuildPhase(ProjectFile projectFile)
29+
public PBXFrameworksBuildPhase(ProjectFile projectFile)
3030
{
3131
this(projectFile, projectFile.createDict());
3232
}
3333

34-
FrameworksBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
34+
PBXFrameworksBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
3535
{
3636
super(projectFile, buildConfigurationList);
3737
}

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/HeadersBuildPhase.java renamed to src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/PBXHeadersBuildPhase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
import com.sap.prd.mobile.ios.mios.xcodeprojreader.Dict;
2323
import com.sap.prd.mobile.ios.mios.xcodeprojreader.ProjectFile;
2424

25-
public class HeadersBuildPhase extends BuildPhase
25+
public class PBXHeadersBuildPhase extends BuildPhase
2626
{
2727
public static final String isa = "PBXHeadersBuildPhase";
2828

29-
public HeadersBuildPhase(ProjectFile projectFile)
29+
public PBXHeadersBuildPhase(ProjectFile projectFile)
3030
{
3131
this(projectFile, projectFile.createDict());
3232
}
3333

34-
HeadersBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
34+
PBXHeadersBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
3535
{
3636
super(projectFile, buildConfigurationList);
3737
}

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/ResourcesBuildPhase.java renamed to src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/PBXResourcesBuildPhase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
import com.sap.prd.mobile.ios.mios.xcodeprojreader.Dict;
2323
import com.sap.prd.mobile.ios.mios.xcodeprojreader.ProjectFile;
2424

25-
public class ResourcesBuildPhase extends BuildPhase
25+
public class PBXResourcesBuildPhase extends BuildPhase
2626
{
2727
public static final String isa = "PBXResourcesBuildPhase";
2828

29-
public ResourcesBuildPhase(ProjectFile projectFile)
29+
public PBXResourcesBuildPhase(ProjectFile projectFile)
3030
{
3131
this(projectFile, projectFile.createDict());
3232
}
3333

34-
ResourcesBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
34+
PBXResourcesBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
3535
{
3636
super(projectFile, buildConfigurationList);
3737
}

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/ShellScriptBuildPhase.java renamed to src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/PBXShellScriptBuildPhase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@
2525
import com.sap.prd.mobile.ios.mios.xcodeprojreader.ProjectFile;
2626
import com.sap.prd.mobile.ios.mios.xcodeprojreader.ReferenceArray;
2727

28-
public class ShellScriptBuildPhase extends BuildPhase
28+
public class PBXShellScriptBuildPhase extends BuildPhase
2929
{
3030
public static final String isa = "PBXShellScriptBuildPhase";
3131

32-
public ShellScriptBuildPhase(ProjectFile projectFile)
32+
public PBXShellScriptBuildPhase(ProjectFile projectFile)
3333
{
3434
this(projectFile, projectFile.createDict());
3535
}
3636

37-
public ShellScriptBuildPhase(ProjectFile projectFile, Dict dict)
37+
public PBXShellScriptBuildPhase(ProjectFile projectFile, Dict dict)
3838
{
3939
super(projectFile, dict);
4040
}

src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/SourcesBuildPhase.java renamed to src/main/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/buildphases/PBXSourcesBuildPhase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
import com.sap.prd.mobile.ios.mios.xcodeprojreader.Dict;
2323
import com.sap.prd.mobile.ios.mios.xcodeprojreader.ProjectFile;
2424

25-
public class SourcesBuildPhase extends BuildPhase
25+
public class PBXSourcesBuildPhase extends BuildPhase
2626
{
2727
public static final String isa = "PBXSourcesBuildPhase";
2828

29-
public SourcesBuildPhase(ProjectFile projectFile)
29+
public PBXSourcesBuildPhase(ProjectFile projectFile)
3030
{
3131
this(projectFile, projectFile.createDict());
3232
}
3333

34-
SourcesBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
34+
PBXSourcesBuildPhase(ProjectFile projectFile, Dict buildConfigurationList)
3535
{
3636
super(projectFile, buildConfigurationList);
3737
}

src/test/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/ShellScriptBuildPhaseTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.junit.Before;
2626
import org.junit.Test;
2727

28-
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.ShellScriptBuildPhase;
28+
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.PBXShellScriptBuildPhase;
2929

3030
public class ShellScriptBuildPhaseTest
3131
{
@@ -40,7 +40,7 @@ public void before() throws Exception
4040
@Test
4141
public void defaultValues()
4242
{
43-
ShellScriptBuildPhase phase = new ShellScriptBuildPhase(projectFile);
43+
PBXShellScriptBuildPhase phase = new PBXShellScriptBuildPhase(projectFile);
4444

4545
assertNull(phase.getIsA());
4646
assertEquals(0, phase.getFiles().size());
@@ -51,7 +51,7 @@ public void defaultValues()
5151

5252
phase.setDefaultValues();
5353

54-
assertEquals(ShellScriptBuildPhase.isa, phase.getIsA());
54+
assertEquals(PBXShellScriptBuildPhase.isa, phase.getIsA());
5555
assertEquals(0, phase.getFiles().size());
5656
assertEquals(0, phase.getInputPaths().size());
5757
assertEquals(0, phase.getOutputPaths().size());
@@ -62,7 +62,7 @@ public void defaultValues()
6262
@Test
6363
public void shellPath()
6464
{
65-
ShellScriptBuildPhase phase = new ShellScriptBuildPhase(projectFile);
65+
PBXShellScriptBuildPhase phase = new PBXShellScriptBuildPhase(projectFile);
6666
phase.setShellScript("env > test.txt");
6767
assertEquals("env > test.txt", phase.getShellScript());
6868
}

src/test/java/com/sap/prd/mobile/ios/mios/xcodeprojreader/TargetTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import org.junit.Test;
2727

2828
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.BuildPhase;
29-
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.FrameworksBuildPhase;
30-
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.ResourcesBuildPhase;
31-
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.SourcesBuildPhase;
29+
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.PBXFrameworksBuildPhase;
30+
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.PBXResourcesBuildPhase;
31+
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.PBXSourcesBuildPhase;
3232

3333
public class TargetTest
3434
{
@@ -51,8 +51,8 @@ public void buildPhases()
5151
{
5252
ReferenceArray<BuildPhase> buildPhases = target.getBuildPhases();
5353
assertEquals(3, buildPhases.size());
54-
assertEquals(SourcesBuildPhase.isa, buildPhases.get(0).getIsA());
55-
assertEquals(FrameworksBuildPhase.isa, buildPhases.get(1).getIsA());
56-
assertEquals(ResourcesBuildPhase.isa, buildPhases.get(2).getIsA());
54+
assertEquals(PBXSourcesBuildPhase.isa, buildPhases.get(0).getIsA());
55+
assertEquals(PBXFrameworksBuildPhase.isa, buildPhases.get(1).getIsA());
56+
assertEquals(PBXResourcesBuildPhase.isa, buildPhases.get(2).getIsA());
5757
}
5858
}

0 commit comments

Comments
 (0)