Skip to content

Commit 815c286

Browse files
committed
additional work for #13
1 parent cfeff11 commit 815c286

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

codemodel/src/main/java/com/sun/codemodel/JFormatter.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040

4141
package com.sun.codemodel;
4242

43-
import com.sun.org.apache.xml.internal.security.encryption.ReferenceList;
44-
4543
import java.io.PrintWriter;
4644
import java.io.Writer;
4745
import java.util.ArrayList;
@@ -479,20 +477,22 @@ private boolean supressImport(JClass clazz, JClass c) {
479477
// inner classes require an import stmt.
480478
// All other pkg local classes do not need an
481479
// import stmt for ref.
480+
482481
// no need to explicitly import a class into itself
483-
return clazz.outer() == null || isInnerClass(clazz, c);
482+
return isNestedInSelf(clazz, c);
484483
}
485484
return false;
486485
}
487486

488-
private boolean isInnerClass(JClass clazz, JClass c){
489-
if(clazz.outer() == null){
490-
return false;
491-
}
492-
else if(clazz.outer().equals(c)){
493-
return true;
494-
}
495-
return isInnerClass(clazz.outer(), c);
487+
private static boolean isNestedInSelf(JClass clazz, JClass c) {
488+
while (clazz != null) {
489+
if (clazz.equals(c)) {
490+
return true;
491+
}
492+
clazz = clazz.outer();
493+
}
494+
495+
return false;
496496
}
497497

498498
private JPackage javaLang;
Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.sun.codemodel.tests;
22

3+
import com.sun.codemodel.writer.SingleStreamCodeWriter;
4+
import org.junit.Assert;
35
import org.junit.Test;
46

57
import com.sun.codemodel.JClassAlreadyExistsException;
@@ -8,24 +10,27 @@
810
import com.sun.codemodel.JMod;
911
import com.sun.codemodel.tests.util.CodeModelTestsUtils;
1012

13+
import java.io.IOException;
14+
1115
public class InnerClassTest {
1216

1317
@Test
14-
public void innerClassesAreImported() throws JClassAlreadyExistsException {
18+
public void innerClassesAreImported() throws JClassAlreadyExistsException, IOException {
1519
JCodeModel codeModel = new JCodeModel();
1620
JDefinedClass aClass = codeModel._class("org.test.DaTestClass");
17-
// JDefinedClass daInner = aClass._class("Inner");
21+
JDefinedClass daInner = aClass._class("Inner");
22+
daInner.method(JMod.PUBLIC, aClass, "doSomething");
23+
24+
Assert.assertEquals("org.test.DaTestClass.Inner", daInner.fullName());
25+
Assert.assertEquals("org.test.DaTestClass$Inner", daInner.binaryName());
26+
Assert.assertEquals("Inner", daInner.name());
1827

19-
// Assert.assertEquals("org.test.DaTestClass.Inner", daInner.fullName());
20-
// Assert.assertEquals("org.test.DaTestClass$Inner", daInner.binaryName());
21-
// Assert.assertEquals("Inner", daInner.name());
28+
aClass.method(JMod.PUBLIC, daInner, "getInner");
2229

23-
// aClass.method(JMod.PUBLIC, daInner, "getInner");
24-
final JDefinedClass otherClass = codeModel
25-
._class("org.test.OtherClass");
26-
// otherClass.method(JMod.PUBLIC, daInner, "getInner");
30+
final JDefinedClass otherClass = codeModel._class("org.test.OtherClass");
31+
otherClass.method(JMod.PUBLIC, daInner, "getInner");
2732
otherClass.method(JMod.PUBLIC, aClass, "getOuter");
28-
System.out.println(CodeModelTestsUtils.declare(otherClass));
2933

34+
codeModel.build(new SingleStreamCodeWriter(System.out));
3035
}
3136
}

0 commit comments

Comments
 (0)