@Test public void testVisitMehtodAccessFlags() { AsmClass fileClass = asmClassProvider.getClass("tags/File"); assertThat(fileClass.getMethod("read()V").isPublic()).isTrue(); AsmClass stringClass = asmClassProvider.getClass("java/lang/String"); assertThat(stringClass.getMethod("toString()Ljava/lang/String;").isDeprecated()).isFalse(); }
@Test public void testVisitTryCatchBlock() { AsmClass sourceFileClass = asmClassProvider.getClass("tags/SourceFile"); AsmClass tagExceptionClass = asmClassProvider.getClass("tags/TagException"); AsmMethod readSourceFileMethod = sourceFileClass.getMethod("readSourceFile()V"); assertThat(readSourceFileMethod.getDistinctUsedAsmClasses()).contains(tagExceptionClass); }
@Test public void testVisitMehtodThrows() { AsmClass fileClass = asmClassProvider.getClass("tags/File"); assertThat(fileClass.getMethod("read()V").getThrows()).hasSize(1); assertThat(fileClass.getMethod("read()V").getThrows().get(0).getInternalName()) .isEqualTo("tags/TagException"); AsmClass stringClass = asmClassProvider.getClass("java/lang/String"); assertThat(stringClass.getMethod("toString()Ljava/lang/String;").getThrows()).isEmpty(); }
@Test public void testVisitTypeInsn() { AsmClass sourceFileClass = asmClassProvider.getClass("tags/SourceFile"); AsmMethod constructor = sourceFileClass.getMethod("<init>()V"); assertThat( constructor .getDistinctUsedAsmClasses() .contains(asmClassProvider.getClass("java/util/ArrayList"))) .isNotNull(); }
@Test public void testResourceTouchedProperty() { AsmClass asmClass = asmClassProvider.getClass("properties/ResourceTouchedProperty"); assertThat(asmClass.getField("unusedField").isUsed()).isFalse(); assertThat(asmClass.getField("usedField").isUsed()).isTrue(); assertThat(asmClass.getMethod("doPrivateJob()V").isUsed()).isTrue(); assertThat(asmClass.getMethod("run()V").isUsed()).isFalse(); assertThat(asmClass.isUsed()).isFalse(); assertThat(asmClassProvider.getClass("java/lang/Runnable").isUsed()).isTrue(); }
@Test public void testVisitFieldInsn() { AsmClass tagNameClass = asmClassProvider.getClass("tags/TagName"); AsmField nameField = tagNameClass.getField("name"); AsmMethod constructorWithString = tagNameClass.getMethod("<init>(Ljava/lang/String;)V"); assertThat(constructorWithString.getCallsToField()).containsOnly(nameField); }
@Test public void testEmptyMethodProperty() { AsmClass asmClass = asmClassProvider.getClass("properties/EmptyMethodProperty"); assertThat(asmClass.getMethod("notEmptyMethod()V").isEmpty()).isFalse(); assertThat(asmClass.getMethod("emptyMethod()V").isEmpty()).isTrue(); assertThat(asmClass.getMethod("emptyAbstractMethod()V").isEmpty()).isTrue(); }
@Test public void testInheritedMethodProperty() { AsmClass asmClass = asmClassProvider.getClass("properties/InheritedMethodsProperty"); assertThat(asmClass.getMethod("equals(Ljava/lang/Object;)Z").isInherited()).isTrue(); assertThat(asmClass.getMethod("notInheritedMethod()V").isInherited()).isFalse(); assertThat(asmClass.getMethod("run()V").isInherited()).isTrue(); }
@Test public void testVisit() { AsmClass asmClass = asmClassProvider.getClass("java/lang/String"); assertThat(asmClass.getInternalName()).isEqualTo("java/lang/String"); assertThat(asmClass.isAbstract()).isFalse(); assertThat(asmClass.isInterface()).isFalse(); }
@Override public void visitFieldInsn(int opcode, String owner, String fieldName, String fieldDescription) { AsmClass targetClass = asmClassProvider.getClass(owner, DETAIL_LEVEL.NOTHING); AsmField targetField = targetClass.getFieldOrCreateIt(fieldName); method.addEdge(new AsmEdge(method, targetField, SourceCodeEdgeUsage.CALLS_FIELD, lineNumber)); emptyMethod = false; }
@Override public void visitTryCatchBlock(Label start, Label end, Label handler, String exception) { if (exception != null) { AsmClass exceptionClass = asmClassProvider.getClass(exception, DETAIL_LEVEL.NOTHING); method.addEdge(new AsmEdge(method, exceptionClass, SourceCodeEdgeUsage.USES, lineNumber)); } emptyMethod = false; }
@Test public void testVisitMethodInsn() { AsmClass sourceFileClass = asmClassProvider.getClass("tags/SourceFile"); AsmMethod readMethod = sourceFileClass.getMethod("read()V"); AsmMethod readSourceFileMethod = sourceFileClass.getMethod("readSourceFile()V"); assertThat(readSourceFileMethod.getCallsToMethod()).contains(readMethod).hasSize(2); assertThat(readSourceFileMethod.getCallsToField()).hasSize(1); }
@Override public void visitLdcInsn(Object cst) { if (cst instanceof Type) { Type type = (Type) cst; AsmClass usedClass = asmClassProvider.getClass(type.getInternalName(), DETAIL_LEVEL.NOTHING); method.addEdge(new AsmEdge(method, usedClass, SourceCodeEdgeUsage.USES, lineNumber)); } emptyMethod = false; }
@Test public void testVisitFieldAccessFlags() { AsmClass asmClass = asmClassProvider.getClass("java/lang/String"); assertThat(asmClass.getField("CASE_INSENSITIVE_ORDER")).isNotNull(); assertThat(asmClass.getField("CASE_INSENSITIVE_ORDER").isStatic()).isTrue(); assertThat(asmClass.getField("CASE_INSENSITIVE_ORDER").isPublic()).isTrue(); assertThat(asmClass.getField("CASE_INSENSITIVE_ORDER").isFinal()).isTrue(); assertThat(asmClass.getField("CASE_INSENSITIVE_ORDER").isDeprecated()).isFalse(); }
@Override public void visitMethodInsn( int opcode, String owner, String methodName, String methodDescription) { if (isNotCallToJavaArrayMethod(owner)) { AsmClass targetClass = asmClassProvider.getClass(owner, DETAIL_LEVEL.STRUCTURE); AsmMethod targetMethod = targetClass.getMethodOrCreateIt(methodName + methodDescription); method.addEdge( new AsmEdge(method, targetMethod, SourceCodeEdgeUsage.CALLS_METHOD, lineNumber)); } emptyMethod = false; }
@Test public void testVisitMethod() { AsmClass asmClass = asmClassProvider.getClass("java/lang/String"); assertThat(asmClass.getMethod("charAt(I)C")).isNotNull(); assertThat(asmClass.getMethod("charAt(I)C").isPublic()).isTrue(); assertThat(asmClass.getMethod("charAt(I)C").isDeprecated()).isFalse(); assertThat(asmClass.getMethod("charAt(I)C").isStatic()).isFalse(); assertThat(asmClass.getMethod("valueOf(C)Ljava/lang/String;").isStatic()).isTrue(); asmClass = asmClassProvider.getClass("tags/File"); AsmMethod getLines = asmClass.getMethod("read(Ljava/util/Collection;Ljava/lang/String;)Ljava/lang/String;"); assertThat(getLines.getDistinctUsedAsmClasses().contains(new AsmClass("java/util/Collection"))) .isTrue(); assertThat(getLines.getDistinctUsedAsmClasses().contains(new AsmClass("tags/File"))).isTrue(); assertThat(getLines.getDistinctUsedAsmClasses().contains(new AsmClass("java/lang/String"))) .isTrue(); assertThat( getLines .getDistinctUsedAsmClasses() .contains(new AsmClass("java/lang/RuntimeException"))) .isTrue(); }
@Test public void testMethodBodyLoadedProperty() { AsmClass asmClass = asmClassProvider.getClass("properties/MethodBodyLoadedProperty"); assertThat(asmClass.getMethod("doJob()V").isBodyLoaded()).isTrue(); assertThat(asmClass.getMethod("run()V").isBodyLoaded()).isFalse(); }
@Test public void testVisitObjectField() { AsmClass asmClass = asmClassProvider.getClass("tags/SourceFile"); AsmEdge pathAsmEdge = asmClass.getField("path").getOutgoingEdges().iterator().next(); assertThat(pathAsmEdge.getTargetAsmClass().getInternalName()).isEqualTo("java/lang/String"); }
@Override public void visitTypeInsn(int opcode, String internalName) { AsmClass usedClass = asmClassProvider.getClass(internalName, DETAIL_LEVEL.NOTHING); method.addEdge(new AsmEdge(method, usedClass, SourceCodeEdgeUsage.USES, lineNumber)); emptyMethod = false; }