diff --git a/pdex/Todo, GSoC 2013.txt b/pdex/Todo, GSoC 2013.txt index 3ef1036bd..dc1461ecd 100644 --- a/pdex/Todo, GSoC 2013.txt +++ b/pdex/Todo, GSoC 2013.txt @@ -28,7 +28,9 @@ x Differentiating between multiple statements on the same line. How to? Done wit * - Add a static debug field, disable debugging info on console. * - update build.xml to produce dists * - Make this a contributed mode - mode.txt, github releases feature, version numbering, git tags, etc -* - Parameterized type support is broken. +x - Parameterized type support is broken. +x - Array types, all all other types support broken. :\ +x - Completion for array access, strings[0]. Finer details diff --git a/pdex/src/processing/mode/experimental/ASTGenerator.java b/pdex/src/processing/mode/experimental/ASTGenerator.java index 7183f6755..e4dd06482 100644 --- a/pdex/src/processing/mode/experimental/ASTGenerator.java +++ b/pdex/src/processing/mode/experimental/ASTGenerator.java @@ -56,6 +56,8 @@ import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.ASTParser; +import org.eclipse.jdt.core.dom.ArrayAccess; +import org.eclipse.jdt.core.dom.ArrayType; import org.eclipse.jdt.core.dom.Block; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.Expression; @@ -66,6 +68,7 @@ import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.MethodInvocation; import org.eclipse.jdt.core.dom.Name; import org.eclipse.jdt.core.dom.NodeFinder; +import org.eclipse.jdt.core.dom.ParameterizedType; import org.eclipse.jdt.core.dom.PrimitiveType; import org.eclipse.jdt.core.dom.QualifiedName; import org.eclipse.jdt.core.dom.SimpleName; @@ -247,9 +250,9 @@ public class ASTGenerator { return; jtree.setModel(new DefaultTreeModel(codeTree)); ((DefaultTreeModel) jtree.getModel()).reload(); -// if (!frame2.isVisible()) { -// frame2.setVisible(true); -// } + if (!frame2.isVisible()) { + frame2.setVisible(true); + } // if (!frameAutoComp.isVisible()) { // // frameAutoComp.setVisible(true); @@ -676,6 +679,9 @@ public class ASTGenerator { } } + case ASTNode.ARRAY_ACCESS: + ArrayAccess arac = (ArrayAccess)astNode; + return resolveExpression3rdParty(nearestNode, arac.getArray(), noCompare); default: System.out.println("Unaccounted type " + getNodeAsString(astNode)); break; @@ -700,6 +706,8 @@ public class ASTGenerator { return ((QualifiedName) expression).getName(); }else if (expression instanceof MethodInvocation) { return ((MethodInvocation) expression).getName(); + }else if(expression instanceof ArrayAccess){ + return ((ArrayAccess)expression).getArray(); } System.out.println(" getChildExpression returning NULL for " + getNodeAsString(expression)); @@ -716,6 +724,8 @@ public class ASTGenerator { return ((QualifiedName) expression).getQualifier(); } else if (expression instanceof MethodInvocation) { return ((MethodInvocation) expression).getExpression(); + }else if(expression instanceof ArrayAccess){ + return ((ArrayAccess)expression).getArray(); } System.out.println("getParentExpression returning NULL for " + getNodeAsString(expression)); @@ -2652,11 +2662,31 @@ public class ASTGenerator { * @return */ public static SimpleType extracTypeInfo(ASTNode node) { - if (node == null) + if (node == null) { return null; - Type t = extracTypeInfo2(node); - if (t instanceof PrimitiveType) - return null; + } + Type t = extracTypeInfo2(node); + if (t instanceof PrimitiveType) { + return null; + } else if (t instanceof ArrayType) { + ArrayType at = (ArrayType) t; + System.out.println(at.getComponentType() + " <-comp type, ele type-> " + + at.getElementType() + ", " + + at.getElementType().getClass().getName()); + if (at.getElementType() instanceof PrimitiveType) { + return null; + } else if (at.getElementType() instanceof SimpleType) { + return (SimpleType) at.getElementType(); + } else + return null; + } else if (t instanceof ParameterizedType) { + ParameterizedType pmt = (ParameterizedType) t; + System.out.println(pmt.getType() + ", " + pmt.getType().getClass()); + if (pmt.getType() instanceof SimpleType) { + return (SimpleType) pmt.getType(); + } else + return null; + } return (SimpleType) t; } diff --git a/pdex/src/processing/mode/experimental/TextArea.java b/pdex/src/processing/mode/experimental/TextArea.java index e87827154..58ebf5311 100644 --- a/pdex/src/processing/mode/experimental/TextArea.java +++ b/pdex/src/processing/mode/experimental/TextArea.java @@ -251,7 +251,7 @@ public class TextArea extends JEditTextArea { private String fetchPhrase(KeyEvent evt) { char keyChar = evt.getKeyChar(); if (keyChar == KeyEvent.VK_ENTER) { - System.out.println("Enter consumed."); + //System.out.println("Enter keypress."); return null; } // if (keyChar == KeyEvent.VK_BACK_SPACE || keyChar == KeyEvent.VK_DELETE) @@ -306,7 +306,7 @@ public class TextArea extends JEditTextArea { if (x1 >= 0) { // if (s.charAt(x1) != ';' && s.charAt(x1) != ',' && s.charAt(x1) != '(') if (Character.isLetterOrDigit(s.charAt(x1)) || s.charAt(x1) == '_' - || s.charAt(x1) == '.' || s.charAt(x1) == ')') { + || s.charAt(x1) == '.' || s.charAt(x1) == ')' || s.charAt(x1) == ']') { if (s.charAt(x1) == ')') { word = s.charAt(x1--) + word; @@ -319,7 +319,20 @@ public class TextArea extends JEditTextArea { closeB++; x1--; } - } else { + } + else if (s.charAt(x1) == ']') { + word = s.charAt(x1--) + word; + closeB++; + while (x1 >= 0 && closeB > 0) { + word = s.charAt(x1) + word; + if (s.charAt(x1) == '[') + closeB--; + if (s.charAt(x1) == ']') + closeB++; + x1--; + } + } + else { word = s.charAt(x1--) + word; } } else {