[FELIX-4942] Upgrade to latest felix parent, fix jdk 5 compatibility issues
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1690734 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/resolver/pom.xml b/resolver/pom.xml
index 5a756d2..1c8cd58 100644
--- a/resolver/pom.xml
+++ b/resolver/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.apache.felix</groupId>
<artifactId>felix-parent</artifactId>
- <version>2.1</version>
+ <version>3</version>
<relativePath>../pom/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -55,24 +55,20 @@
<scope>test</scope>
</dependency>
</dependencies>
+ <properties>
+ <felix.java.version>5</felix.java.version>
+ </properties>
<build>
<plugins>
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <target>1.5</target>
- <source>1.5</source>
- </configuration>
- </plugin>
- <plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
- <version>2.3.7</version>
+ <version>2.5.4</version>
<extensions>true</extensions>
<configuration>
<instructions>
<_sources>true</_sources>
+ <_sourcepath>${build.sourceDirectory}</_sourcepath>
<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
<Bundle-Activator>
org.apache.felix.resolver.Activator
diff --git a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
index 481f0fb..9a98d33 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -1002,7 +1002,7 @@
// else
{
String s = candSourceCap.getDirectives().get(Namespace.CAPABILITY_USES_DIRECTIVE);
- if (s != null && !s.isEmpty())
+ if (s != null && s.length() > 0)
{
// Parse these uses directive.
uses = session.getUsesCache().get(s);
@@ -1710,7 +1710,7 @@
// uses constraints so they are included for consistency
// checking.
String uses = sourceCap.getDirectives().get(Namespace.CAPABILITY_USES_DIRECTIVE);
- if ((uses != null) && !uses.isEmpty())
+ if ((uses != null) && uses.length() > 0)
{
sources.put(sourceCap, Collections.singleton(sourceCap));
}
diff --git a/resolver/src/main/java/org/apache/felix/resolver/util/ArrayMap.java b/resolver/src/main/java/org/apache/felix/resolver/util/ArrayMap.java
index 86bef20..b4a559c 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/util/ArrayMap.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/util/ArrayMap.java
@@ -19,7 +19,6 @@
package org.apache.felix.resolver.util;
import java.util.*;
-import java.util.function.Function;
@SuppressWarnings("NullableProblems")
public class ArrayMap<K, V> extends AbstractMap<K, V> {
@@ -92,23 +91,6 @@
throw new UnsupportedOperationException();
}
- @SuppressWarnings("unchecked")
- public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {
- for (int i = 0, l = size << 1; i < l; i += 2) {
- if (key.equals(table[i])) {
- return (V) table[i + 1];
- }
- }
- if (size << 1 == table.length) {
- Object[] n = new Object[table.length << 1];
- System.arraycopy(table, 0, n, 0, table.length);
- table = n;
- }
- int i = size++ << 1;
- table[i++] = key;
- return (V) (table[i] = mappingFunction.apply(key));
- }
-
@Override
public Collection<V> values() {
if (values == null) {
diff --git a/resolver/src/main/java/org/apache/felix/resolver/util/CopyOnWriteList.java b/resolver/src/main/java/org/apache/felix/resolver/util/CopyOnWriteList.java
index 4af5dfa..b11e15b 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/util/CopyOnWriteList.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/util/CopyOnWriteList.java
@@ -18,6 +18,7 @@
*/
package org.apache.felix.resolver.util;
+import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
@@ -52,7 +53,7 @@
@SuppressWarnings("unchecked")
public E set(int index, E element) {
- data = Arrays.copyOf(data, data.length);
+ data = CopyOnWriteSet.copyOf(data, data.length);
E prev = (E) data[index];
data[index] = element;
return prev;
@@ -123,7 +124,7 @@
int size = data.length;
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
- return (T[]) Arrays.copyOf(data, size, a.getClass());
+ return (T[]) CopyOnWriteSet.copyOf(data, size, a.getClass());
System.arraycopy(data, 0, a, 0, size);
if (a.length > size)
a[size] = null;
@@ -191,7 +192,7 @@
}
}
if (modified) {
- data = Arrays.copyOf(d, idx);
+ data = CopyOnWriteSet.copyOf(d, idx);
}
return modified;
}
diff --git a/resolver/src/main/java/org/apache/felix/resolver/util/CopyOnWriteSet.java b/resolver/src/main/java/org/apache/felix/resolver/util/CopyOnWriteSet.java
index b007b14..92419f3 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/util/CopyOnWriteSet.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/util/CopyOnWriteSet.java
@@ -18,6 +18,7 @@
*/
package org.apache.felix.resolver.util;
+import java.lang.reflect.Array;
import java.util.AbstractSet;
import java.util.Arrays;
import java.util.Collection;
@@ -102,7 +103,7 @@
int size = data.length;
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
- return (T[]) Arrays.copyOf(data, size, a.getClass());
+ return (T[]) copyOf(data, size, a.getClass());
System.arraycopy(data, 0, a, 0, size);
if (a.length > size)
a[size] = null;
@@ -211,7 +212,7 @@
cs[added++] = e;
}
if (added > 0) {
- Object[] newElements = Arrays.copyOf(elements, len + added);
+ Object[] newElements = copyOf(elements, len + added);
System.arraycopy(cs, 0, newElements, len, added);
data = newElements;
return true;
@@ -231,4 +232,20 @@
throw new UnsupportedOperationException();
}
+ @SuppressWarnings("unchecked")
+ public static <T> T[] copyOf(T[] original, int newLength) {
+ return (T[]) copyOf(original, newLength, original.getClass());
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
+ T[] copy;
+ if ((Object) newType == Object[].class) {
+ copy = (T[]) new Object[newLength];
+ } else {
+ copy = (T[]) Array.newInstance(newType.getComponentType(), newLength);
+ }
+ System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));
+ return copy;
+ }
}