summaryrefslogtreecommitdiff
path: root/tck/org/atinject/tck/auto/Tire.java
diff options
context:
space:
mode:
Diffstat (limited to 'tck/org/atinject/tck/auto/Tire.java')
-rw-r--r--tck/org/atinject/tck/auto/Tire.java182
1 files changed, 182 insertions, 0 deletions
diff --git a/tck/org/atinject/tck/auto/Tire.java b/tck/org/atinject/tck/auto/Tire.java
new file mode 100644
index 0000000..1a8423f
--- /dev/null
+++ b/tck/org/atinject/tck/auto/Tire.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2009 The JSR-330 Expert Group
+ *
+ * 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 org.atinject.tck.auto;
+
+import org.atinject.tck.auto.accessories.SpareTire;
+import org.atinject.tck.auto.accessories.RoundThing;
+
+import javax.inject.Inject;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+public class Tire extends RoundThing {
+
+ protected static final FuelTank NEVER_INJECTED = new FuelTank();
+
+ protected static final Set<String> moreProblems = new LinkedHashSet<String>();
+
+ FuelTank constructorInjection = NEVER_INJECTED;
+ @Inject FuelTank fieldInjection = NEVER_INJECTED;
+ FuelTank methodInjection = NEVER_INJECTED;
+ @Inject static FuelTank staticFieldInjection = NEVER_INJECTED;
+ static FuelTank staticMethodInjection = NEVER_INJECTED;
+
+ boolean constructorInjected;
+
+ protected boolean superPrivateMethodInjected;
+ protected boolean superPackagePrivateMethodInjected;
+ protected boolean superProtectedMethodInjected;
+ protected boolean superPublicMethodInjected;
+ protected boolean subPrivateMethodInjected;
+ protected boolean subPackagePrivateMethodInjected;
+ protected boolean subProtectedMethodInjected;
+ protected boolean subPublicMethodInjected;
+
+ protected boolean superPrivateMethodForOverrideInjected;
+ protected boolean superPackagePrivateMethodForOverrideInjected;
+ protected boolean subPrivateMethodForOverrideInjected;
+ protected boolean subPackagePrivateMethodForOverrideInjected;
+ protected boolean protectedMethodForOverrideInjected;
+ protected boolean publicMethodForOverrideInjected;
+
+ public boolean methodInjectedBeforeFields;
+ public boolean subtypeFieldInjectedBeforeSupertypeMethods;
+ public boolean subtypeMethodInjectedBeforeSupertypeMethods;
+ public static boolean staticMethodInjectedBeforeStaticFields;
+ public static boolean subtypeStaticFieldInjectedBeforeSupertypeStaticMethods;
+ public static boolean subtypeStaticMethodInjectedBeforeSupertypeStaticMethods;
+ public boolean similarPrivateMethodInjectedTwice;
+ public boolean similarPackagePrivateMethodInjectedTwice;
+ public boolean overriddenProtectedMethodInjectedTwice;
+ public boolean overriddenPublicMethodInjectedTwice;
+
+ @Inject public Tire(FuelTank constructorInjection) {
+ this.constructorInjection = constructorInjection;
+ }
+
+ @Inject void supertypeMethodInjection(FuelTank methodInjection) {
+ if (!hasTireBeenFieldInjected()) {
+ methodInjectedBeforeFields = true;
+ }
+ if (hasSpareTireBeenFieldInjected()) {
+ subtypeFieldInjectedBeforeSupertypeMethods = true;
+ }
+ if (hasSpareTireBeenMethodInjected()) {
+ subtypeMethodInjectedBeforeSupertypeMethods = true;
+ }
+ this.methodInjection = methodInjection;
+ }
+
+ @Inject static void supertypeStaticMethodInjection(FuelTank methodInjection) {
+ if (!Tire.hasBeenStaticFieldInjected()) {
+ staticMethodInjectedBeforeStaticFields = true;
+ }
+ if (SpareTire.hasBeenStaticFieldInjected()) {
+ subtypeStaticFieldInjectedBeforeSupertypeStaticMethods = true;
+ }
+ if (SpareTire.hasBeenStaticMethodInjected()) {
+ subtypeStaticMethodInjectedBeforeSupertypeStaticMethods = true;
+ }
+ staticMethodInjection = methodInjection;
+ }
+
+ @Inject private void injectPrivateMethod() {
+ if (superPrivateMethodInjected) {
+ similarPrivateMethodInjectedTwice = true;
+ }
+ superPrivateMethodInjected = true;
+ }
+
+ @Inject void injectPackagePrivateMethod() {
+ if (superPackagePrivateMethodInjected) {
+ similarPackagePrivateMethodInjectedTwice = true;
+ }
+ superPackagePrivateMethodInjected = true;
+ }
+
+ @Inject protected void injectProtectedMethod() {
+ if (superProtectedMethodInjected) {
+ overriddenProtectedMethodInjectedTwice = true;
+ }
+ superProtectedMethodInjected = true;
+ }
+
+ @Inject public void injectPublicMethod() {
+ if (superPublicMethodInjected) {
+ overriddenPublicMethodInjectedTwice = true;
+ }
+ superPublicMethodInjected = true;
+ }
+
+ @Inject private void injectPrivateMethodForOverride() {
+ subPrivateMethodForOverrideInjected = true;
+ }
+
+ @Inject void injectPackagePrivateMethodForOverride() {
+ subPackagePrivateMethodForOverrideInjected = true;
+ }
+
+ @Inject protected void injectProtectedMethodForOverride() {
+ protectedMethodForOverrideInjected = true;
+ }
+
+ @Inject public void injectPublicMethodForOverride() {
+ publicMethodForOverrideInjected = true;
+ }
+
+ protected final boolean hasTireBeenFieldInjected() {
+ return fieldInjection != NEVER_INJECTED;
+ }
+
+ protected boolean hasSpareTireBeenFieldInjected() {
+ return false;
+ }
+
+ protected final boolean hasTireBeenMethodInjected() {
+ return methodInjection != NEVER_INJECTED;
+ }
+
+ protected static boolean hasBeenStaticFieldInjected() {
+ return staticFieldInjection != NEVER_INJECTED;
+ }
+
+ protected static boolean hasBeenStaticMethodInjected() {
+ return staticMethodInjection != NEVER_INJECTED;
+ }
+
+ protected boolean hasSpareTireBeenMethodInjected() {
+ return false;
+ }
+
+ boolean packagePrivateMethod2Injected;
+
+ @Inject void injectPackagePrivateMethod2() {
+ packagePrivateMethod2Injected = true;
+ }
+
+ public boolean packagePrivateMethod3Injected;
+
+ @Inject void injectPackagePrivateMethod3() {
+ packagePrivateMethod3Injected = true;
+ }
+
+ public boolean packagePrivateMethod4Injected;
+
+ void injectPackagePrivateMethod4() {
+ packagePrivateMethod4Injected = true;
+ }
+}