Skip to content

Commit

Permalink
introduce HasAccessLevel
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Oct 14, 2016
1 parent 4052ce8 commit d43623b
Show file tree
Hide file tree
Showing 22 changed files with 115 additions and 50 deletions.
Expand Up @@ -416,4 +416,9 @@ protected TypeSolver typeSolver() {
public com.github.javaparser.ast.body.ClassOrInterfaceDeclaration getWrappedNode() { public com.github.javaparser.ast.body.ClassOrInterfaceDeclaration getWrappedNode() {
return wrappedNode; return wrappedNode;
} }

@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -366,16 +366,6 @@ public boolean isAbstract() {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }


@Override
public boolean isPrivate() {
throw new UnsupportedOperationException();
}

@Override
public boolean isPackageProtected() {
throw new UnsupportedOperationException();
}

@Override @Override
public boolean isDefaultMethod() { public boolean isDefaultMethod() {
return false; return false;
Expand All @@ -390,5 +380,15 @@ public String getName() {
public List<TypeParameter> getTypeParameters() { public List<TypeParameter> getTypeParameters() {
return Collections.emptyList(); return Collections.emptyList();
} }

@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
}

@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
} }
} }
Expand Up @@ -2,6 +2,7 @@


import com.github.javaparser.ast.body.EnumConstantDeclaration; import com.github.javaparser.ast.body.EnumConstantDeclaration;
import com.github.javaparser.ast.body.VariableDeclarator; import com.github.javaparser.ast.body.VariableDeclarator;
import me.tomassetti.symbolsolver.model.declarations.AccessLevel;
import me.tomassetti.symbolsolver.model.declarations.FieldDeclaration; import me.tomassetti.symbolsolver.model.declarations.FieldDeclaration;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver; import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.typesystem.ReferenceTypeImpl; import me.tomassetti.symbolsolver.model.typesystem.ReferenceTypeImpl;
Expand Down Expand Up @@ -69,4 +70,8 @@ public com.github.javaparser.ast.body.FieldDeclaration getWrappedNode()
return wrappedNode; return wrappedNode;
} }


@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -359,4 +359,9 @@ public ClassOrInterfaceDeclaration getWrappedNode()
{ {
return wrappedNode; return wrappedNode;
} }

@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -6,6 +6,7 @@


import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade; import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade;
import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFactory; import me.tomassetti.symbolsolver.javaparsermodel.JavaParserFactory;
import me.tomassetti.symbolsolver.model.declarations.AccessLevel;
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration; import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ParameterDeclaration; import me.tomassetti.symbolsolver.model.declarations.ParameterDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration; import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
Expand Down Expand Up @@ -156,11 +157,6 @@ public boolean isAbstract() {
return (wrappedNode.getBody() == null); return (wrappedNode.getBody() == null);
} }


@Override
public boolean isPrivate() {
return wrappedNode.getModifiers().contains(com.github.javaparser.ast.Modifier.PRIVATE);
}

private Optional<Type> typeParamByName(String name, TypeSolver typeSolver, Context context) { private Optional<Type> typeParamByName(String name, TypeSolver typeSolver, Context context) {
int i = 0; int i = 0;
if (wrappedNode.getTypeParameters() != null) { if (wrappedNode.getTypeParameters() != null) {
Expand Down Expand Up @@ -227,11 +223,6 @@ public List<TypeParameter> getTypeParameters() {
return this.wrappedNode.getTypeParameters().stream().map((astTp) -> new JavaParserTypeParameter(astTp, typeSolver)).collect(Collectors.toList()); return this.wrappedNode.getTypeParameters().stream().map((astTp) -> new JavaParserTypeParameter(astTp, typeSolver)).collect(Collectors.toList());
} }


@Override
public boolean isPackageProtected() {
throw new UnsupportedOperationException();
}

@Override @Override
public boolean isDefaultMethod() { public boolean isDefaultMethod() {
return wrappedNode.isDefault(); return wrappedNode.isDefault();
Expand All @@ -246,4 +237,10 @@ public com.github.javaparser.ast.body.MethodDeclaration getWrappedNode()
{ {
return wrappedNode; return wrappedNode;
} }

@Override
public AccessLevel accessLevel() {
// return wrappedNode.getModifiers().contains(com.github.javaparser.ast.Modifier.PRIVATE);
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -392,4 +392,9 @@ public List<TypeParameter> getTypeParameters() {
} }
} }
} }

@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -2,6 +2,7 @@


import javassist.CtField; import javassist.CtField;
import javassist.NotFoundException; import javassist.NotFoundException;
import me.tomassetti.symbolsolver.model.declarations.AccessLevel;
import me.tomassetti.symbolsolver.model.typesystem.Type; import me.tomassetti.symbolsolver.model.typesystem.Type;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver; import me.tomassetti.symbolsolver.model.resolution.TypeSolver;


Expand Down Expand Up @@ -41,4 +42,9 @@ public boolean isParameter() {
public boolean isType() { public boolean isType() {
return false; return false;
} }

@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -275,5 +275,8 @@ public List<TypeParameter> getTypeParameters() {
} }
} }



@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -5,6 +5,7 @@
import javassist.NotFoundException; import javassist.NotFoundException;
import javassist.bytecode.BadBytecode; import javassist.bytecode.BadBytecode;
import javassist.bytecode.SignatureAttribute; import javassist.bytecode.SignatureAttribute;
import me.tomassetti.symbolsolver.model.declarations.AccessLevel;
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration; import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ParameterDeclaration; import me.tomassetti.symbolsolver.model.declarations.ParameterDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration; import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
Expand Down Expand Up @@ -114,16 +115,6 @@ public boolean isAbstract() {
return Modifier.isAbstract(ctMethod.getModifiers()); return Modifier.isAbstract(ctMethod.getModifiers());
} }


@Override
public boolean isPrivate() {
return Modifier.isPrivate(ctMethod.getModifiers());
}

@Override
public boolean isPackageProtected() {
return !Modifier.isPrivate(ctMethod.getModifiers()) && !Modifier.isProtected(ctMethod.getModifiers()) && !Modifier.isPublic(ctMethod.getModifiers());
}

@Override @Override
public List<TypeParameter> getTypeParameters() { public List<TypeParameter> getTypeParameters() {
try { try {
Expand All @@ -136,4 +127,10 @@ public List<TypeParameter> getTypeParameters() {
throw new RuntimeException(badBytecode); throw new RuntimeException(badBytecode);
} }
} }

@Override
public AccessLevel accessLevel() {
// return !Modifier.isPrivate(ctMethod.getModifiers()) && !Modifier.isProtected(ctMethod.getModifiers()) && !Modifier.isPublic(ctMethod.getModifiers());
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -432,4 +432,9 @@ public int compare(Method o1, Method o2) {
return 0; return 0;
} }
} }

@Override
public AccessLevel accessLevel() {
return ReflectionFactory.modifiersToAccessLevel(this.clazz.getModifiers());
}
} }
@@ -1,5 +1,6 @@
package me.tomassetti.symbolsolver.reflectionmodel; package me.tomassetti.symbolsolver.reflectionmodel;


import me.tomassetti.symbolsolver.model.declarations.AccessLevel;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver; import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.typesystem.*; import me.tomassetti.symbolsolver.model.typesystem.*;
import me.tomassetti.symbolsolver.model.typesystem.Type; import me.tomassetti.symbolsolver.model.typesystem.Type;
Expand Down Expand Up @@ -80,4 +81,16 @@ public static Type typeUsageFor(java.lang.reflect.Type type, TypeSolver typeSolv
throw new UnsupportedOperationException(type.getClass().getCanonicalName() + " " + type); throw new UnsupportedOperationException(type.getClass().getCanonicalName() + " " + type);
} }
} }

static AccessLevel modifiersToAccessLevel(final int modifiers) {
if (Modifier.isPublic(modifiers)) {
return AccessLevel.PUBLIC;
} else if (Modifier.isProtected(modifiers)) {
return AccessLevel.PROTECTED;
} else if (Modifier.isPrivate(modifiers)) {
return AccessLevel.PRIVATE;
} else {
return AccessLevel.PACKAGE_PROTECTED;
}
}
} }
@@ -1,5 +1,6 @@
package me.tomassetti.symbolsolver.reflectionmodel; package me.tomassetti.symbolsolver.reflectionmodel;


import me.tomassetti.symbolsolver.model.declarations.AccessLevel;
import me.tomassetti.symbolsolver.model.declarations.FieldDeclaration; import me.tomassetti.symbolsolver.model.declarations.FieldDeclaration;
import me.tomassetti.symbolsolver.model.resolution.TypeSolver; import me.tomassetti.symbolsolver.model.resolution.TypeSolver;
import me.tomassetti.symbolsolver.model.typesystem.Type; import me.tomassetti.symbolsolver.model.typesystem.Type;
Expand Down Expand Up @@ -57,4 +58,9 @@ public boolean isParameter() {
public boolean isType() { public boolean isType() {
return false; return false;
} }

@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
} }
Expand Up @@ -325,4 +325,9 @@ public List<TypeParameter> getTypeParameters() {
protected TypeSolver typeSolver() { protected TypeSolver typeSolver() {
return typeSolver; return typeSolver;
} }

@Override
public AccessLevel accessLevel() {
throw new UnsupportedOperationException();
}
} }
@@ -1,6 +1,7 @@
package me.tomassetti.symbolsolver.reflectionmodel; package me.tomassetti.symbolsolver.reflectionmodel;


import com.github.javaparser.ast.Node; import com.github.javaparser.ast.Node;
import me.tomassetti.symbolsolver.model.declarations.AccessLevel;
import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration; import me.tomassetti.symbolsolver.model.declarations.MethodDeclaration;
import me.tomassetti.symbolsolver.model.declarations.ParameterDeclaration; import me.tomassetti.symbolsolver.model.declarations.ParameterDeclaration;
import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration; import me.tomassetti.symbolsolver.model.declarations.TypeDeclaration;
Expand Down Expand Up @@ -214,18 +215,13 @@ public boolean isAbstract() {
} }


@Override @Override
public boolean isPrivate() { public boolean isDefaultMethod() {
return Modifier.isPrivate(method.getModifiers()); return method.isDefault();
}

@Override
public boolean isPackageProtected() {
return !Modifier.isPrivate(method.getModifiers()) && !Modifier.isProtected(method.getModifiers()) && !Modifier.isPublic(method.getModifiers());
} }


@Override @Override
public boolean isDefaultMethod() { public AccessLevel accessLevel() {
return method.isDefault(); return ReflectionFactory.modifiersToAccessLevel(this.method.getModifiers());
} }


} }
Expand Up @@ -125,7 +125,7 @@ public void testGetDeclaredMethods() {
TypeSolver typeResolver = new JreTypeSolver(); TypeSolver typeResolver = new JreTypeSolver();
TypeDeclaration string = new ReflectionClassDeclaration(String.class, typeResolver); TypeDeclaration string = new ReflectionClassDeclaration(String.class, typeResolver);
List<MethodDeclaration> methods = string.getDeclaredMethods().stream() List<MethodDeclaration> methods = string.getDeclaredMethods().stream()
.filter(m -> !m.isPrivate() && !m.isPackageProtected()) .filter(m -> m.accessLevel() != AccessLevel.PRIVATE && m.accessLevel() != AccessLevel.PACKAGE_PROTECTED)
.sorted((a, b) -> a.getName().compareTo(b.getName())) .sorted((a, b) -> a.getName().compareTo(b.getName()))
.collect(Collectors.toList()); .collect(Collectors.toList());
assertEquals(67, methods.size()); assertEquals(67, methods.size());
Expand Down
@@ -0,0 +1,11 @@
package me.tomassetti.symbolsolver.model.declarations;

/**
* @author Federico Tomassetti
*/
public enum AccessLevel {
PUBLIC,
PRIVATE,
PROTECTED,
PACKAGE_PROTECTED
}
Expand Up @@ -9,7 +9,7 @@
* *
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public interface ClassDeclaration extends TypeDeclaration, TypeParametrizable { public interface ClassDeclaration extends TypeDeclaration, TypeParametrizable, HasAccessLevel {


/** /**
* This method should always return true. * This method should always return true.
Expand Down
Expand Up @@ -5,7 +5,7 @@
* *
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public interface EnumDeclaration extends TypeDeclaration { public interface EnumDeclaration extends TypeDeclaration, HasAccessLevel {


@Override @Override
default boolean isEnum() { default boolean isEnum() {
Expand Down
Expand Up @@ -5,7 +5,7 @@
* *
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public interface FieldDeclaration extends ValueDeclaration { public interface FieldDeclaration extends ValueDeclaration, HasAccessLevel {


@Override @Override
default boolean isField() { default boolean isField() {
Expand Down
@@ -0,0 +1,10 @@
package me.tomassetti.symbolsolver.model.declarations;

/**
* @author Federico Tomassetti
*/
public interface HasAccessLevel {

AccessLevel accessLevel();

}
Expand Up @@ -10,7 +10,7 @@
* *
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public interface InterfaceDeclaration extends TypeDeclaration, TypeParametrizable { public interface InterfaceDeclaration extends TypeDeclaration, TypeParametrizable, HasAccessLevel {


@Override @Override
default boolean isInterface() { default boolean isInterface() {
Expand Down
Expand Up @@ -7,7 +7,7 @@
* *
* @author Federico Tomassetti * @author Federico Tomassetti
*/ */
public interface MethodDeclaration extends Declaration, TypeParametrizable { public interface MethodDeclaration extends Declaration, TypeParametrizable, HasAccessLevel {


/** /**
* The type in which the method is declared. * The type in which the method is declared.
Expand Down Expand Up @@ -44,10 +44,6 @@ default boolean hasVariadicParameter() {


boolean isAbstract(); boolean isAbstract();


boolean isPrivate();

boolean isPackageProtected();

default String getQualifiedName() { default String getQualifiedName() {
return declaringType().getQualifiedName()+ "." + this.getName(); return declaringType().getQualifiedName()+ "." + this.getName();
} }
Expand Down

0 comments on commit d43623b

Please sign in to comment.