Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import net.bytebuddy.description.method.MethodList;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.description.type.TypeList;
import net.bytebuddy.jar.asm.Opcodes;

/** Provides an outline of a type; i.e. the named elements making up its structure. */
final class TypeOutline extends WithName {
Expand Down Expand Up @@ -89,6 +90,30 @@ public int getModifiers() {
return modifiers;
}

@Override
public boolean isAbstract() {
return matchesMask(Opcodes.ACC_ABSTRACT);
}

@Override
public boolean isEnum() {
return matchesMask(Opcodes.ACC_ENUM);
}

@Override
public boolean isInterface() {
return matchesMask(Opcodes.ACC_INTERFACE);
}

@Override
public boolean isAnnotation() {
return matchesMask(Opcodes.ACC_ANNOTATION);
}

private boolean matchesMask(int mask) {
return (this.getModifiers() & mask) == mask;
}

@Override
public ClassFileVersion getClassFileVersion() {
return ClassFileVersion.ofMinorMajor(classFileVersion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import spock.lang.Specification

class OutlineTypeParserTest extends Specification {

void 'test anonymous classes are detected'() {
void 'test modifiers are correct and anonymous classes are detected'() {
setup:
final parser = new OutlineTypeParser()
final locator = ClassFileLocators.classFileLocator(Thread.currentThread().contextClassLoader)
Expand All @@ -16,15 +16,23 @@ class OutlineTypeParserTest extends Specification {

then:
outline.anonymousType == anonymous
outline.interface == isinterface
outline.abstract == isabstract
outline.annotation == annotation
outline.enum == isenum

where:
clazz | anonymous
'datadog.trace.agent.test.EnclosedClasses' | false
'datadog.trace.agent.test.EnclosedClasses$Inner' | false
'datadog.trace.agent.test.EnclosedClasses$InnerStatic' | false
'datadog.trace.agent.test.EnclosedClasses$1' | true
'datadog.trace.agent.test.EnclosedClasses$2' | true
'datadog.trace.agent.test.EnclosedClasses$Inner$1' | true
'datadog.trace.agent.test.EnclosedClasses$InnerStatic$1' | true
clazz | anonymous | isinterface | isabstract | annotation | isenum
'datadog.trace.agent.test.EnclosedClasses' | false | false | false | false | false
'datadog.trace.agent.test.EnclosedClasses$Inner' | false | false | false | false | false
'datadog.trace.agent.test.EnclosedClasses$InnerStatic' | false | false | false | false | false
'datadog.trace.agent.test.EnclosedClasses$1' | true | false | false | false | false
'datadog.trace.agent.test.EnclosedClasses$2' | true | false | false | false | false
'datadog.trace.agent.test.EnclosedClasses$Inner$1' | true | false | false | false | false
'datadog.trace.agent.test.EnclosedClasses$InnerStatic$1' | true | false | false | false | false
'datadog.trace.agent.test.EnclosedClasses$Interface' | false | true | true | false | false
'datadog.trace.agent.test.EnclosedClasses$Abstract' | false | false | true | false | false
'datadog.trace.agent.test.EnclosedClasses$Annotation' | false | true | true | true | false
'datadog.trace.agent.test.EnclosedClasses$Enum' | false | false | false | false | true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,12 @@ public String get() {
}.get();
}
}

public interface Interface {}

public abstract static class Abstract {}

public @interface Annotation {}

public enum Enum {}
}