Skip to content

Commit

Permalink
Merge pull request #201 from johncarl81/inherits_fix
Browse files Browse the repository at this point in the history
Fixes inheritance checking when mxing extends and implements
  • Loading branch information
dbachelder committed Jun 22, 2016
2 parents 2d032a0 + 4129455 commit 603ac2e
Show file tree
Hide file tree
Showing 31 changed files with 141 additions and 249 deletions.
Expand Up @@ -47,7 +47,7 @@ public ModuleConfiguration process(ASTType moduleType, ASTType moduleScanTarget,
ASTType type = bindAnnotation.getProperty("type", ASTType.class);
ASTType to = bindAnnotation.getProperty("to", ASTType.class);

if(!to.inheritsFrom(type)){
if(!to.inherits(type)){
validator.error("@Bind to parameter class must inherit from type parameter")
.element(moduleType).annotation(bindAnnotation).parameter("to").build();
}
Expand Down
Expand Up @@ -98,7 +98,7 @@ public JExpression buildConstructorCall(ASTType userType, ASTConstructor constru

private ModifiedInvocationBuilder getInjectionBuilder(ASTType user, ASTType target, ASTAccessModifier modifier) {

if(modifier.equals(ASTAccessModifier.PROTECTED) && (target.inheritsFrom(user) || user.getPackageClass().getPackage().equals(target.getPackageClass().getPackage()))){
if(modifier.equals(ASTAccessModifier.PROTECTED) && (target.inherits(user) || user.getPackageClass().getPackage().equals(target.getPackageClass().getPackage()))){
return invocationBuilderStrategy.getInjectionBuilder(ASTAccessModifier.PUBLIC);
}
if(modifier.equals(ASTAccessModifier.PACKAGE_PRIVATE) && user.getPackageClass().getPackage().equals(target.getPackageClass().getPackage())){
Expand Down
Expand Up @@ -57,18 +57,18 @@ public JExpression coerceType(Class targetType, TypedExpression typedExpression)
}

public JExpression coerceType(ASTType targetType, TypedExpression typedExpression) {
if (typedExpression.getType().inheritsFrom(targetType)) {
if (typedExpression.getType().inherits(targetType)) {
return typedExpression.getExpression();
}
if (targetType.inheritsFrom(typedExpression.getType())) {
if (targetType.inherits(typedExpression.getType())) {
return JExpr.cast(generationUtil.ref(targetType), typedExpression.getExpression());
}
if (targetType instanceof ASTPrimitiveType) {
ASTPrimitiveType primitiveTargetType = (ASTPrimitiveType) targetType;

ASTType objectType = astClassFactory.getType(primitiveTargetType.getObjectClass());

if (objectType.inheritsFrom(typedExpression.getType())) {
if (objectType.inherits(typedExpression.getType())) {
return JExpr.cast(generationUtil.ref(objectType), typedExpression.getExpression());
}
}
Expand Down
Expand Up @@ -45,7 +45,7 @@ public boolean matches(ASTType astType) {
return this.astType.equals(astType);
}
else if(subtypesAllowed) {
return this.astType.inheritsFrom(astType);
return this.astType.inherits(astType);
}
}

Expand Down

This file was deleted.

Expand Up @@ -30,6 +30,6 @@ public InheritsMatcher(ASTType superType) {

@Override
public boolean matches(ASTType astType) {
return astType.inheritsFrom(superType);
return astType.inherits(superType);
}
}
Expand Up @@ -129,18 +129,8 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return type instanceof ASTArrayType && delegate.inheritsFrom(((ASTArrayType) type).getComponentType());
}

@Override
public boolean extendsFrom(ASTType type) {
return type instanceof ASTArrayType && delegate.extendsFrom(((ASTArrayType) type).getComponentType());
}

@Override
public boolean implementsFrom(ASTType type) {
return type instanceof ASTArrayType && delegate.implementsFrom(((ASTArrayType) type).getComponentType());
public boolean inherits(ASTType type) {
return type instanceof ASTArrayType && delegate.inherits(((ASTArrayType) type).getComponentType());
}

@Override
Expand Down
Expand Up @@ -99,17 +99,7 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return false;
}

@Override
public boolean extendsFrom(ASTType type) {
return false;
}

@Override
public boolean implementsFrom(ASTType type) {
public boolean inherits(ASTType type) {
return false;
}

Expand Down
Expand Up @@ -117,18 +117,8 @@ public String getName() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return astType.inheritsFrom(type);
}

@Override
public boolean extendsFrom(ASTType type) {
return astType.extendsFrom(type);
}

@Override
public boolean implementsFrom(ASTType type) {
return astType.implementsFrom(type);
public boolean inherits(ASTType type) {
return astType.inherits(type);
}

@Override
Expand Down
Expand Up @@ -101,29 +101,9 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
public boolean inherits(ASTType type) {
for (ASTType astType : intersection) {
if(astType.inheritsFrom(type)){
return true;
}
}
return false;
}

@Override
public boolean extendsFrom(ASTType type) {
for (ASTType astType : intersection) {
if(astType.extendsFrom(type)){
return true;
}
}
return false;
}

@Override
public boolean implementsFrom(ASTType type) {
for (ASTType astType : intersection) {
if(astType.implementsFrom(type)){
if(astType.inherits(type)){
return true;
}
}
Expand Down
Expand Up @@ -110,17 +110,7 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return false;
}

@Override
public boolean extendsFrom(ASTType type) {
return false;
}

@Override
public boolean implementsFrom(ASTType type) {
public boolean inherits(ASTType type) {
return false;
}

Expand Down
Expand Up @@ -150,17 +150,7 @@ public static ASTPrimitiveType getAutoboxType(String name) {
}

@Override
public boolean inheritsFrom(ASTType type) {
return type == this;
}

@Override
public boolean extendsFrom(ASTType type) {
return type == this;
}

@Override
public boolean implementsFrom(ASTType type) {
public boolean inherits(ASTType type) {
return type == this;
}

Expand Down
Expand Up @@ -144,18 +144,8 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return proxyASTType.inheritsFrom(type);
}

@Override
public boolean extendsFrom(ASTType type) {
return proxyASTType.extendsFrom(type);
}

@Override
public boolean implementsFrom(ASTType type) {
return proxyASTType.implementsFrom(type);
public boolean inherits(ASTType type) {
return proxyASTType.inherits(type);
}

@Override
Expand Down
Expand Up @@ -109,18 +109,8 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return ASTUtils.getInstance().inherits(this, type, true, true);
}

@Override
public boolean extendsFrom(ASTType type) {
return ASTUtils.getInstance().inherits(this, type, false, true);
}

@Override
public boolean implementsFrom(ASTType type) {
return ASTUtils.getInstance().inherits(this, type, true, false);
public boolean inherits(ASTType type) {
return ASTUtils.getInstance().inherits(this, type);
}

@Override
Expand Down
Expand Up @@ -122,23 +122,7 @@ public interface ASTType extends ASTBase {
* @param type implementing from
* @return inheritance
*/
boolean inheritsFrom(ASTType type);

/**
* Determines if the current type extends from the given type.
*
* @param type implementing from
* @return inheritance
*/
boolean extendsFrom(ASTType type);

/**
* Determines if the current type implements the given type.
*
* @param type implementing from
* @return inheritance
*/
boolean implementsFrom(ASTType type);
boolean inherits(ASTType type);

/**
* Returns a parsed package and class for this type
Expand Down
Expand Up @@ -111,18 +111,8 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return getProxy().inheritsFrom(type);
}

@Override
public boolean extendsFrom(ASTType type) {
return getProxy().extendsFrom(type);
}

@Override
public boolean implementsFrom(ASTType type) {
return getProxy().implementsFrom(type);
public boolean inherits(ASTType type) {
return getProxy().inherits(type);
}

@Override
Expand Down
Expand Up @@ -45,28 +45,24 @@ public static ASTUtils getInstance() {
*
* @param astType target
* @param inheritable inheritance target
* @param implement flag to trigger the method to search for implements inheritance
* @param extend flag to trigger the method to search for extends inheritance
* @return true if the given astType target inherits from the inheritable type with the given rules.
*/
public boolean inherits(ASTType astType, ASTType inheritable, boolean implement, boolean extend) {
public boolean inherits(ASTType astType, ASTType inheritable) {
if (astType == null) {
return false;
}
if(inheritable == null || inheritable.equals(OBJECT_TYPE)){
return true;
}
if (astType.equals(inheritable)) {
return true;
}
if (implement) {
for (ASTType typeInterfaces : astType.getInterfaces()) {
if (inherits(typeInterfaces, inheritable, implement, extend)) {
return true;
}
for (ASTType typeInterfaces : astType.getInterfaces()) {
if (inherits(typeInterfaces, inheritable)) {
return true;
}
}
if(extend && inheritable.equals(OBJECT_TYPE)){
return true;
}
return extend && inherits(astType.getSuperClass(), inheritable, implement, extend);
return inherits(astType.getSuperClass(), inheritable);
}

public ASTAnnotation getAnnotation(Class annotationClass, ImmutableSet<ASTAnnotation> annotations) {
Expand Down
Expand Up @@ -102,17 +102,7 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return false;
}

@Override
public boolean extendsFrom(ASTType type) {
return false;
}

@Override
public boolean implementsFrom(ASTType type) {
public boolean inherits(ASTType type) {
return false;
}

Expand Down
Expand Up @@ -168,18 +168,8 @@ public ImmutableList<ASTType> getGenericParameters() {
}

@Override
public boolean inheritsFrom(ASTType type) {
return ASTUtils.getInstance().inherits(this, type, true, true);
}

@Override
public boolean extendsFrom(ASTType type) {
return ASTUtils.getInstance().inherits(this, type, false, true);
}

@Override
public boolean implementsFrom(ASTType type) {
return ASTUtils.getInstance().inherits(this, type, true, false);
public boolean inherits(ASTType type) {
return ASTUtils.getInstance().inherits(this, type);
}

@Override
Expand Down

0 comments on commit 603ac2e

Please sign in to comment.