|
|
@@ -140,6 +140,9 @@ public class Project implements ResourceFactory { |
|
|
|
private String description; |
|
|
|
|
|
|
|
|
|
|
|
/** lock object used when adding/removing references */ |
|
|
|
private final Object referencesLock = new Object(); |
|
|
|
|
|
|
|
/** Map of references within the project (paths etc) (String to Object). */ |
|
|
|
private final Hashtable<String, Object> references = new AntRefTable(); |
|
|
|
|
|
|
@@ -1971,17 +1974,19 @@ public class Project implements ResourceFactory { |
|
|
|
* @param value The value of the reference. |
|
|
|
*/ |
|
|
|
public void addReference(final String referenceName, final Object value) { |
|
|
|
final Object old = ((AntRefTable) references).getReal(referenceName); |
|
|
|
if (old == value) { |
|
|
|
// no warning, this is not changing anything |
|
|
|
return; |
|
|
|
} |
|
|
|
if (old != null && !(old instanceof UnknownElement)) { |
|
|
|
log("Overriding previous definition of reference to " + referenceName, |
|
|
|
MSG_VERBOSE); |
|
|
|
synchronized (referencesLock) { |
|
|
|
final Object old = ((AntRefTable) references).getReal(referenceName); |
|
|
|
if (old == value) { |
|
|
|
// no warning, this is not changing anything |
|
|
|
return; |
|
|
|
} |
|
|
|
if (old != null && !(old instanceof UnknownElement)) { |
|
|
|
log("Overriding previous definition of reference to " + referenceName, |
|
|
|
MSG_VERBOSE); |
|
|
|
} |
|
|
|
log("Adding reference: " + referenceName, MSG_DEBUG); |
|
|
|
references.put(referenceName, value); |
|
|
|
} |
|
|
|
log("Adding reference: " + referenceName, MSG_DEBUG); |
|
|
|
references.put(referenceName, value); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -2002,7 +2007,9 @@ public class Project implements ResourceFactory { |
|
|
|
* @since Ant 1.8.0 |
|
|
|
*/ |
|
|
|
public boolean hasReference(final String key) { |
|
|
|
return references.containsKey(key); |
|
|
|
synchronized (referencesLock) { |
|
|
|
return references.containsKey(key); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -2015,7 +2022,9 @@ public class Project implements ResourceFactory { |
|
|
|
* @since Ant 1.8.1 |
|
|
|
*/ |
|
|
|
public Map<String, Object> getCopyOfReferences() { |
|
|
|
return new HashMap<>(references); |
|
|
|
synchronized (referencesLock) { |
|
|
|
return new HashMap<>(references); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -2029,11 +2038,14 @@ public class Project implements ResourceFactory { |
|
|
|
* there is no such reference in the project, with type inference. |
|
|
|
*/ |
|
|
|
public <T> T getReference(final String key) { |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
final T ret = (T) references.get(key); |
|
|
|
if (ret != null) { |
|
|
|
return ret; |
|
|
|
synchronized (referencesLock) { |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
final T ret = (T) references.get(key); |
|
|
|
if (ret != null) { |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (!key.equals(MagicNames.REFID_PROPERTY_HELPER)) { |
|
|
|
try { |
|
|
|
if (PropertyHelper.getPropertyHelper(this).containsProperties(key)) { |
|
|
|