Eclipse3.3 和 Eclipse3.4的语言包Bug?!(情人节更新)

今天本来打算察看jdk把foreach转换为什么样子的字节码,发现无法正确打开class文件!出现如图错误



明明记得以前是可以正确打开class文件的!(没有安装任何反编译class的插件的) 

1 翻译JDK问题:和以前的差别只是jdk从1.5切换到了现在的1.6了,看提示是MessageFormat.applyPattern有错,难道jdk1.6修改了这个导致不匹配了!切换到了1.5的jdk,打开后依然错误。当时我认为可能是jdk代码修改了,分别打开他们了的源代码,然后查看发现两者并无特别的差异,排除jdk故障!

2 怀疑是安装了插件导致:重新使用原始的eclipse3.3的包再次测试,竟然一切正常!晕,看样子可以确认是安装了插件导致的!到底是什么插件呢 :(

仔细看错误的异常堆栈,发现全部都是eclipse的专用类,故开始跟踪代码,从里向外走

a java.text.MessageFormat.applyPattern(MessageFormat.java:468)——〉throw new IllegalArgumentException("Unmatched braces in the pattern.");

异常是参数错误导致的,也就是这个pattern错误,继续跟踪代码发现这个pattern在

b org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:883)

--〉buffer.append(Messages.bind(Messages.disassembler_opentypedeclaration));

是的传递给MessageFormat.applyPattern的pattern就是Messages.disassembler_opentypedeclaration;故猜测错误就在这个Messages.disassembler_opentypedeclaration有问题

c 察看Messages类 发现BUNDLE_NAME = "org.eclipse.jdt.internal.core.util.messages";同时回忆自己安装了汉化包,说明一定是汉化包里面的资源文件有问题,打开message.properties后找到配置disassembler_opentypedeclaration =\ '{';然后打开汉化包:org.eclipse.jdt.core.nl_zh_3.3.0.v20081123043401.jar里面对应的资源文件查看发现:他们确实不一样如图修改



使用rar把修改后的文件替换原来的(使用的是MyEclipse的属性编辑器) 

d 新的问题:满怀希望打开eclipse竟然出现了新问题,如图:

新的问题

E试验 禁用语言包打开eclipse,然后打开class文件查看结果如图对比他们的差异



 

第一行://disassembler_fieldhasconstant = =编译自disassembler_enclosingmethodheader = 外层方法:TestLoop.java (版本 1.5:49.0,超级位)

正确的为:// Compiled from TestLoop.java (version 1.5 : 49.0, super bit)

确认:disassembler_fieldhasconstant和disassembler_enclosingmethodheader 未正确解析

对比两个资源文件得到结论:disassembler_begincommentline=//disassembler_fieldhasconstant \= \=

未正确拆分为两行导致的,修改为:

disassembler_begincommentline = //\
disassembler_fieldhasconstant =\ =\

启用汉化插件,重新打开eclipse察看class,确实有改变了,故此发现故障出现地方!

 

不断地修改message即可完全解决问题,解决问题后的messages_zh文件为:messages_zh.properties

至此问题彻底解决(我把一些他们没有翻译为中文的配置都干掉了 ^ ^)

 

经验:

1 发布的东西不见得没有bug, ^ ^

2 英文要学好,E文不好就不去汇报bug了

3 调试功底需要不断的摸索才可以提高!

 

可能有人说无法察看源代码,那就需要rcp开发版了,我的环境是eclipse-rcp 3.3版本的!故可以查看eclipse的源代码!

直接建立eclipse插件项目,然后把jdt包引入,通过查找java类就可以快速定位源代码了

^ ^

 

2009-02-14

今天打算开始使用eclipse3.4,发现这个bug依然存在,打算解决这个问题:
java.lang.IllegalArgumentException: Unmatched braces in the pattern.
at java.text.MessageFormat.applyPattern(MessageFormat.java:476)
at java.text.MessageFormat.<init>(MessageFormat.java:350)
at java.text.MessageFormat.format(MessageFormat.java:811)
at org.eclipse.jdt.internal.core.util.Messages.bind(Messages.java:384)
at org.eclipse.jdt.internal.core.util.Messages.bind(Messages.java:350)
at org.eclipse.jdt.internal.core.util.Disassembler.disassemble( Disassembler.java:932)
at org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:290)

1 创建RCP项目,添加org.eclipse.jdt.core依赖
2 打开文件org.eclipse.jdt.internal.core.util.Disassembler 第932行
然后快速定位到资源文件org.eclipse.jdt.internal.core.util.messages
打开语言包文件
\eclipse-rcp-ganymede-SR1-win32\eclipse\plugins\org.eclipse.jdt.core.nl_zh_3.4.0.v20090208043401.jar
解压messages_zh.properties文件
根据上次的解决(空格被错误翻译了,空格为"\ "翻译后变成了"\"成了续行符号了)搜索"\\$"替换为"\ "就可以解决这个问题了!
还有个别的再改改基本就可以正确了

修改后的文件properties_zh.properties

 

2009-02-16

今天我发现了语言包依然有问题,原来在English版本下可以使用的到中文下无法正常使用了!具体是:JInto的快速提示如果选中的话,导致快速提示失败,如果不选中又发现快速提示中的文字出现了乱码,具体是函数的返回值描述部分 符号":"变成了\xU123,具体不太清楚了,反正感觉就是这个message有问题导致了eclipse运行有问题。

 

现在发现了问题,也明白了为什么开源需要大家参与,如果我们不去修复这些问题,那么后来人就会对软件失去信心,或者对软件形成错误的认识(eclipse本身就无法实现这个功能),国内使用中文的需求还是比较大的,如果我们不贡献力量,对于国内软件的发展确实存在小小的影响,开源的意义还是很重要的!而且非常重要!^ ^

 

又发现了一个bug:有6个国际化文件的中文化有问题,表现在":"被错误转化了多了一个"\"变成了两个"\\"导致错误国际化了,解决办法:使用rar搜索*.properties文件中的\\u????(具体不记得了),然后再修复错误即可^ ^

你可能感兴趣的:(java,eclipse,jdk,MyEclipse,D语言)