use of spoon.support.compiler.jdt.JDTSnippetCompiler in project spoon by INRIA.
the class SignatureTest method testMethodInvocationSignatureWithVariableAccess.
@Test
public void testMethodInvocationSignatureWithVariableAccess() throws Exception {
Factory factory = new FactoryImpl(new DefaultCoreFactory(), new StandardEnvironment());
factory.getEnvironment().setNoClasspath(true);
String content = "" + "class PR {" + "static String PRS = null;" + "public Object foo(String p) {" + " int s = 0; " + " this.foo(s);" + "this.foo(p);" + " return null;" + "}" + " public Object foo(int p) {" + " String s = null;" + " this.foo(s);" + "this.foo(p);" + "return null;" + "}" + "};";
SpoonModelBuilder builder = new JDTSnippetCompiler(factory, content);
builder.build();
CtClass<?> clazz1 = (CtClass<?>) factory.Type().getAll().get(0);
assertNotNull(clazz1);
// **FIRST PART: passing local variable access.
// /--------From the first method we take the method invocations
TreeSet<CtMethod<?>> ts = new TreeSet<CtMethod<?>>(new DeepRepresentationComparator());
ts.addAll(clazz1.getMethods());
CtMethod[] methodArray = ts.toArray(new CtMethod[0]);
CtMethod<?> methodInteger = methodArray[0];
assertEquals("foo(int)", methodInteger.getSignature());
CtInvocation<?> invoToInt1 = (CtInvocation<?>) methodInteger.getBody().getStatement(1);
CtExpression<?> argumentToInt1 = invoToInt1.getArguments().get(0);
// ----------From the second method we take the Method Inv
CtMethod<?> methodString = (CtMethod<?>) methodArray[1];
assertEquals("foo(java.lang.String)", methodString.getSignature());
CtInvocation<?> invoToString = (CtInvocation<?>) methodString.getBody().getStatement(1);
CtExpression<?> argumentToString = invoToString.getArguments().get(0);
// we compare the signatures of " this.foo(s);" from both methods
assertNotEquals(invoToInt1, invoToString);
// Now we check that we have two invocation to "foo(s)",
// but one invocation is with var 's' type integer, the other var 's' type int
assertNotEquals(argumentToInt1, argumentToString);
// / ***SECOND PART, passing Parameters
CtInvocation<?> invoToString2 = (CtInvocation<?>) methodInteger.getBody().getStatement(2);
CtExpression<?> argumentToString2 = invoToString2.getArguments().get(0);
CtInvocation<?> invoToInt2 = (CtInvocation<?>) methodString.getBody().getStatement(2);
CtExpression<?> argumentToInt2 = invoToInt2.getArguments().get(0);
// /
// Compare the method invo signature (same real argument's name, different type)
assertNotEquals(invoToString2, invoToInt2);
// Compare signature of parameters (same var name, different type)
assertNotEquals(argumentToString2, argumentToInt2);
}
use of spoon.support.compiler.jdt.JDTSnippetCompiler in project spoon by INRIA.
the class SignatureTest method testNullSignatureInUnboundVariable.
@Test
public void testNullSignatureInUnboundVariable() throws Exception {
// Unbound variable access bug fix:
// Bug description: The signature printer ignored the element Unbound variable reference
// (as well all Visitor that extend CtVisitor)
// Fix description: modify CtVisitor (including SignaturePrinter) for visiting unbound variable access.
Factory factory = new Launcher().createFactory();
// We want to compile a class with an reference to a class that is not
// in the classpath
// As consequence, we set the option NoClasspath as true.
factory.getEnvironment().setNoClasspath(true);
String unboundVarAccess = "Complex.I";
String content = "" + "class X {" + "public Object foo(java.util.List<String> l) {" + " Integer.toString(" + unboundVarAccess + ");" + " return null;" + "}};";
SpoonModelBuilder builder = new JDTSnippetCompiler(factory, content);
try {
builder.build();
Assert.fail();
} catch (Exception e) {
// Must fail due to the unbound element "Complex.I"
}
CtClass<?> clazz1 = (CtClass<?>) factory.Type().getAll().get(0);
Set<CtMethod<?>> methods = clazz1.getMethods();
CtMethod<?> method = (CtMethod<?>) methods.toArray()[0];
assertEquals("foo(java.util.List)", method.getSignature());
CtInvocation<?> invo = (CtInvocation<?>) method.getBody().getStatement(0);
CtExpression<?> argument1 = invo.getArguments().get(0);
assertEquals(unboundVarAccess, argument1.toString());
}
use of spoon.support.compiler.jdt.JDTSnippetCompiler in project spoon by INRIA.
the class SignatureTest method testUnboundFieldSignature.
@Test
public void testUnboundFieldSignature() {
Factory factory = new FactoryImpl(new DefaultCoreFactory(), new StandardEnvironment());
factory.getEnvironment().setNoClasspath(true);
String content = "" + "class PR {" + "public java.io.File foo(String p) {" + " this.mfield = p; " + " return null;" + "}" + "};";
SpoonModelBuilder builder = new JDTSnippetCompiler(factory, content);
try {
builder.build();
fail();
} catch (Exception e) {
// must fail
}
CtClass<?> clazz1 = (CtClass<?>) factory.Type().getAll().get(0);
assertNotNull(clazz1);
// **FIRST PART: passing local variable access.
// /--------From the first method we take the method invocations
CtMethod<?> methodString = (CtMethod<?>) clazz1.getMethods().toArray()[0];
assertEquals("foo(java.lang.String)", methodString.getSignature());
CtAssignment<?, ?> invoToInt1 = (CtAssignment<?, ?>) methodString.getBody().getStatement(0);
CtExpression<?> left = invoToInt1.getAssigned();
assertEquals("this.mfield", left.toString());
// null because noclasspath
assertEquals(null, left.getType());
assertEquals("this.mfield = p", invoToInt1.toString());
}
use of spoon.support.compiler.jdt.JDTSnippetCompiler in project spoon by INRIA.
the class CommentTest method testSnippedWithComments.
@Test
public void testSnippedWithComments() {
Factory factory = new FactoryImpl(new DefaultCoreFactory(), new StandardEnvironment());
factory.getEnvironment().setNoClasspath(true);
factory.getEnvironment().setCommentEnabled(true);
String content = "//class comment\n" + "class PR {\n" + "/**\n * method javadoc comment */\n" + "public java.io.File foo(String p) {\n" + "/* method body comment*/\n" + " return /*inline comment*/ null;" + "}" + "};\n" + "// after class comment";
JDTSnippetCompiler builder = new JDTSnippetCompiler(factory, content);
builder.build();
CtClass<?> clazz1 = (CtClass<?>) factory.Type().getAll().get(0);
assertNotNull(clazz1);
assertEquals(1, clazz1.getComments().size());
assertEquals("class comment", clazz1.getComments().get(0).getContent());
assertEquals(1, builder.getSnippetCompilationUnit().getDeclaredTypes().size());
assertTrue(clazz1 == builder.getSnippetCompilationUnit().getDeclaredTypes().get(0));
CtMethod<?> methodString = (CtMethod<?>) clazz1.getMethods().toArray()[0];
// we don't call getSignature in order to encapsulate a little bit the changes
// for the next time we will change the signature :-)
assertEquals("foo", methodString.getSimpleName());
assertEquals(1, methodString.getComments().size());
assertEquals("method javadoc comment", methodString.getComments().get(0).getContent());
CtReturn<?> returnSt = methodString.getBody().getStatement(0);
assertEquals(2, returnSt.getComments().size());
assertEquals("method body comment", returnSt.getComments().get(0).getContent());
assertEquals("inline comment", returnSt.getComments().get(1).getContent());
}
use of spoon.support.compiler.jdt.JDTSnippetCompiler in project spoon by INRIA.
the class EqualTest method testEqualsEmptyException.
@Test
public void testEqualsEmptyException() throws Exception {
Factory factory = new Launcher().createFactory();
String realParam1 = "\"\"";
String content = "" + "class X {" + "public Object foo() {" + " Integer.getInteger(" + realParam1 + ");" + " return \"\";" + "}};";
SpoonModelBuilder builder = new JDTSnippetCompiler(factory, content);
try {
builder.build();
} catch (Exception e) {
e.printStackTrace();
fail("Unable create model");
}
CtClass<?> clazz1 = (CtClass<?>) factory.Type().getAll().get(0);
CtMethod<?> method = (CtMethod<?>) clazz1.getMethods().toArray()[0];
CtInvocation<?> invo = (CtInvocation<?>) method.getBody().getStatement(0);
CtLiteral<?> argument1 = (CtLiteral<?>) invo.getArguments().get(0);
assertEquals(realParam1, argument1.toString());
CtReturn<?> returnStatement = (CtReturn<?>) method.getBody().getStatement(1);
CtLiteral<?> returnExp = (CtLiteral<?>) returnStatement.getReturnedExpression();
assertEquals(realParam1, returnExp.toString());
try {
assertEquals(argument1, returnExp);
} catch (Exception e) {
fail(e.getMessage());
}
}
Aggregations