Community
Participate
Working Groups
Hi, when doing very fast ctrl-z / ctrl-y, I get (rarely) ArrayIndexOutOfBoundsException logged in console. It's probably related with what I've already seen in https://bugs.eclipse.org/bugs/show_bug.cgi?id=491105#c5 ------------------------------------------------------------------------------- eclipse.buildId=4.5.2.M20160212-1500 java.version=1.8.0_66 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=fr_FR Framework arguments: -product org.eclipse.epp.package.jee.product Command-line arguments: -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.jee.product org.eclipse.php.core Error Tue Jul 26 16:55:34 CEST 2016 null java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:570) at java.lang.StringBuffer.append(StringBuffer.java:369) at org.eclipse.jface.text.GapTextStore.get(GapTextStore.java:164) at org.eclipse.wst.sse.core.internal.text.StructuredDocumentTextStore.get(StructuredDocumentTextStore.java:66) at org.eclipse.wst.sse.core.internal.text.BasicStructuredDocument.get(BasicStructuredDocument.java:1210) at org.eclipse.dltk.internal.ui.editor.DocumentAdapter.getContents(DocumentAdapter.java:336) at org.eclipse.dltk.internal.core.AbstractSourceModule.getSourceAsCharArray(AbstractSourceModule.java:334) at org.eclipse.dltk.internal.core.AbstractSourceModule.getContentsAsCharArray(AbstractSourceModule.java:353) at org.eclipse.php.internal.core.compiler.ast.parser.AbstractPHPSourceParser.parse(AbstractPHPSourceParser.java:39) at org.eclipse.php.internal.core.compiler.ast.parser.PHPSourceParserFactory.parse(PHPSourceParserFactory.java:41) at org.eclipse.dltk.core.SourceParserUtil.parse(SourceParserUtil.java:149) at org.eclipse.dltk.core.SourceParserUtil.getModuleDeclaration(SourceParserUtil.java:185) at org.eclipse.dltk.core.SourceParserUtil.getModuleDeclaration(SourceParserUtil.java:180) at org.eclipse.php.internal.core.typeinference.PHPModelUtils.extractNamespaceName(PHPModelUtils.java:199) at org.eclipse.php.internal.core.typeinference.PHPModelUtils.getTypes(PHPModelUtils.java:1724) at org.eclipse.php.internal.core.typeinference.PHPTypeInferenceUtils.internalGetModelElements(PHPTypeInferenceUtils.java:203) at org.eclipse.php.internal.core.typeinference.PHPTypeInferenceUtils.internalGetModelElements(PHPTypeInferenceUtils.java:216) at org.eclipse.php.internal.core.typeinference.PHPTypeInferenceUtils.getModelElements(PHPTypeInferenceUtils.java:152) at org.eclipse.php.internal.core.typeinference.BindingUtility.getModelElement(BindingUtility.java:341) at org.eclipse.php.internal.core.typeinference.BindingUtility.getModelElement(BindingUtility.java:326) at org.eclipse.php.internal.core.ast.nodes.DefaultBindingResolver.getModelElements(DefaultBindingResolver.java:272) at org.eclipse.php.internal.core.ast.nodes.DefaultBindingResolver.resolveExpressionType(DefaultBindingResolver.java:364) at org.eclipse.php.internal.core.ast.nodes.Expression.resolveTypeBinding(Expression.java:110) at org.eclipse.php.internal.ui.editor.highlighter.ModelUtils.getMethod(ModelUtils.java:61) at org.eclipse.php.internal.ui.editor.highlighters.DeprecatedHighlighting$DeprecatedApply.visit(DeprecatedHighlighting.java:145) at org.eclipse.php.internal.core.ast.nodes.MethodInvocation.accept0(MethodInvocation.java:76) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.MethodInvocation.childrenAccept(MethodInvocation.java:84) at org.eclipse.php.internal.core.ast.nodes.MethodInvocation.accept0(MethodInvocation.java:78) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.MethodInvocation.childrenAccept(MethodInvocation.java:84) at org.eclipse.php.internal.core.ast.nodes.MethodInvocation.accept0(MethodInvocation.java:78) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Assignment.childrenAccept(Assignment.java:138) at org.eclipse.php.internal.core.ast.nodes.Assignment.accept0(Assignment.java:167) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.ExpressionStatement.childrenAccept(ExpressionStatement.java:75) at org.eclipse.php.internal.core.ast.nodes.ExpressionStatement.accept0(ExpressionStatement.java:69) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Block.childrenAccept(Block.java:94) at org.eclipse.php.internal.core.ast.nodes.Block.accept0(Block.java:87) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.IfStatement.childrenAccept(IfStatement.java:92) at org.eclipse.php.internal.core.ast.nodes.IfStatement.accept0(IfStatement.java:85) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Block.childrenAccept(Block.java:94) at org.eclipse.php.internal.core.ast.nodes.Block.accept0(Block.java:87) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.IfStatement.childrenAccept(IfStatement.java:92) at org.eclipse.php.internal.core.ast.nodes.IfStatement.accept0(IfStatement.java:85) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Block.childrenAccept(Block.java:94) at org.eclipse.php.internal.core.ast.nodes.Block.accept0(Block.java:87) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.FunctionDeclaration.childrenAccept(FunctionDeclaration.java:128) at org.eclipse.php.internal.core.ast.nodes.FunctionDeclaration.accept0(FunctionDeclaration.java:114) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.MethodDeclaration.childrenAccept(MethodDeclaration.java:90) at org.eclipse.php.internal.core.ast.nodes.MethodDeclaration.accept0(MethodDeclaration.java:82) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Block.childrenAccept(Block.java:94) at org.eclipse.php.internal.core.ast.nodes.Block.accept0(Block.java:87) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.ClassDeclaration.childrenAccept(ClassDeclaration.java:127) at org.eclipse.php.internal.core.ast.nodes.ClassDeclaration.accept0(ClassDeclaration.java:113) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Program.childrenAccept(Program.java:176) at org.eclipse.php.internal.core.ast.nodes.Program.accept0(Program.java:169) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.ui.editor.highlighter.AbstractSemanticHighlighting.consumes(AbstractSemanticHighlighting.java:99) at org.eclipse.php.internal.ui.editor.highlighter.AbstractSemanticHighlighting.consumes(AbstractSemanticHighlighting.java:109) at org.eclipse.wst.sse.ui.internal.style.SemanticHighlightingReconciler.reconcile(SemanticHighlightingReconciler.java:136) at org.eclipse.wst.sse.ui.internal.reconcile.DocumentRegionProcessor.endProcessing(DocumentRegionProcessor.java:137) at org.eclipse.wst.sse.ui.internal.reconcile.DirtyRegionProcessor$BackgroundThread.run(DirtyRegionProcessor.java:697) ------------------------------------------------------------------------------ eclipse.buildId=4.5.2.M20160212-1500 java.version=1.8.0_66 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=fr_FR Framework arguments: -product org.eclipse.epp.package.jee.product Command-line arguments: -os win32 -ws win32 -arch x86 -product org.eclipse.epp.package.jee.product org.eclipse.php.core Error Tue Jul 26 16:51:18 CEST 2016 null java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:570) at java.lang.StringBuffer.append(StringBuffer.java:369) at org.eclipse.jface.text.GapTextStore.get(GapTextStore.java:164) at org.eclipse.wst.sse.core.internal.text.StructuredDocumentTextStore.get(StructuredDocumentTextStore.java:66) at org.eclipse.wst.sse.core.internal.text.BasicStructuredDocument.get(BasicStructuredDocument.java:1210) at org.eclipse.dltk.internal.ui.editor.DocumentAdapter.getContents(DocumentAdapter.java:336) at org.eclipse.dltk.internal.core.AbstractSourceModule.getSourceAsCharArray(AbstractSourceModule.java:334) at org.eclipse.dltk.internal.core.AbstractSourceModule.getContentsAsCharArray(AbstractSourceModule.java:353) at org.eclipse.php.internal.core.compiler.ast.parser.AbstractPHPSourceParser.parse(AbstractPHPSourceParser.java:39) at org.eclipse.php.internal.core.compiler.ast.parser.PHPSourceParserFactory.parse(PHPSourceParserFactory.java:41) at org.eclipse.dltk.core.SourceParserUtil.parse(SourceParserUtil.java:149) at org.eclipse.dltk.core.SourceParserUtil.getModuleDeclaration(SourceParserUtil.java:185) at org.eclipse.dltk.core.SourceParserUtil.getModuleDeclaration(SourceParserUtil.java:180) at org.eclipse.php.internal.core.typeinference.PHPModelUtils.extractNamespaceName(PHPModelUtils.java:199) at org.eclipse.php.internal.core.typeinference.PHPModelUtils.getTypes(PHPModelUtils.java:1724) at org.eclipse.php.internal.core.typeinference.PHPTypeInferenceUtils.internalGetModelElements(PHPTypeInferenceUtils.java:203) at org.eclipse.php.internal.core.typeinference.PHPTypeInferenceUtils.getModelElements(PHPTypeInferenceUtils.java:152) at org.eclipse.php.internal.core.typeinference.BindingUtility.getModelElement(BindingUtility.java:341) at org.eclipse.php.internal.core.typeinference.BindingUtility.getModelElement(BindingUtility.java:326) at org.eclipse.php.internal.core.ast.nodes.DefaultBindingResolver.getModelElements(DefaultBindingResolver.java:272) at org.eclipse.php.internal.core.ast.nodes.DefaultBindingResolver.resolveExpressionType(DefaultBindingResolver.java:364) at org.eclipse.php.internal.core.ast.nodes.Expression.resolveTypeBinding(Expression.java:110) at org.eclipse.php.internal.ui.editor.highlighter.ModelUtils.getMethod(ModelUtils.java:61) at org.eclipse.php.internal.ui.editor.highlighters.DeprecatedHighlighting$DeprecatedApply.visit(DeprecatedHighlighting.java:145) at org.eclipse.php.internal.core.ast.nodes.MethodInvocation.accept0(MethodInvocation.java:76) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.ExpressionStatement.childrenAccept(ExpressionStatement.java:75) at org.eclipse.php.internal.core.ast.nodes.ExpressionStatement.accept0(ExpressionStatement.java:69) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Block.childrenAccept(Block.java:94) at org.eclipse.php.internal.core.ast.nodes.Block.accept0(Block.java:87) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.ForEachStatement.childrenAccept(ForEachStatement.java:107) at org.eclipse.php.internal.core.ast.nodes.ForEachStatement.accept0(ForEachStatement.java:96) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Block.childrenAccept(Block.java:94) at org.eclipse.php.internal.core.ast.nodes.Block.accept0(Block.java:87) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.FunctionDeclaration.childrenAccept(FunctionDeclaration.java:128) at org.eclipse.php.internal.core.ast.nodes.FunctionDeclaration.accept0(FunctionDeclaration.java:114) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.MethodDeclaration.childrenAccept(MethodDeclaration.java:90) at org.eclipse.php.internal.core.ast.nodes.MethodDeclaration.accept0(MethodDeclaration.java:82) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Block.childrenAccept(Block.java:94) at org.eclipse.php.internal.core.ast.nodes.Block.accept0(Block.java:87) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.ClassDeclaration.childrenAccept(ClassDeclaration.java:127) at org.eclipse.php.internal.core.ast.nodes.ClassDeclaration.accept0(ClassDeclaration.java:113) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.core.ast.nodes.Program.childrenAccept(Program.java:176) at org.eclipse.php.internal.core.ast.nodes.Program.accept0(Program.java:169) at org.eclipse.php.internal.core.ast.nodes.ASTNode.accept(ASTNode.java:292) at org.eclipse.php.internal.ui.editor.highlighter.AbstractSemanticHighlighting.consumes(AbstractSemanticHighlighting.java:99) at org.eclipse.php.internal.ui.editor.highlighter.AbstractSemanticHighlighting.consumes(AbstractSemanticHighlighting.java:109) at org.eclipse.wst.sse.ui.internal.style.SemanticHighlightingReconciler.reconcile(SemanticHighlightingReconciler.java:136) at org.eclipse.wst.sse.ui.internal.reconcile.DocumentRegionProcessor.endProcessing(DocumentRegionProcessor.java:137) at org.eclipse.wst.sse.ui.internal.reconcile.DirtyRegionProcessor$BackgroundThread.run(DirtyRegionProcessor.java:697)
Hi, sadly still present, even after the new PHP reconciler patch (https://git.eclipse.org/r/#/c/115761/) was merged: Exception:java.lang.ArrayIndexOutOfBoundsException: null at java.lang.System.arraycopy(System.java:-2) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:597) at java.lang.StringBuffer.append(StringBuffer.java:367) at org.eclipse.jface.text.GapTextStore.get(GapTextStore.java:161) at org.eclipse.wst.sse.core.internal.text.StructuredDocumentTextStore.get(StructuredDocumentTextStore.java:66) at org.eclipse.wst.sse.core.internal.text.BasicStructuredDocument.get(BasicStructuredDocument.java:1210) at org.eclipse.dltk.internal.ui.editor.DocumentAdapter.getContents(DocumentAdapter.java:397) at org.eclipse.dltk.internal.core.AbstractSourceModule.getSourceAsCharArray(AbstractSourceModule.java:336) at org.eclipse.dltk.internal.core.AbstractSourceModule.getContentsAsCharArray(AbstractSourceModule.java:355) at org.eclipse.php.internal.core.compiler.ast.parser.AbstractPHPSourceParser.parse(AbstractPHPSourceParser.java:40) at org.eclipse.php.internal.core.compiler.ast.parser.PHPSourceParserFactory.parse(PHPSourceParserFactory.java:36) at org.eclipse.dltk.core.SourceParserUtil.parse(SourceParserUtil.java:149) at org.eclipse.dltk.core.SourceParserUtil.getModuleDeclaration(SourceParserUtil.java:185) at org.eclipse.dltk.core.SourceParserUtil.getModuleDeclaration(SourceParserUtil.java:180) at org.eclipse.php.internal.core.typeinference.PHPModelUtils.extractNamespaceName(PHPModelUtils.java:241) at org.eclipse.php.internal.core.typeinference.PHPModelUtils.getTypes(PHPModelUtils.java:1881) at org.eclipse.php.internal.core.typeinference.PHPTypeInferenceUtils.internalGetModelElements(PHPTypeInferenceUtils.java:203) at org.eclipse.php.internal.core.typeinference.PHPTypeInferenceUtils.getModelElements(PHPTypeInferenceUtils.java:152) at org.eclipse.php.internal.core.typeinference.BindingUtility.getModelElement(BindingUtility.java:337) at org.eclipse.php.internal.core.typeinference.BindingUtility.getModelElement(BindingUtility.java:322) at org.eclipse.php.core.ast.nodes.DefaultBindingResolver.getModelElements(DefaultBindingResolver.java:275) at org.eclipse.php.core.ast.nodes.DefaultBindingResolver.resolveExpressionType(DefaultBindingResolver.java:374) at org.eclipse.php.core.ast.nodes.Expression.resolveTypeBinding(Expression.java:110) at org.eclipse.php.internal.ui.editor.highlighter.ModelUtils.getMethod(ModelUtils.java:61) at org.eclipse.php.internal.ui.editor.highlighters.DeprecatedHighlighting$DeprecatedApply.visit(DeprecatedHighlighting.java:145) at org.eclipse.php.core.ast.nodes.MethodInvocation.accept0(MethodInvocation.java:77) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.ExpressionStatement.childrenAccept(ExpressionStatement.java:77) at org.eclipse.php.core.ast.nodes.ExpressionStatement.accept0(ExpressionStatement.java:70) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.Block.childrenAccept(Block.java:96) at org.eclipse.php.core.ast.nodes.Block.accept0(Block.java:88) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.IfStatement.childrenAccept(IfStatement.java:94) at org.eclipse.php.core.ast.nodes.IfStatement.accept0(IfStatement.java:86) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.Block.childrenAccept(Block.java:96) at org.eclipse.php.core.ast.nodes.Block.accept0(Block.java:88) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.FunctionDeclaration.childrenAccept(FunctionDeclaration.java:132) at org.eclipse.php.core.ast.nodes.FunctionDeclaration.accept0(FunctionDeclaration.java:117) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.MethodDeclaration.childrenAccept(MethodDeclaration.java:92) at org.eclipse.php.core.ast.nodes.MethodDeclaration.accept0(MethodDeclaration.java:83) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.Block.childrenAccept(Block.java:96) at org.eclipse.php.core.ast.nodes.Block.accept0(Block.java:88) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.ClassDeclaration.childrenAccept(ClassDeclaration.java:129) at org.eclipse.php.core.ast.nodes.ClassDeclaration.accept0(ClassDeclaration.java:114) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.core.ast.nodes.Program.childrenAccept(Program.java:188) at org.eclipse.php.core.ast.nodes.Program.accept0(Program.java:180) at org.eclipse.php.core.ast.nodes.ASTNode.accept(ASTNode.java:294) at org.eclipse.php.internal.ui.editor.highlighter.AbstractSemanticHighlighting.consumes(AbstractSemanticHighlighting.java:98) at org.eclipse.php.internal.ui.editor.highlighter.AbstractSemanticHighlighting.consumes(AbstractSemanticHighlighting.java:109) at org.eclipse.wst.sse.ui.internal.style.SemanticHighlightingReconciler.reconcile(SemanticHighlightingReconciler.java:127) at org.eclipse.wst.sse.ui.internal.reconcile.DocumentRegionProcessor.endProcessing(DocumentRegionProcessor.java:137) at org.eclipse.wst.sse.ui.internal.reconcile.DirtyRegionProcessor$BackgroundThread.run(DirtyRegionProcessor.java:697)
As I see this problem has been reported on SSE by Natalia: https://bugs.eclipse.org/bugs/show_bug.cgi?id=369559
But real problem is how BindingResolver works. It can't play with realWorking copy, see for example bug 438096 and bug 438091. It't problem with most of our internal tools: 1. Binding tools work with Compiler AST, and keep it working copy synced with DOM AST 2. It internally use PHPTypeInferenceUtils, where connection is lost because most of our tools require ISourceModule / IContext / IResource. 3. These tools use others off course (dependency hell) 4. When any of these tools need ASTNode (most of them require it off course), they call SourceParserUtil. 5. SourceParserUtil detects document change, trying to reconcile ... 6. Huston we have a problem... ;)
*** Bug 530499 has been marked as a duplicate of this bug. ***
To fix this I have to change internal APIs a lot and during work I'll touch at least bug 438100 bug 438096 and bug 438091. Also to do it in reasonable time I'll drop backward compatibility. API's are internal so I think I can do this during 5.3 phase. After patch memory and cpu usage will drop. My plan: Introduce IPHPModelAccess, implementation should take care of: 1. Accessing to Index 2. Accessing to AST 3. Keeping correct search scope 4. His sub class can cache AST and queries to index (like IPHPModelAccess but based on search scope). IPHPModelAccess have to be used internally by all inference/assist/model/ast tools. If tool need information from other tool, IPHPModelAccess have to be forwarded, directly or for example by IContext. Later we can move IPHPModelAccess to API and introduce public factories. Do you have any objections?
Hi Dawid, no objections, that's great, it should be fixed sooner or later ;) I'll follow your progression of the gerrit patch(es) ;) Thierry.