blob: 9d4f66506053ec83fd32a5a268dd2bd5657f6a43 [file] [log] [blame]
/*
* 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 javax.inject.Inject;
import java.util.LinkedHashSet;
import java.util.Set;
public class Tire {
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;
}
}