summaryrefslogtreecommitdiffstats
path: root/sched
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2014-04-25 12:37:15 +0200
committerYohann Roussel <yroussel@google.com>2014-04-25 14:20:21 +0200
commitb9ea99561022fdddd0778378aad5cd7b6930b1e8 (patch)
treee2754fcdf73cdfa5168c9fb8a7146af5c85cfafc /sched
parentda135917083d31980485c49885a28467a4aeb78a (diff)
downloadtoolchain_jack-b9ea99561022fdddd0778378aad5cd7b6930b1e8.zip
toolchain_jack-b9ea99561022fdddd0778378aad5cd7b6930b1e8.tar.gz
toolchain_jack-b9ea99561022fdddd0778378aad5cd7b6930b1e8.tar.bz2
Replace abstract class AbstractMarkerManager by an interface.
Change-Id: I0520b0704c7b00fe6836d95e33270d879652405c
Diffstat (limited to 'sched')
-rw-r--r--sched/src/com/android/sched/marker/AbstractMarkerManager.java9
-rw-r--r--sched/src/com/android/sched/marker/LocalMarkerManager.java2
-rw-r--r--sched/src/com/android/sched/marker/ManagedMarker.java26
-rw-r--r--sched/src/com/android/sched/marker/MarkerManager.java106
-rw-r--r--sched/src/com/android/sched/marker/StaticMarkerManager.java133
-rw-r--r--sched/src/com/android/sched/marker/ValidOn.java2
-rw-r--r--sched/src/com/android/sched/util/sched/ManagedDataAsDot.java4
-rw-r--r--sched/tests/com/android/sched/item/ItemsTest.java4
-rw-r--r--sched/tests/com/android/sched/marker/ManagedMarkerTest.java2
-rw-r--r--sched/tests/com/android/sched/marker/MarkedA.java2
-rw-r--r--sched/tests/com/android/sched/marker/MarkedB.java2
-rw-r--r--sched/tests/com/android/sched/marker/MarkedC.java2
-rw-r--r--sched/tests/com/android/sched/marker/MarkerManagerTest.java8
13 files changed, 174 insertions, 128 deletions
diff --git a/sched/src/com/android/sched/marker/AbstractMarkerManager.java b/sched/src/com/android/sched/marker/AbstractMarkerManager.java
index d7ee8ea..f193e36 100644
--- a/sched/src/com/android/sched/marker/AbstractMarkerManager.java
+++ b/sched/src/com/android/sched/marker/AbstractMarkerManager.java
@@ -44,9 +44,9 @@ import javax.annotation.Nonnull;
/**
* Provides {@link Marker}-managing abilities to its subclasses.
* <p>This is a skeletal implementation. Two full implementations are available:
- * {@link MarkerManager} and {@link LocalMarkerManager}.
+ * {@link StaticMarkerManager} and {@link LocalMarkerManager}.
*/
-public abstract class AbstractMarkerManager {
+abstract class AbstractMarkerManager implements MarkerManager {
@Nonnull
private static final Logger logger = LoggerFactory.getLogger();
@@ -64,16 +64,21 @@ public abstract class AbstractMarkerManager {
assert map != null;
}
+ @Override
@CheckForNull
public abstract <T extends Marker> T removeMarker(@Nonnull Class<T> c);
+ @Override
public abstract <T extends Marker> boolean containsMarker(@Nonnull Class<T> c);
+ @Override
public abstract void addMarker(@Nonnull Marker m);
+ @Override
@Nonnull
public abstract Collection<Marker> getAllMarkers();
+ @Override
@CheckForNull
public abstract <T extends Marker> T getMarker(@Nonnull Class<T> c);
diff --git a/sched/src/com/android/sched/marker/LocalMarkerManager.java b/sched/src/com/android/sched/marker/LocalMarkerManager.java
index 08979c3..d332a35 100644
--- a/sched/src/com/android/sched/marker/LocalMarkerManager.java
+++ b/sched/src/com/android/sched/marker/LocalMarkerManager.java
@@ -30,7 +30,7 @@ import javax.annotation.Nonnull;
/**
* Provides {@link Marker}-managing abilities to its subclasses.
- * Similar to {@link MarkerManager} but its data structures are stored in each instance.
+ * Similar to {@link StaticMarkerManager} but its data structures are stored in each instance.
*/
public class LocalMarkerManager extends AbstractMarkerManager {
@Nonnull
diff --git a/sched/src/com/android/sched/marker/ManagedMarker.java b/sched/src/com/android/sched/marker/ManagedMarker.java
index 91c124e..cba15c2 100644
--- a/sched/src/com/android/sched/marker/ManagedMarker.java
+++ b/sched/src/com/android/sched/marker/ManagedMarker.java
@@ -49,7 +49,7 @@ public class ManagedMarker {
// @ValidOn
@Nonnull
- private Class<? extends AbstractMarkerManager>[] staticValidOn;
+ private Class<? extends MarkerManager>[] staticValidOn;
// @DynamicValidOn
@Nonnull
@@ -59,7 +59,7 @@ public class ManagedMarker {
* Represents an extracted {@link DynamicValidOn} annotation.
*/
public static class InternalDynamicValidOn {
- public Class<? extends AbstractMarkerManager> getValidOn() {
+ public Class<? extends MarkerManager> getValidOn() {
return validOn;
}
@@ -67,7 +67,7 @@ public class ManagedMarker {
return method;
}
- private Class<? extends AbstractMarkerManager> validOn;
+ private Class<? extends MarkerManager> validOn;
private Method method;
@Override
@@ -111,7 +111,7 @@ public class ManagedMarker {
}
@Nonnull
- public Class<? extends AbstractMarkerManager>[] getStaticValidOn() {
+ public Class<? extends MarkerManager>[] getStaticValidOn() {
return staticValidOn.clone();
}
@@ -120,8 +120,8 @@ public class ManagedMarker {
return dynamicValidOn;
}
- public boolean isValidMarker(@Nonnull AbstractMarkerManager marked) {
- for (Class<? extends AbstractMarkerManager> cls : staticValidOn) {
+ public boolean isValidMarker(@Nonnull MarkerManager marked) {
+ for (Class<? extends MarkerManager> cls : staticValidOn) {
if (cls.isAssignableFrom(marked.getClass())) {
return true;
}
@@ -136,8 +136,8 @@ public class ManagedMarker {
return false;
}
- public boolean isValidMarker(@Nonnull AbstractMarkerManager marked, @Nonnull Marker m) {
- for (Class<? extends AbstractMarkerManager> cls : staticValidOn) {
+ public boolean isValidMarker(@Nonnull MarkerManager marked, @Nonnull Marker m) {
+ for (Class<? extends MarkerManager> cls : staticValidOn) {
if (cls.isAssignableFrom(marked.getClass())) {
return true;
}
@@ -181,7 +181,7 @@ public class ManagedMarker {
sb.append("), static valid on [");
boolean first = true;
- for (Class<? extends AbstractMarkerManager> cls : staticValidOn) {
+ for (Class<? extends MarkerManager> cls : staticValidOn) {
if (!first) {
sb.append(", ");
} else {
@@ -239,13 +239,13 @@ public class ManagedMarker {
+ DynamicValidOn.class.getSimpleName() + " must have a single parameter");
}
- if (!AbstractMarkerManager.class.isAssignableFrom(method.getParameterTypes()[0])) {
+ if (!MarkerManager.class.isAssignableFrom(method.getParameterTypes()[0])) {
throw new MarkerNotConformException("Annotated method '" + method + "' with @"
+ DynamicValidOn.class.getSimpleName() + " must have a parameter assignable from "
- + AbstractMarkerManager.class.getSimpleName());
+ + MarkerManager.class.getSimpleName());
}
- for (Class<? extends AbstractMarkerManager> marked : staticValidOn) {
+ for (Class<? extends MarkerManager> marked : staticValidOn) {
if (marked.isAssignableFrom(method.getParameterTypes()[0])) {
throw new MarkerNotConformException("Marker '" + name + "' cannot have both a static @'"
+ ValidOn.class.getName() + " (on class '" + marker.getCanonicalName()
@@ -264,7 +264,7 @@ public class ManagedMarker {
InternalDynamicValidOn dvo = new InternalDynamicValidOn();
- dvo.validOn = (Class<? extends AbstractMarkerManager>) (method.getParameterTypes()[0]);
+ dvo.validOn = (Class<? extends MarkerManager>) (method.getParameterTypes()[0]);
dvo.method = method;
dynamicValidOn.add(dvo);
}
diff --git a/sched/src/com/android/sched/marker/MarkerManager.java b/sched/src/com/android/sched/marker/MarkerManager.java
index 80685c6..392d011 100644
--- a/sched/src/com/android/sched/marker/MarkerManager.java
+++ b/sched/src/com/android/sched/marker/MarkerManager.java
@@ -16,118 +16,26 @@
package com.android.sched.marker;
-import com.android.sched.item.Items;
-
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/**
* Provides {@link Marker}-managing abilities to its subclasses.
- * Similar to {@link LocalMarkerManager} but its data structures are stored statically in a
- * {@code HashMap}.
*/
-public class MarkerManager extends AbstractMarkerManager {
- @Nonnull
- private static final Map<Class<? extends Marker>, Map<MarkerManager, Marker>> mapByMarker =
- new HashMap<Class<? extends Marker>, Map<MarkerManager, Marker>>();
-
- @Override
- public void addMarker(@Nonnull Marker marker) {
- assert isValidMarker(marker.getClass()) : "Marker '" + Items.getName(marker.getClass())
- + "' is not supported for class '" + this.getClass().getName() + "'";
-
- assert checkAddAccess(marker.getClass());
-
- Map<MarkerManager, Marker> mapByMarked = mapByMarker.get(marker.getClass());
- if (mapByMarked == null) {
- mapByMarked = new HashMap<MarkerManager, Marker>();
- mapByMarker.put(marker.getClass(), mapByMarked);
- }
-
- assert mapByMarked.get(this) == null : "Marker '" + Items.getName(marker.getClass())
- + "' already exists";
-
- mapByMarked.put(this, marker);
- }
-
- public void addAllMarker(@Nonnull Collection<Marker> collection) {
- assert collection != null;
-
- Iterator<Marker> iter = collection.iterator();
- while (iter.hasNext()) {
- addMarker(iter.next());
- }
- }
-
- @Nonnull
- @Override
- public Collection<Marker> getAllMarkers() {
- Collection<Marker> c = new ArrayList<Marker>();
+public interface MarkerManager {
- for (Map<MarkerManager, Marker> mapByMarked : mapByMarker.values()) {
- if (mapByMarked.get(this) != null) {
- Marker marker = mapByMarked.get(this);
-
- assert checkGetAccess(marker.getClass());
- c.add(marker);
- }
- }
-
- return c;
- }
-
- @Override
@CheckForNull
- @SuppressWarnings(value = "unchecked")
- public <T extends Marker> T getMarker(@Nonnull Class<T> cls) {
- assert isValidMarker(cls) : "Marker '" + Items.getName(cls) + "' is not supported for class '"
- + this.getClass().getName() + "'";
-
- Map<MarkerManager, Marker> mapByMarked = mapByMarker.get(cls);
- if (mapByMarked == null) {
- return null;
- }
-
- // TODO(mikaelpeltier) Re-enable sanity check support when getMarker will be supported even if
- // there is no need on the marker.
- // assert checkGetAccess(cls);
+ public abstract <T extends Marker> T removeMarker(@Nonnull Class<T> cls);
- return (T) mapByMarked.get(this);
- }
+ public abstract <T extends Marker> boolean containsMarker(@Nonnull Class<T> cls);
- @Override
- public <T extends Marker> boolean containsMarker(@Nonnull Class<T> cls) {
- assert isValidMarker(cls) : "Marker '" + Items.getName(cls) + "' is not supported for class '"
- + this.getClass().getName() + "'";
+ public abstract void addMarker(@Nonnull Marker m);
- Map<MarkerManager, Marker> mapByMarked = mapByMarker.get(cls);
- if (mapByMarked == null) {
- return false;
- }
-
- return mapByMarked.containsKey(this);
- }
+ @Nonnull
+ public abstract Collection<Marker> getAllMarkers();
- @Override
@CheckForNull
- @SuppressWarnings(value = "unchecked")
- public <T extends Marker> T removeMarker(@Nonnull Class<T> cls) {
- assert isValidMarker(cls) : "Marker '" + Items.getName(cls) + "' is not supported for class '"
- + this.getClass().getName() + "'";
-
- Map<MarkerManager, Marker> mapByMarked = mapByMarker.get(cls);
- if (mapByMarked == null) {
- return null;
- }
-
- assert checkRemoveAccess(cls);
-
- return (T) mapByMarked.remove(this);
- }
+ public abstract <T extends Marker> T getMarker(@Nonnull Class<T> cls);
}
diff --git a/sched/src/com/android/sched/marker/StaticMarkerManager.java b/sched/src/com/android/sched/marker/StaticMarkerManager.java
new file mode 100644
index 0000000..b08fe60
--- /dev/null
+++ b/sched/src/com/android/sched/marker/StaticMarkerManager.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.sched.marker;
+
+import com.android.sched.item.Items;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+/**
+ * Provides {@link Marker}-managing abilities to its subclasses.
+ * Similar to {@link LocalMarkerManager} but its data structures are stored statically in a
+ * {@code HashMap}.
+ */
+public class StaticMarkerManager extends AbstractMarkerManager {
+ @Nonnull
+ private static final Map<Class<? extends Marker>, Map<StaticMarkerManager, Marker>> mapByMarker =
+ new HashMap<Class<? extends Marker>, Map<StaticMarkerManager, Marker>>();
+
+ @Override
+ public void addMarker(@Nonnull Marker marker) {
+ assert isValidMarker(marker.getClass()) : "Marker '" + Items.getName(marker.getClass())
+ + "' is not supported for class '" + this.getClass().getName() + "'";
+
+ assert checkAddAccess(marker.getClass());
+
+ Map<StaticMarkerManager, Marker> mapByMarked = mapByMarker.get(marker.getClass());
+ if (mapByMarked == null) {
+ mapByMarked = new HashMap<StaticMarkerManager, Marker>();
+ mapByMarker.put(marker.getClass(), mapByMarked);
+ }
+
+ assert mapByMarked.get(this) == null : "Marker '" + Items.getName(marker.getClass())
+ + "' already exists";
+
+ mapByMarked.put(this, marker);
+ }
+
+ public void addAllMarker(@Nonnull Collection<Marker> collection) {
+ assert collection != null;
+
+ Iterator<Marker> iter = collection.iterator();
+ while (iter.hasNext()) {
+ addMarker(iter.next());
+ }
+ }
+
+ @Nonnull
+ @Override
+ public Collection<Marker> getAllMarkers() {
+ Collection<Marker> c = new ArrayList<Marker>();
+
+ for (Map<StaticMarkerManager, Marker> mapByMarked : mapByMarker.values()) {
+ if (mapByMarked.get(this) != null) {
+ Marker marker = mapByMarked.get(this);
+
+ assert checkGetAccess(marker.getClass());
+ c.add(marker);
+ }
+ }
+
+ return c;
+ }
+
+ @Override
+ @CheckForNull
+ @SuppressWarnings(value = "unchecked")
+ public <T extends Marker> T getMarker(@Nonnull Class<T> cls) {
+ assert isValidMarker(cls) : "Marker '" + Items.getName(cls) + "' is not supported for class '"
+ + this.getClass().getName() + "'";
+
+ Map<StaticMarkerManager, Marker> mapByMarked = mapByMarker.get(cls);
+ if (mapByMarked == null) {
+ return null;
+ }
+
+ // TODO(mikaelpeltier) Re-enable sanity check support when getMarker will be supported even if
+ // there is no need on the marker.
+ // assert checkGetAccess(cls);
+
+ return (T) mapByMarked.get(this);
+ }
+
+ @Override
+ public <T extends Marker> boolean containsMarker(@Nonnull Class<T> cls) {
+ assert isValidMarker(cls) : "Marker '" + Items.getName(cls) + "' is not supported for class '"
+ + this.getClass().getName() + "'";
+
+ Map<StaticMarkerManager, Marker> mapByMarked = mapByMarker.get(cls);
+ if (mapByMarked == null) {
+ return false;
+ }
+
+ return mapByMarked.containsKey(this);
+ }
+
+ @Override
+ @CheckForNull
+ @SuppressWarnings(value = "unchecked")
+ public <T extends Marker> T removeMarker(@Nonnull Class<T> cls) {
+ assert isValidMarker(cls) : "Marker '" + Items.getName(cls) + "' is not supported for class '"
+ + this.getClass().getName() + "'";
+
+ Map<StaticMarkerManager, Marker> mapByMarked = mapByMarker.get(cls);
+ if (mapByMarked == null) {
+ return null;
+ }
+
+ assert checkRemoveAccess(cls);
+
+ return (T) mapByMarked.remove(this);
+ }
+}
diff --git a/sched/src/com/android/sched/marker/ValidOn.java b/sched/src/com/android/sched/marker/ValidOn.java
index 21e6120..c2e4b59 100644
--- a/sched/src/com/android/sched/marker/ValidOn.java
+++ b/sched/src/com/android/sched/marker/ValidOn.java
@@ -29,5 +29,5 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ValidOn {
- public Class<? extends AbstractMarkerManager>[] value();
+ public Class<? extends MarkerManager>[] value();
}
diff --git a/sched/src/com/android/sched/util/sched/ManagedDataAsDot.java b/sched/src/com/android/sched/util/sched/ManagedDataAsDot.java
index fe34758..7b87421 100644
--- a/sched/src/com/android/sched/util/sched/ManagedDataAsDot.java
+++ b/sched/src/com/android/sched/util/sched/ManagedDataAsDot.java
@@ -22,9 +22,9 @@ import com.android.sched.item.ItemManager;
import com.android.sched.item.Items;
import com.android.sched.item.ManagedItem;
import com.android.sched.item.Production;
-import com.android.sched.marker.AbstractMarkerManager;
import com.android.sched.marker.ManagedMarker;
import com.android.sched.marker.Marker;
+import com.android.sched.marker.MarkerManager;
import com.android.sched.marker.MarkerNotConformException;
import com.android.sched.scheduler.FeatureSet;
import com.android.sched.scheduler.ManagedRunnable;
@@ -193,7 +193,7 @@ public class ManagedDataAsDot implements ManagedDataListener {
out.println(" <TR><TD PORT=\"header\" BGCOLOR=\"black\"><FONT COLOR=\"white\">"
+ marker.getName() + "</FONT></TD></TR>");
- for (Class<? extends AbstractMarkerManager> cls : marker.getStaticValidOn()) {
+ for (Class<? extends MarkerManager> cls : marker.getStaticValidOn()) {
out.println(" <TR><TD>" + cls.getSimpleName() + "</TD></TR>");
}
diff --git a/sched/tests/com/android/sched/item/ItemsTest.java b/sched/tests/com/android/sched/item/ItemsTest.java
index 9f5893e..9f306ed 100644
--- a/sched/tests/com/android/sched/item/ItemsTest.java
+++ b/sched/tests/com/android/sched/item/ItemsTest.java
@@ -24,7 +24,7 @@ import com.android.sched.marker.Marker3;
import com.android.sched.marker.Marker4;
import com.android.sched.marker.Marker5;
import com.android.sched.marker.Marker6;
-import com.android.sched.marker.MarkerManager;
+import com.android.sched.marker.StaticMarkerManager;
import org.junit.After;
import org.junit.Before;
@@ -34,7 +34,7 @@ public class ItemsTest {
@Before
public void setUp() throws Exception {
- MarkerManager.class.getClassLoader().setDefaultAssertionStatus(true);
+ StaticMarkerManager.class.getClassLoader().setDefaultAssertionStatus(true);
}
@After
diff --git a/sched/tests/com/android/sched/marker/ManagedMarkerTest.java b/sched/tests/com/android/sched/marker/ManagedMarkerTest.java
index 66c7e58..0519e14 100644
--- a/sched/tests/com/android/sched/marker/ManagedMarkerTest.java
+++ b/sched/tests/com/android/sched/marker/ManagedMarkerTest.java
@@ -24,7 +24,7 @@ import org.junit.Test;
public class ManagedMarkerTest {
@Before
public void setUp() {
- MarkerManager.class.getClassLoader().setDefaultAssertionStatus(true);
+ StaticMarkerManager.class.getClassLoader().setDefaultAssertionStatus(true);
}
@Test
diff --git a/sched/tests/com/android/sched/marker/MarkedA.java b/sched/tests/com/android/sched/marker/MarkedA.java
index 8444f63..f5dc013 100644
--- a/sched/tests/com/android/sched/marker/MarkedA.java
+++ b/sched/tests/com/android/sched/marker/MarkedA.java
@@ -16,5 +16,5 @@
package com.android.sched.marker;
-public class MarkedA extends MarkerManager {
+public class MarkedA extends StaticMarkerManager {
}
diff --git a/sched/tests/com/android/sched/marker/MarkedB.java b/sched/tests/com/android/sched/marker/MarkedB.java
index 2731876..bffc12c 100644
--- a/sched/tests/com/android/sched/marker/MarkedB.java
+++ b/sched/tests/com/android/sched/marker/MarkedB.java
@@ -16,5 +16,5 @@
package com.android.sched.marker;
-public class MarkedB extends MarkerManager {
+public class MarkedB extends StaticMarkerManager {
}
diff --git a/sched/tests/com/android/sched/marker/MarkedC.java b/sched/tests/com/android/sched/marker/MarkedC.java
index 5b38cfb..94d53bf 100644
--- a/sched/tests/com/android/sched/marker/MarkedC.java
+++ b/sched/tests/com/android/sched/marker/MarkedC.java
@@ -16,5 +16,5 @@
package com.android.sched.marker;
-public class MarkedC extends MarkerManager {
+public class MarkedC extends StaticMarkerManager {
}
diff --git a/sched/tests/com/android/sched/marker/MarkerManagerTest.java b/sched/tests/com/android/sched/marker/MarkerManagerTest.java
index b972eaa..561a53d 100644
--- a/sched/tests/com/android/sched/marker/MarkerManagerTest.java
+++ b/sched/tests/com/android/sched/marker/MarkerManagerTest.java
@@ -31,18 +31,18 @@ import java.util.List;
public class MarkerManagerTest {
- MarkerManager[] markeds;
+ StaticMarkerManager[] markeds;
Class<? extends Marker>[] markers;
boolean[][] compatible;
@SuppressWarnings("unchecked")
@Before
public void setUp() throws Exception {
- MarkerManager.class.getClassLoader().setDefaultAssertionStatus(true);
+ StaticMarkerManager.class.getClassLoader().setDefaultAssertionStatus(true);
- new MarkerManager();
+ new StaticMarkerManager();
- markeds = new MarkerManager[] {new MarkedA(), new MarkedB(), new MarkedC(), new MarkedB1()};
+ markeds = new StaticMarkerManager[] {new MarkedA(), new MarkedB(), new MarkedC(), new MarkedB1()};
markers = (Class<? extends Marker>[]) new Class<?>[] {
Marker1.class, Marker2.class, Marker3.class};
compatible = new boolean[markeds.length][markers.length];