Skip to content

Commit 85f86c7

Browse files
committed
Add vartype as an expression
1 parent 10b0f3c commit 85f86c7

File tree

7 files changed

+59
-27
lines changed

7 files changed

+59
-27
lines changed

app/src/main/java/com/duy/ide/javaide/editor/autocomplete/internal/CompleteExpression.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,10 @@ private Expression getExpressionFromStatement(JCStatement statement) {
357357
if (isCursorInsideTree(initializer)) {
358358
return new Expression(jcVariableDecl, initializer);
359359
}
360+
JCExpression vartype = jcVariableDecl.vartype;
361+
if (isCursorInsideTree(vartype)) {
362+
return new Expression(jcVariableDecl, vartype);
363+
}
360364
} else if (statement instanceof JCWhileLoop) {
361365
JCWhileLoop jcWhileLoop = (JCWhileLoop) statement;
362366
JCExpression condition = jcWhileLoop.getCondition();

app/src/main/java/com/duy/ide/javaide/editor/autocomplete/internal/completed/CompleteNewKeyword.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.duy.ide.editor.internal.suggestion.Editor;
2323
import com.duy.ide.javaide.editor.autocomplete.parser.JavaDexClassLoader;
2424
import com.duy.ide.javaide.editor.autocomplete.internal.JavaCompleteMatcherImpl;
25-
import com.duy.ide.javaide.editor.autocomplete.model.ClassConstructorDescription;
25+
import com.duy.ide.javaide.editor.autocomplete.model.ConstructorDescription;
2626
import com.duy.ide.javaide.editor.autocomplete.model.ClassDescription;
2727
import com.duy.ide.javaide.editor.autocomplete.model.PrimitiveArrayConstructorDescription;
2828

@@ -73,7 +73,7 @@ private boolean getSuggestionInternal(@NonNull Editor editor, @NonNull String in
7373
//try to find constructor
7474
ArrayList<ClassDescription> classes = mClassLoader.findAllWithPrefix(incomplete);
7575
for (ClassDescription clazz : classes) {
76-
ArrayList<ClassConstructorDescription> constructors = clazz.getConstructors();
76+
ArrayList<ConstructorDescription> constructors = clazz.getConstructors();
7777
setInfo(constructors, editor, incomplete);
7878
suggestItems.addAll(constructors);
7979
handled = true;

app/src/main/java/com/duy/ide/javaide/editor/autocomplete/model/ClassDescription.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import android.text.Editable;
2222

23+
import com.android.annotations.NonNull;
2324
import com.android.annotations.Nullable;
2425
import com.duy.common.DLog;
2526
import com.duy.ide.code.api.SuggestItem;
@@ -43,15 +44,16 @@
4344

4445
public class ClassDescription extends JavaSuggestItemImpl implements IClass {
4546
private static final String TAG = "ClassDescription";
47+
@NonNull
4648
private final String mClassName;
47-
private final ArrayList<ClassConstructorDescription> mConstructors = new ArrayList<>();
49+
private final ArrayList<ConstructorDescription> mConstructors = new ArrayList<>();
4850
private final ArrayList<FieldDescription> mFields = new ArrayList<>();
4951
private final ArrayList<MethodDescription> mMethods = new ArrayList<>();
5052
private final ArrayList<ClassDescription> mImplements = new ArrayList<>();
5153
@Nullable
5254
private final ClassDescription mSuperClass;
5355
private final int mModifiers;
54-
private boolean mPrimitive;
56+
private final boolean mPrimitive;
5557

5658
public ClassDescription(Class c) {
5759
mClassName = c.getName();
@@ -105,34 +107,34 @@ public void onSelectThis(IEditAreaView editorView) {
105107
}
106108
}
107109

108-
110+
@Override
109111
public String getSimpleName() {
110112
return JavaUtil.getSimpleName(mClassName);
111113
}
112114

113-
115+
@Override
114116
public String getFullClassName() {
115117
return mClassName;
116118
}
117119

118120
@Nullable
119-
public final ClassDescription getSuperclass() {
121+
public ClassDescription getSuperclass() {
120122
return mSuperClass;
121123
}
122124

123-
public final String getPackageName() {
125+
public String getPackageName() {
124126
return JavaUtil.getPackageName(mClassName);
125127
}
126128

127-
public ArrayList<ClassConstructorDescription> getConstructors() {
129+
public ArrayList<ConstructorDescription> getConstructors() {
128130
return mConstructors;
129131
}
130132

131133
public ArrayList<FieldDescription> getFields() {
132134
return mFields;
133135
}
134136

135-
public void addConstructor(ClassConstructorDescription constructorDescription) {
137+
public void addConstructor(ConstructorDescription constructorDescription) {
136138
this.mConstructors.add(constructorDescription);
137139
}
138140

@@ -156,7 +158,7 @@ public String toString() {
156158
@SuppressWarnings("ConstantConditions")
157159
public ArrayList<SuggestItem> getMember(String prefix) {
158160
ArrayList<SuggestItem> result = new ArrayList<>();
159-
for (ClassConstructorDescription constructor : mConstructors) {
161+
for (ConstructorDescription constructor : mConstructors) {
160162
if (!prefix.isEmpty()) {
161163
if (constructor.getName().startsWith(prefix)) {
162164
result.add(constructor);
@@ -238,7 +240,7 @@ public IField getField(String name) {
238240
public void initMembers(Class c) {
239241
for (Constructor constructor : c.getConstructors()) {
240242
if (Modifier.isPublic(constructor.getModifiers())) {
241-
addConstructor(new ClassConstructorDescription(constructor));
243+
addConstructor(new ConstructorDescription(constructor));
242244
}
243245
}
244246

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@
3131
* Created by Duy on 20-Jul-17.
3232
*/
3333

34-
public class ClassConstructorDescription extends JavaSuggestItemImpl {
34+
public class ConstructorDescription extends JavaSuggestItemImpl {
3535
private Constructor constructor;
3636
private String simpleName;
3737
private String packageName;
3838

39-
public ClassConstructorDescription(Constructor constructor) {
39+
public ConstructorDescription(Constructor constructor) {
4040
this.constructor = constructor;
4141
this.simpleName = JavaUtil.getSimpleName(constructor.getName());
4242
this.packageName = JavaUtil.getPackageName(constructor.getName());

app/src/main/java/com/duy/ide/javaide/editor/autocomplete/model/FieldDescription.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import android.support.annotation.NonNull;
2121

22+
import com.android.annotations.Nullable;
2223
import com.duy.ide.editor.view.IEditAreaView;
2324
import com.duy.ide.javaide.editor.autocomplete.parser.IClass;
2425
import com.duy.ide.javaide.editor.autocomplete.parser.IField;
@@ -32,18 +33,21 @@
3233
*/
3334

3435
public class FieldDescription extends JavaSuggestItemImpl implements Member, IField {
35-
private String name;
36+
@NonNull
37+
private String mName;
38+
@NonNull
3639
private IClass mType;
3740
private int mModifiers;
41+
@Nullable
3842
private String value;
3943

40-
public FieldDescription(String name, IClass type, int modifiers) {
41-
this.name = name;
44+
public FieldDescription(@NonNull String name, IClass type, int modifiers) {
45+
this.mName = name;
4246
this.mModifiers = modifiers;
4347
}
4448

4549
public FieldDescription(Field field) {
46-
this.name = field.getName();
50+
this.mName = field.getName();
4751
this.mType = JavaClassReader.getInstance().getClassWrapper(field.getType());
4852
this.mModifiers = field.getModifiers();
4953

@@ -63,7 +67,7 @@ public FieldDescription(Field field) {
6367

6468
@Override
6569
public void onSelectThis(@NonNull IEditAreaView editorView) {
66-
insertImpl(editorView, name);
70+
insertImpl(editorView, mName);
6771
}
6872

6973

@@ -75,9 +79,9 @@ public char getTypeHeader() {
7579
@Override
7680
public String getName() {
7781
if (value == null) {
78-
return name;
82+
return mName;
7983
} else {
80-
return name + "(" + value + ")";
84+
return mName + "(" + value + ")";
8185
}
8286
}
8387

@@ -88,6 +92,9 @@ public String getDescription() {
8892

8993
@Override
9094
public String getReturnType() {
95+
if (mType == null) {
96+
return "";
97+
}
9198
return mType.getSimpleName();
9299
}
93100

@@ -98,7 +105,7 @@ public int getSuggestionPriority() {
98105

99106
@Override
100107
public String toString() {
101-
return name;
108+
return mName;
102109
}
103110

104111

@@ -109,7 +116,7 @@ public int getModifiers() {
109116

110117
@Override
111118
public String getFieldName() {
112-
return name;
119+
return mName;
113120
}
114121

115122
@Override

app/src/main/java/com/duy/ide/javaide/editor/autocomplete/model/MethodDescription.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.android.annotations.Nullable;
2424
import com.duy.ide.code.api.SuggestItem;
25+
import com.duy.ide.editor.internal.suggestion.Editor;
2526
import com.duy.ide.editor.view.IEditAreaView;
2627
import com.duy.ide.javaide.editor.autocomplete.parser.IClass;
2728
import com.duy.ide.javaide.editor.autocomplete.parser.IMethod;
@@ -68,20 +69,38 @@ public void onSelectThis(@NonNull IEditAreaView editorView) {
6869

6970
Editable editable = editorView.getEditableText();
7071
editable.delete(start, editorView.getSelectionStart());
71-
String text = JavaUtil.getSimpleName(mName) + "();";
72+
String simpleName = JavaUtil.getSimpleName(mName);
73+
String text = simpleName + "()" + (shouldAddSemicolon(getEditor()) ? ";" : "");
7274
if (getParameterTypes().size() > 0) {
7375
//Should end method?
7476
editable.insert(start, text);
75-
editorView.setSelection(start + text.length() - 2 /*(*/);
77+
editorView.setSelection(start + simpleName.length() + 1/*(*/);
7678
} else {
7779
editable.insert(start, text);
7880
editorView.setSelection(start + text.length());
7981
}
8082
} catch (Exception e) {
8183
e.printStackTrace();
8284
}
85+
}
8386

84-
87+
private boolean shouldAddSemicolon(Editor editor) {
88+
int cursor = editor.getCursor();
89+
String text = editor.getText();
90+
while (cursor < editor.length()) {
91+
char c = text.charAt(cursor);
92+
if (c == ' ' || c == '\n') {
93+
cursor++;
94+
continue;
95+
}
96+
if (c == ';') {
97+
return false;
98+
}
99+
}
100+
if (getMethodReturnType().getFullClassName().equals(void.class.getName())) {
101+
return true;
102+
}
103+
return false;
85104
}
86105

87106
public ArrayList<String> getParameterTypes() {

app/src/main/java/com/duy/ide/javaide/editor/autocomplete/parser/JavaClassReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ public ClassDescription readClassByName(String fullClassName,
220220
return null;
221221
}
222222

223-
@Nullable
223+
@NonNull
224224
public ClassDescription getClassWrapper(@NonNull Class clazz) {
225225
ClassDescription cache = mLoaded.get(clazz.getName());
226226
if (cache != null) {

0 commit comments

Comments
 (0)