Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
407 commits
Select commit Hold shift + click to select a range
5fc0bc8
removing unnecessary addition of Foo() if Foo(int...) present
BobHanson Sep 6, 2017
1475faa
fixing String + double/float/Double/Float
BobHanson Sep 6, 2017
6c535fe
test for fixing String + double/float/Double/Float
BobHanson Sep 6, 2017
7374c49
comments only
BobHanson Sep 6, 2017
ea586be
comment
BobHanson Sep 6, 2017
001b377
adds 32-bit java.util.BitSet extends javajs.util.BS
BobHanson Sep 6, 2017
ea2e8f2
documentation added to net.sf.j2s.core.java from SwingJS
BobHanson Sep 6, 2017
03e547e
TO int f() { return 'c' } returns string
BobHanson Sep 6, 2017
9036c23
wrong project for doc
BobHanson Sep 6, 2017
2e64e57
bug fixes working on ReturnStatement
BobHanson Sep 6, 2017
5be91cd
multiple issues with char/Character
BobHanson Sep 7, 2017
36c7671
full primitive casting
BobHanson Sep 7, 2017
cf454e2
full primitive casting test.Test_Char.java
BobHanson Sep 7, 2017
9d92d69
full primitive casting
BobHanson Sep 7, 2017
faafdf1
adds assert
BobHanson Sep 7, 2017
403faef
adds Clazz.assert(func_tf, func_msg)
BobHanson Sep 7, 2017
51c6069
minor refactoring
BobHanson Sep 7, 2017
60cf7f4
removes support for j2s.compiler.quirks
BobHanson Sep 7, 2017
583bf3a
*=,+=, etc.; Clazz.doubleToInt deprecated -- instead, .intValue()
BobHanson Sep 8, 2017
9ca09ed
warnings removed
BobHanson Sep 9, 2017
5c1a1b4
minor refactoring
BobHanson Sep 9, 2017
41ac2da
super-fast byte, short, int conversion
BobHanson Sep 10, 2017
0382e40
add support for (x?'c':99);cleaner $b$
BobHanson Sep 12, 2017
3b9b0b9
add support for (x?'c':99);cleaner $b$
BobHanson Sep 12, 2017
e1b2c5e
save
BobHanson Sep 12, 2017
7de13fe
minor
BobHanson Sep 12, 2017
2184ae3
minor
BobHanson Sep 12, 2017
24f811a
ClassLoader elaborated for assertion
BobHanson Sep 22, 2017
f21952c
refactored visitors
BobHanson Sep 24, 2017
ad33f2f
refactored JSUtil
BobHanson Sep 24, 2017
feed3e3
privatizing
BobHanson Sep 24, 2017
6fd6d35
@j2s Javadoc efficiency
BobHanson Sep 24, 2017
c74e2ea
apache harmony error messages -- removing internationalization
BobHanson Sep 24, 2017
60412c8
j2sNative fixes,efficiencies
BobHanson Sep 24, 2017
dd9a335
fix for ! Boolean; Clazz.static$ corrects dependency for static calls
BobHanson Sep 25, 2017
778d0d9
indicating deprecation of raw JS files in src
BobHanson Sep 25, 2017
491fa34
testmain.htm
BobHanson Sep 25, 2017
e3af98d
Test_DivEqual, Test_Boolean, Test_Cast
BobHanson Sep 25, 2017
99d9432
test for dynamic class loading for static references; assertion checks
BobHanson Sep 25, 2017
d3941fb
minor Formatter fixes
BobHanson Sep 25, 2017
ea3cc55
adding asserts to Enum
BobHanson Sep 25, 2017
dc7b9ed
assert checks
BobHanson Sep 25, 2017
60eabda
test_Cinit -- class initialization challenges
BobHanson Sep 27, 2017
783d877
implementation of C$.$clinit$ - untested
BobHanson Sep 30, 2017
ef07cf8
$clinit$ implementation
BobHanson Sep 30, 2017
67cafcc
$clinit$ implementation; Enum/Class integration
BobHanson Oct 3, 2017
5e0dec2
fixes for $clinit$
BobHanson Oct 3, 2017
d949ced
refactoring for more efficient use of C$;
BobHanson Oct 4, 2017
22b3a84
full validation; minimal load dependencies
BobHanson Oct 4, 2017
13174d1
full validation; minimal load dependencies; refactored
BobHanson Oct 4, 2017
da9e62a
$clinit$, P$, and p$ testing complete - full pass.
BobHanson Oct 5, 2017
61e6f86
$clinit$, P$, and p$ testing complete - full pass.
BobHanson Oct 5, 2017
ff003fe
$clinit$ fix
BobHanson Oct 5, 2017
101df68
refactoring
BobHanson Oct 6, 2017
8d2490a
refactoring
BobHanson Oct 6, 2017
dba81bb
refactoring out xhtml references into adapters.ExtendedAdapter
BobHanson Oct 6, 2017
0aac80a
minor refactoring
BobHanson Oct 6, 2017
1e4c730
refactoring almost complete
BobHanson Oct 8, 2017
af7fd30
refactoring $static($static...))
BobHanson Oct 8, 2017
84165e4
$new inner class C$ fix
BobHanson Oct 8, 2017
71be7dc
node-based class loading deprecated
BobHanson Oct 11, 2017
5c36c33
node-based class loading deprecated
BobHanson Oct 11, 2017
ce11423
more refactoring; oddness in interfacez array sometimes being actual
BobHanson Oct 12, 2017
9437187
fixing new String(byte[])
BobHanson Oct 13, 2017
088e6be
refactoring
BobHanson Oct 14, 2017
859c5be
refactoring
BobHanson Oct 14, 2017
f756083
refactoring; simplification; removes need for package.js
BobHanson Oct 14, 2017
3c76082
additional support and bug fixes for java.lang.Class native methods
BobHanson Oct 15, 2017
d242293
deprecating dependency compiler. There is nothing to check now that all
BobHanson Oct 15, 2017
c462b6c
deprecation of nodes and dependency scan
BobHanson Oct 15, 2017
7337c28
site.zip for easier testing. See swingjs/examples/test/testmain.htm
BobHanson Oct 15, 2017
116c388
refactoring for clarity and simplification
BobHanson Oct 15, 2017
90ad6fd
adding gnu.jpdf
BobHanson Oct 15, 2017
0c784ef
adding gnu.jpdf
BobHanson Oct 15, 2017
015275a
adding gnu.jpdf
BobHanson Oct 15, 2017
dab0e1c
Applet fixes for new qualified calling -- Event Queue working; applets
BobHanson Nov 13, 2017
424a7f6
removing unnecessary calls
BobHanson Nov 13, 2017
ade8c35
test applets working
BobHanson Nov 14, 2017
a3e98ed
test applets working
BobHanson Nov 14, 2017
cca98ce
test suite working -- adding alert when code is not a JApplet
BobHanson Nov 14, 2017
1022a0d
//BH 11/13/17 -- final adjustments allow
BobHanson Nov 14, 2017
7496f77
comments
BobHanson Nov 14, 2017
0526f58
//BH 11/18/2017 -- adds full name-qualified support for generics,
BobHanson Nov 18, 2017
4e61ce1
slightly better handling of Java.awt.Frame
BobHanson Nov 18, 2017
1ec20db
temp
BobHanson Nov 18, 2017
99e9719
ignore
BobHanson Nov 18, 2017
b0a0d04
Applets running
BobHanson Nov 19, 2017
b4d232b
comments
BobHanson Nov 19, 2017
e08083b
New Source files for test
BobHanson Nov 19, 2017
349b460
more source files for test
BobHanson Nov 19, 2017
fd8c6e4
runtime additions
BobHanson Nov 19, 2017
def715e
runtime additions -- applets running
BobHanson Nov 19, 2017
2b20e97
moving JAudioThread to javajs; fix for Clazz.load(P$....)
BobHanson Nov 19, 2017
944ed02
moving JSAudioThread, fixing static JQueryUI call
BobHanson Nov 19, 2017
6071900
moving JSAudioThreadOwner to JSAudioThread.Owner
BobHanson Nov 19, 2017
0629480
adding a2s package
BobHanson Nov 19, 2017
1f2f00d
fix for superclass being an inner class
BobHanson Nov 20, 2017
f865796
fixes for qualified names
BobHanson Nov 20, 2017
99c0ac5
html templates
BobHanson Nov 20, 2017
fb443d4
updates for runtime and transpiler
BobHanson Nov 20, 2017
9095c81
Clazz.new(XXXX.c$...) not just new XXXX
BobHanson Nov 20, 2017
8c109f5
qualified names in @j2sNative
BobHanson Nov 20, 2017
7d17aaf
Falstad AtomViewer applet running smoothly
BobHanson Nov 20, 2017
0b23d28
fixing j2s-qualified names in jQuery/JS interface functions
BobHanson Nov 20, 2017
2a51e5d
adding in JSAudioThreadOwner as JSAudioThread.Owner
BobHanson Nov 20, 2017
aea4897
fixes for double->int using |0 - needed (); audio working
BobHanson Nov 21, 2017
74db39f
fixes for j2s-qualified names; Falstad applets working, including
BobHanson Nov 22, 2017
c46fecb
fixing <? extends T> generics (TreeSet)
BobHanson Nov 22, 2017
79a437e
Falstad Circuit running
BobHanson Nov 22, 2017
a6b4836
adds validate() for applets.
BobHanson Nov 22, 2017
5fb83bc
Falstad circuit upgrade; moved to falstad/circuit, not falstad/Circuit.
BobHanson Nov 22, 2017
7864ae7
Java 6 fix!!! for LinkedHashMap - could it be that processing order of
BobHanson Nov 22, 2017
e249a97
working on PDF printing.
BobHanson Nov 22, 2017
11ba447
Fix for toString not overriding Object's toString when found in
BobHanson Nov 23, 2017
9cd37c3
Applets running, including PDF creation; refactoring transpiler;
BobHanson Nov 24, 2017
8dd5645
test Site.zip and src files 11/24/17
BobHanson Nov 24, 2017
09fc4b4
Bob's Nov. 24, 2017 transpiler jar for eclipse/dropins
BobHanson Nov 24, 2017
7d8a703
fix for some methods with generic parameters not aliasing
BobHanson Nov 27, 2017
9afa9d7
fixes missing aliases for some methods with generic params
BobHanson Nov 27, 2017
58c5267
working on generics
BobHanson Nov 28, 2017
f0dc958
class initialization should not set Objects to null
BobHanson Nov 30, 2017
f6b55a4
adds clazz.$init0$ to prepare primitives at the right time - before
BobHanson Dec 4, 2017
5e4d89a
fixes for initialization events
BobHanson Dec 4, 2017
2c45a59
fix for $init0$ and $init$ not fully running
BobHanson Dec 5, 2017
ada4c98
site after $init0$ and $init$ changes
BobHanson Dec 5, 2017
f7a0a34
adds support for void.class
BobHanson Dec 6, 2017
4eab58a
fixes from PhET testing
BobHanson Dec 7, 2017
90c47b5
fixes from PhET testing
BobHanson Dec 7, 2017
1a43dfd
PhET added to net.sf.j2s.core.test
BobHanson Dec 7, 2017
133dd5c
simplified .j2s
BobHanson Dec 7, 2017
f0b656b
project clean-up
BobHanson Dec 7, 2017
6baa383
PhET test site
BobHanson Dec 7, 2017
50e4e2b
test.Test_init
BobHanson Dec 7, 2017
5077b2e
refactoring of ASTScriptVisitor -
BobHanson Dec 7, 2017
5475978
Test_Init, Test_Generic_Java8, others.
BobHanson Dec 7, 2017
53120a5
net.sf.j2s.core clean up -- SWT business removed to unused\
BobHanson Dec 16, 2017
12ba72a
commented sections removed
BobHanson Dec 16, 2017
b020b0c
adapters.Bindings clean up
BobHanson Dec 16, 2017
13a7075
j2s runtime refactoring 1/2
BobHanson Dec 16, 2017
3da6320
j2s runtime refactoring 2/2
BobHanson Dec 16, 2017
56c837b
refactored run-time; fix for static initialization timing
BobHanson Dec 16, 2017
b264780
refactoring adapters; C$.superClazz to C$.superclazz for compression
BobHanson Dec 17, 2017
49b7d60
refactoring adapters, adds build_core_applet and Google closure compiler
BobHanson Dec 17, 2017
1d31e45
moving unused pieces to unused/
BobHanson Dec 18, 2017
0aaa901
update to new Clazz method names
BobHanson Dec 18, 2017
866e73b
refactored run-time Clazz methods; Jama -> gov.nist.jama
BobHanson Dec 18, 2017
066be40
refactored run-time Clazz methods; Jama -> gov.nist.jama
BobHanson Dec 18, 2017
40510b6
move of Jama to gov.nist.jama
BobHanson Dec 18, 2017
cc4868f
setting up release files
BobHanson Dec 18, 2017
dd471a0
organizing release files
BobHanson Dec 18, 2017
e308400
JViewport fix for painted background
BobHanson Dec 19, 2017
1cbe880
fix for JSScrollPane not showing scrollbar
BobHanson Dec 19, 2017
8ef4197
refactoring for $incl$ - saves 3% in coreswingjs.z.js
BobHanson Dec 20, 2017
8f0dd73
removing warnings
BobHanson Dec 21, 2017
2a9502e
Java Error subclasses fix
BobHanson Dec 21, 2017
bc637b2
Java Error subclasses fix; adds this.this$0
BobHanson Dec 21, 2017
bcba0b3
EnumConstants moved to $clinit$, this$0 added
BobHanson Dec 22, 2017
3610740
Merge branch 'yadav1' of https://github.com/BobHanson/java2script.git
BobHanson Dec 22, 2017
dc51ef2
Merge branch 'yadav1' of https://github.com/BobHanson/java2script.git
BobHanson Dec 22, 2017
908d8b7
resending update
BobHanson Dec 22, 2017
db04a57
fixes Color.getColor(name)
BobHanson Dec 23, 2017
1008d82
Fixes ExceptionOf, Integer.decode, ClassLoader.hashCode, ExceptionOf
BobHanson Dec 23, 2017
b61b90d
Corrects for ExceptionOf not using quotes
BobHanson Dec 23, 2017
5d34493
Adds org.xml.sax
BobHanson Dec 23, 2017
5f60f5b
Varna and PhET full project zip
BobHanson Dec 23, 2017
fb24f7c
minor fixes and additional tests
BobHanson Dec 23, 2017
bfa57ec
Gnu JPDF fixes -- "serif" font; ".pdf" for file names
BobHanson Dec 23, 2017
66a9c80
@j2sNative now allows simple Javadoc without an empty {}
BobHanson Dec 24, 2017
9ec72a2
fixes in relation to Varna;
BobHanson Dec 24, 2017
c414edf
Menu fix for Varna .destroy() not found
BobHanson Dec 24, 2017
97f2683
core SwingJS compression
BobHanson Dec 24, 2017
9f95e6a
adds j2sSwingJS.js newEx for properly creating Exception classes
BobHanson Dec 24, 2017
63a724d
Menu item visibility fixes; working on PDF printing
BobHanson Dec 24, 2017
6ef2c0b
FileWriter, final Object
BobHanson Dec 28, 2017
902c29b
adds JOptionPane.getConfirmDialog
BobHanson Dec 28, 2017
d1b1c68
j2sNative without trailing {} fully implemented
BobHanson Dec 30, 2017
7d8863b
Fixed method.invoke(null) not working
BobHanson Dec 30, 2017
ee3d541
javax.imageio;JOptionPane
BobHanson Dec 30, 2017
e06a25b
core and run-time swingjs2.js update
BobHanson Dec 30, 2017
f9f21c1
@j2sNative without {...} allows multiple javadocs
BobHanson Dec 30, 2017
0fadf47
fix for j2sNative between "else" and {...}
BobHanson Dec 30, 2017
00fbabb
updated tests Intern, Dialog, Write
BobHanson Dec 30, 2017
82ab72c
modal dialogs
BobHanson Dec 30, 2017
667f8e2
JOptionPane, JColorChooser implemented
BobHanson Jan 1, 2018
b86cc7a
JColorChooser implemented with swatch and RGB
BobHanson Jan 1, 2018
6d6bb92
temporary fix to just set Locale.ENGLISH for all components
BobHanson Jan 1, 2018
1b4ecdf
fix for Class.getSuperclass() for primitives and Object
BobHanson Jan 1, 2018
29ba169
fix for $init$0 missing in classes with no fields
BobHanson Jan 1, 2018
d491c48
JTable preliminary implementation
BobHanson Jan 2, 2018
604b567
back to original, without extra $init0$
BobHanson Jan 2, 2018
ec2b24a
VARNA, after modal dialog work
BobHanson Jan 2, 2018
6cf3bcf
Latest J2S/SwingJS transpiler.
BobHanson Jan 2, 2018
3a1aa3a
commentary on VARNA work to date
BobHanson Jan 3, 2018
42a49b4
JFileChooser
BobHanson Jan 3, 2018
9e23ad6
JColorChooser, JFilechooser, JOptionPane
BobHanson Jan 3, 2018
cb4ce6f
JTable fixes for cell renderers and cell editors
BobHanson Jan 5, 2018
332516b
refactoring into one Java2ScriptVisitor.java
BobHanson Jan 6, 2018
08aec50
DnD implemented; JSFileBytes implemented; Proxy fixed
BobHanson Jan 6, 2018
c4ea840
standard DnD added for file drop
BobHanson Jan 6, 2018
6fcd3b1
adds preVisit2(node) for constants to allow /*
BobHanson Jan 7, 2018
9a3501e
DnD added using ui ["data-dropComponent"] for target
BobHanson Jan 7, 2018
8a9b93f
JSTableUI fixes for cell editing
BobHanson Jan 7, 2018
d04a8c6
documenting ASYNC_RETURN as implements UIResource
BobHanson Jan 7, 2018
2d3153d
DropTarget fix to allow just the drop-to object itself to accept drop
BobHanson Jan 7, 2018
15b514f
DropTarget fix to allow just the drop-to object itself to accept drop
BobHanson Jan 7, 2018
723a01d
Class.getClass fix to have one Class object for each class; dnd fix
BobHanson Jan 7, 2018
9c52726
fix for @j2sNative ending in a comment line with //...
BobHanson Jan 8, 2018
7a4287f
fix for static ENUM reference not using $incl$
BobHanson Jan 8, 2018
e5d1394
fix for inappropriate use of P$ for static variables
BobHanson Jan 9, 2018
d15db02
SwingjS2 update
BobHanson Jan 9, 2018
860cff4
comment only
BobHanson Jan 10, 2018
7d54b2a
fix for click on submenu causes infinite loop
BobHanson Jan 11, 2018
9f7e5af
removing all @j2sRequire, @j2sIgnore references
BobHanson Jan 15, 2018
db09ade
Adds BZIP2 capability
BobHanson Jan 15, 2018
f420b13
reconfigured A2S listeners
BobHanson Jan 25, 2018
c4f5c92
Several more examples; audio .au file reading;
BobHanson Jan 25, 2018
c7264fd
returned to correct version after copying from Jmol
BobHanson Jan 31, 2018
cf430b8
update of test runtime
BobHanson Jan 31, 2018
a127d65
dev -> site
BobHanson Jan 31, 2018
dc85fad
transpiler update for template.html
BobHanson Jan 31, 2018
afbec14
adds fix for Eclipse using /bin/ for getCodeBase()
BobHanson Jan 31, 2018
4b437e9
removing test projects
BobHanson Jan 31, 2018
dbb49a2
unnecessary duplicate
BobHanson Jan 31, 2018
95cd4f4
wrong location
BobHanson Jan 31, 2018
067c9f6
runtime source
BobHanson Jan 31, 2018
3f47b9e
moved to GitHub SwingJS-Examples
BobHanson Jan 31, 2018
4f5dab1
see https://github.com/BobHanson/SwingJS-Examples
BobHanson Jan 31, 2018
728e32f
README files
BobHanson Jan 31, 2018
62cabaa
readme
BobHanson Jan 31, 2018
0b0d1c4
moved to https://github.com/BobHanson/SwingJS-Examples
BobHanson Jan 31, 2018
44486d6
moved to https://github.com/BobHanson/SwingJS-Examples
BobHanson Jan 31, 2018
b2214f0
readme
BobHanson Jan 31, 2018
a3ffd03
readme
BobHanson Jan 31, 2018
881ddf4
updates of transpiler and java
BobHanson Feb 1, 2018
93676c3
removal of "readByteAsInt" no longer necessary
BobHanson Feb 2, 2018
da684a7
unnecessary
BobHanson Feb 2, 2018
e825baa
aligning Jmol and SwingJS
BobHanson Feb 2, 2018
e01e250
byte->double conversion qualification
BobHanson Feb 2, 2018
7635988
fix for |= and &| not being bitwise
BobHanson Feb 2, 2018
80463fc
Fixes for use of cached file data not resetting fully
BobHanson Feb 2, 2018
baa93c6
adds ContinuousAudioDataStream, SystemColor, netscape.javascript
BobHanson Feb 6, 2018
609eb43
A2SEvent missing Mouse_CLICKED
BobHanson Feb 6, 2018
d3b285e
allows Applet.resize(w,h) to function
BobHanson Feb 7, 2018
835ce54
new transpiler allows for unqualified public methods in user JApplet
BobHanson Feb 7, 2018
95d7f3c
fix for System.exit needs to stop running threads
BobHanson Feb 8, 2018
f1b92c7
renaming core J2S/SwingJS files going into swingjs2.js
BobHanson Feb 8, 2018
958a028
adds JSAppletUI; attempts to allow applet in frame
BobHanson Feb 8, 2018
0be7fed
adds java.io.StreamTokenizer
BobHanson Feb 13, 2018
ed02856
Adds String.copyValueOf
BobHanson Feb 13, 2018
a8c7d60
new swingjs2.js and core files in SwingJS-site.zip
BobHanson Feb 13, 2018
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
Prev Previous commit
Next Next commit
fixing String + double/float/Double/Float
  • Loading branch information
BobHanson committed Sep 6, 2017
commit 1475faace730d4c381b3cfbcfdb48abc1ea2ea7f
Original file line number Diff line number Diff line change
Expand Up @@ -1474,16 +1474,22 @@ public boolean visit(VariableDeclarationStatement node) {
public boolean visit(WhileStatement node) {
buffer.append("while (");
node.getExpression().accept(this);
buffer.append(") ");
node.getBody().accept(this);
buffer.append("\r\n");
return false;
}

protected void boxingNode(ASTNode element) {
/**
* box or unbox as necessary
*
* @param element
* @return true if boxing or unboxing
*/
protected boolean boxingNode(ASTNode element) {
if (element instanceof Expression) {
Expression exp = (Expression) element;
if (exp.resolveBoxing()) {
// expression is the site of a boxing conversion
ITypeBinding typeBinding = exp.resolveTypeBinding();
if (typeBinding.isPrimitive()) {
String name = typeBinding.getName();
Expand All @@ -1493,9 +1499,10 @@ protected void boxingNode(ASTNode element) {
getBuffer().append("new " + name + " (");
element.accept(this);
getBuffer().append(")");
return;
return true;
}
} else if (exp.resolveUnboxing()) {
// expression is the site of an unboxing conversion
ITypeBinding typeBinding = exp.resolveTypeBinding();
if (!typeBinding.isPrimitive()) {
String name = typeBinding.getQualifiedName();
Expand All @@ -1504,11 +1511,12 @@ protected void boxingNode(ASTNode element) {
getBuffer().append("(");
element.accept(this);
getBuffer().append(")." + name + "Value ()");
return;
return true;
}
}
}
element.accept(this);
return false;
}

private final static String defaultNonQualified =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -949,178 +949,218 @@ private boolean checkInfixOperator(InfixExpression node) {
return false;
}

private void charVisit(ASTNode node, boolean beCare) {
if (!beCare || !(node instanceof Expression)) {
boxingNode(node);
return;
}
Expression exp = (Expression) node;
ITypeBinding binding = exp.resolveTypeBinding();
if (binding.isPrimitive() && "char".equals(binding.getName())) {
if (node instanceof CharacterLiteral) {
CharacterLiteral cl = (CharacterLiteral) node;
buffer.append(0 + cl.charValue());
} else if (node instanceof SimpleName || node instanceof QualifiedName) {
boxingNode(node);
buffer.append(".charCodeAt (0)");
} else {
int idx1 = buffer.length();
if (node instanceof PrefixExpression || node instanceof PostfixExpression
|| node instanceof ParenthesizedExpression) {
boxingNode(node);
} else {
buffer.append("(");
boxingNode(node);
buffer.append(")");
}

boolean appendingCode = true;
int length = buffer.length();
if (exp instanceof MethodInvocation) {
MethodInvocation m = (MethodInvocation) exp;
if ("charAt".equals(m.getName().toString())) {
int idx2 = buffer.indexOf(".charAt ", idx1);
if (idx2 != -1) {
StringBuffer newMethodBuffer = new StringBuffer();
newMethodBuffer.append(buffer.substring(idx1 + 1, idx2));
newMethodBuffer.append(".charCodeAt ");
newMethodBuffer.append(buffer.substring(idx2 + 8, length - 1));
buffer.delete(idx1, length);
buffer.append(newMethodBuffer.toString());
appendingCode = false;
}
}
}
if (appendingCode) {
buffer.append(".charCodeAt (0)");
}
}
} else {
boxingNode(node);
}
}

public boolean visit(InfixExpression node) {
// TODO check for String + Double/Float --> String + ... .toString()
// and change to String + double/float --> String + new
// Double/Float(...).toString()
String constValue = checkConstantValue(node);
if (constValue != null) {
buffer.append(constValue);
return false;
}
ITypeBinding expTypeBinding = node.resolveTypeBinding();
boolean beCare = false;
if (expTypeBinding != null && expTypeBinding.getName().indexOf("String") == -1) {
beCare = true;
}
if (expTypeBinding == null)
return false;
boolean toString = (expTypeBinding.getName().indexOf("String") >= 0);
String operator = node.getOperator().toString();
Expression left = node.getLeftOperand();
Expression right = node.getRightOperand();
ITypeBinding typeBinding = left.resolveTypeBinding();

if (/*
* (left instanceof SimpleName || left instanceof CharacterLiteral)
* && (right instanceof SimpleName || right instanceof
* CharacterLiteral) &&
*/(">".equals(operator) || "<".equals(operator) || ">=".equals(operator) || "<=".equals(operator)
|| "==".equals(operator) || "!=".equals(operator))) {
ITypeBinding rightBinding = right.resolveTypeBinding();
if (typeBinding.isPrimitive() && "char".equals(typeBinding.getName()) && rightBinding.isPrimitive()
&& "char".equals(rightBinding.getName())) {
ITypeBinding leftTypeBinding = left.resolveTypeBinding();
ITypeBinding rightTypeBinding = right.resolveTypeBinding();
if (leftTypeBinding == null || rightTypeBinding == null)
return false;

if ("!==<=>=".indexOf(operator) >= 0) {
// < > <= >= == !=
if (leftTypeBinding.isPrimitive() && "char".equals(leftTypeBinding.getName())
&& rightTypeBinding.isPrimitive() && "char".equals(rightTypeBinding.getName())) {
boxingNode(left);
buffer.append(' ');
buffer.append(operator);
buffer.append(' ');
boxingNode(right);
return false;
}
}
if ("/".equals(operator)) {
if (typeBinding != null && typeBinding.isPrimitive()) {
if (isIntegerType(typeBinding.getName())) {
ITypeBinding rightTypeBinding = right.resolveTypeBinding();
if (isIntegerType(rightTypeBinding.getName())) {
StringBuffer oldBuffer = buffer;
buffer = new StringBuffer();
buffer.append("Clazz.doubleToInt (");
charVisit(left, beCare);
} else if ("/".equals(operator)) {
if (leftTypeBinding.isPrimitive() && isIntegerType(leftTypeBinding.getName())
&& isIntegerType(rightTypeBinding.getName())) {
StringBuffer oldBuffer = buffer;
buffer = new StringBuffer();
buffer.append("Clazz.doubleToInt (");
addOperand(left, toString, leftTypeBinding);
buffer.append(' ');
buffer.append(operator);
buffer.append(' ');
addOperand(right, toString, rightTypeBinding);
buffer.append(')');
List<?> extendedOperands = node.extendedOperands();
if (extendedOperands.size() > 0) {
for (Iterator<?> iter = extendedOperands.iterator(); iter.hasNext();) {
ASTNode element = (ASTNode) iter.next();
boolean is2Floor = false;
if (element instanceof Expression) {
Expression exp = (Expression) element;
ITypeBinding expBinding = exp.resolveTypeBinding();
if (isIntegerType(expBinding.getName())) {
buffer.insert(0, "Clazz.doubleToInt (");
is2Floor = true;
}
}
buffer.append(' ');
buffer.append(operator);
buffer.append(' ');
charVisit(right, beCare);
buffer.append(')');
List<?> extendedOperands = node.extendedOperands();
if (extendedOperands.size() > 0) {
for (Iterator<?> iter = extendedOperands.iterator(); iter.hasNext();) {
ASTNode element = (ASTNode) iter.next();
boolean is2Floor = false;
if (element instanceof Expression) {
Expression exp = (Expression) element;
ITypeBinding expBinding = exp.resolveTypeBinding();
if (isIntegerType(expBinding.getName())) {
// buffer.insert(0, "Math.floor (");
buffer.insert(0, "Clazz.doubleToInt (");
is2Floor = true;
}
}
buffer.append(' ');
buffer.append(operator);
buffer.append(' ');
charVisit(element, beCare);
if (is2Floor) {
buffer.append(')');
}
}
addOperand(element, toString, ((Expression) element).resolveTypeBinding());
if (is2Floor) {
buffer.append(')');
}

oldBuffer.append(buffer);
buffer = oldBuffer;
oldBuffer = null;

return false;
}
}
oldBuffer.append(buffer);
buffer = oldBuffer;
oldBuffer = null;
return false;
}
}
boolean simple = false;
if (typeBinding != null && typeBinding.isPrimitive()) {
if ("boolean".equals(typeBinding.getName())) {
boolean toBoolean = false;
if (leftTypeBinding.isPrimitive()) {
if ("boolean".equals(leftTypeBinding.getName())) {
if (checkInfixOperator(node)) {
buffer.append(" new Boolean (");
simple = true;
toBoolean = true;
}
}
}

charVisit(left, beCare);
// left
addOperand(left, toString, leftTypeBinding);
buffer.append(' ');
// op
buffer.append(operator);
if ("==".equals(operator) || "!=".equals(operator)) {
if (typeBinding != null && !typeBinding.isPrimitive() && !(left instanceof NullLiteral)
&& !(right instanceof NullLiteral)
/*
* && !(node.getLeftOperand() instanceof StringLiteral) // "abc" ==
* ... && !(node.getRightOperand() instanceof StringLiteral)
*/) {
buffer.append('=');
}
if (("==".equals(operator) || "!=".equals(operator)) && !leftTypeBinding.isPrimitive()
&& !(left instanceof NullLiteral) && !(right instanceof NullLiteral)) {
buffer.append('=');
}
buffer.append(' ');
charVisit(right, beCare);
// right
addOperand(right, toString, rightTypeBinding);

// ok, this is trouble
// The extended operands is the preferred way of representing deeply
// nested expressions of the form L op R op R2 op R3... where the same
// operator appears between all the operands (the most common case being
// lengthy string concatenation expressions). Using the extended
// operands keeps the trees from getting too deep; this decreases the
// risk is running out of thread stack space at runtime when traversing
// such trees. ((a + b) + c) + d would be translated to: leftOperand: a
// rightOperand: b extendedOperands: {c, d} operator: +

List<?> extendedOperands = node.extendedOperands();
if (extendedOperands.size() > 0) {
for (Iterator<?> iter = extendedOperands.iterator(); iter.hasNext();) {
buffer.append(' ');
buffer.append(operator);
buffer.append(' ');
ASTNode element = (ASTNode) iter.next();
charVisit(element, beCare);
addOperand(element, toString, ((Expression) element).resolveTypeBinding());
}
}
if (simple) {
if (toBoolean) {
buffer.append(").valueOf ()");
}
return false;
}

/**
* add the operand, checking to see if it needs some adjustment:
*
* (a) String + x where x is {double/float} requires boxing Double/Float(x).toString()
*
* (b) String + x where x is {Double/Float} requires added .toString()
*
* (c)
*
* @param node
* @param toString
* @param typeBinding
*/
private void addOperand(ASTNode node, boolean toString, ITypeBinding typeBinding) {
if (!(node instanceof Expression)) {
// BH I don't see how node cannot be an expression
node.accept(this);
return;
}
if (toString) {
// BH
String prefix = null, suffix = null;
switch (typeBinding.getName()) {
case "double":
prefix = "new Double(";
suffix = ")";
break;
case "float":
prefix = "new Float(";
suffix = ")";
break;
case "Double":
case "Float":
prefix = suffix = "";
break;
default:
node.accept(this);
break;
}
if (prefix != null) {
buffer.append(prefix);
node.accept(this);
buffer.append(suffix);
buffer.append(".toString()");
}
return;
}
ITypeBinding binding = ((Expression) node).resolveTypeBinding();
if (!binding.isPrimitive() || !"char".equals(binding.getName())) {
boxingNode(node);
return;
}
// to char
if (node instanceof CharacterLiteral) {
CharacterLiteral cl = (CharacterLiteral) node;
buffer.append(0 + cl.charValue());
} else if (node instanceof SimpleName || node instanceof QualifiedName) {
boxingNode(node);
buffer.append(".charCodeAt (0)");
} else {
int idx1 = buffer.length();
if (node instanceof PrefixExpression || node instanceof PostfixExpression
|| node instanceof ParenthesizedExpression) {
boxingNode(node);
} else {
buffer.append("(");
boxingNode(node);
buffer.append(")");
}
boolean addCharCodeAt0 = true;
int length = buffer.length();
if (node instanceof MethodInvocation) {
MethodInvocation m = (MethodInvocation) node;
if ("charAt".equals(m.getName().toString())) {
int idx2 = buffer.indexOf(".charAt ", idx1);
if (idx2 != -1) {
StringBuffer newMethodBuffer = new StringBuffer();
newMethodBuffer.append(buffer.substring(idx1 + 1, idx2));
newMethodBuffer.append(".charCodeAt ");
newMethodBuffer.append(buffer.substring(idx2 + 8, length - 1));
buffer.delete(idx1, length);
buffer.append(newMethodBuffer.toString());
addCharCodeAt0 = false;
}
}
}
if (addCharCodeAt0) {
buffer.append(".charCodeAt (0)");
}
}
}

public boolean visit(Initializer node) {
if (checkj2sIgnore(node)) {
return false;
Expand Down
Loading