1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.github.maven_nar.cpptasks.types;
21
22 import java.util.Vector;
23
24 import org.apache.tools.ant.BuildException;
25
26 import com.github.maven_nar.cpptasks.CUtil;
27
28
29
30
31
32
33
34
35
36 public class UndefineArgument {
37
38
39
40
41
42
43
44
45 public static UndefineArgument[] merge(final UndefineArgument[] base, final UndefineArgument[] override) {
46 if (base.length == 0) {
47 final UndefineArgument[] overrideClone = override.clone();
48 return overrideClone;
49 }
50 if (override.length == 0) {
51 final UndefineArgument[] baseClone = base.clone();
52 return baseClone;
53 }
54 final Vector<UndefineArgument> unduplicated = new Vector<>(base.length);
55 for (final UndefineArgument current : base) {
56 final String currentName = current.getName();
57 boolean match = false;
58 if (currentName == null) {
59 match = true;
60 } else {
61 for (final UndefineArgument over : override) {
62 final String overName = over.getName();
63 if (overName != null && overName.equals(currentName)) {
64 match = true;
65 break;
66 }
67 }
68 }
69 if (!match) {
70 unduplicated.addElement(current);
71 }
72 }
73 final UndefineArgument[] combined = new UndefineArgument[unduplicated.size() + override.length];
74 unduplicated.copyInto(combined);
75 final int offset = unduplicated.size();
76 System.arraycopy(override, 0, combined, offset + 0, override.length);
77 return combined;
78 }
79
80 private boolean define = false;
81 private String ifCond;
82 private String name;
83 private String unlessCond;
84
85 public UndefineArgument() {
86 }
87
88 protected UndefineArgument(final boolean isDefine) {
89 this.define = isDefine;
90 }
91
92 public void execute() throws org.apache.tools.ant.BuildException {
93 throw new org.apache.tools.ant.BuildException("Not an actual task, but looks like one for documentation purposes");
94 }
95
96
97 public final String getName() {
98 return this.name;
99 }
100
101
102 public String getValue() {
103 return null;
104 }
105
106
107
108
109
110
111
112
113 public final boolean isActive(final org.apache.tools.ant.Project p) throws BuildException {
114 if (this.name == null) {
115 throw new BuildException("<define> is missing name attribute");
116 }
117 return CUtil.isActive(p, this.ifCond, this.unlessCond);
118 }
119
120
121 public final boolean isDefine() {
122 return this.define;
123 }
124
125
126
127
128
129
130
131
132
133
134
135
136
137 public final void setIf(final String propName) {
138 this.ifCond = propName;
139 }
140
141
142 public final void setName(final String name) {
143 this.name = name;
144 }
145
146
147
148
149
150
151
152
153
154
155
156
157
158 public final void setUnless(final String propName) {
159 this.unlessCond = propName;
160 }
161 }