Skip to content

Commit 86b2631

Browse files
authored
Merge pull request #49 from nette-intellij/mn-compatibility-issues-1-0-0
Mn compatibility issues 1 0 0
2 parents 2ee96ab + 3f4d050 commit 86b2631

File tree

10 files changed

+72
-38
lines changed

10 files changed

+72
-38
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
/gen
66
/out
77

8+
.DS_Store
9+
810
/src/com/jantvrdik/intellij/latte/lexer/LatteMacroContentLexer.java
911
/src/com/jantvrdik/intellij/latte/lexer/LatteMacroLexer.java
1012
/src/com/jantvrdik/intellij/latte/lexer/LatteTopLexer.java

latte-plugin.jar

135 Bytes
Binary file not shown.

resources/META-INF/plugin.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<idea-plugin>
22
<id>com.jantvrdik.intellij.latte</id>
33
<name>Latte</name>
4-
<version>1.0.0</version>
4+
<version>1.0.1</version>
55
<vendor>Jan Tvrdík</vendor>
66

77
<description><![CDATA[
@@ -18,6 +18,11 @@
1818
]]></description>
1919

2020
<change-notes><![CDATA[
21+
<p>1.0.1</p>
22+
<ul>
23+
<li>Fixed compatibility issues</li>
24+
<li>Fixed structure view (added n:tags and images)</li>
25+
</ul>
2126
<p>1.0.0</p>
2227
<ul>
2328
<li>added support for PHP content</li>

src/com/jantvrdik/intellij/latte/completion/handlers/MacroCustomFunctionInsertHandler.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.jantvrdik.intellij.latte.psi.LatteTypes;
1111
import com.jantvrdik.intellij.latte.utils.LatteUtil;
1212
import com.jetbrains.php.completion.insert.PhpInsertHandlerUtil;
13-
import com.jetbrains.php.completion.insert.PhpReturnKeywordInsertHandler;
1413
import com.jetbrains.php.lang.psi.elements.impl.PhpUseImpl;
1514
import org.jetbrains.annotations.NotNull;
1615

@@ -39,10 +38,8 @@ public void handleInsert(@NotNull InsertionContext context, @NotNull LookupEleme
3938
if (notInUse) {
4039
if (!LatteUtil.isStringAtCaret(editor, "(")) {
4140
this.insertParenthesesCodeStyleAware(editor);
42-
possiblyInsertTrailingSemicolon(context);
4341
} else if (LatteUtil.isStringAtCaret(editor, "()")) {
4442
editor.getCaretModel().moveCaretRelatively(2, 0, false, false, true);
45-
possiblyInsertTrailingSemicolon(context);
4643
} else {
4744
editor.getCaretModel().moveCaretRelatively(1, 0, false, false, true);
4845
showParameterInfo(editor);
@@ -51,10 +48,6 @@ public void handleInsert(@NotNull InsertionContext context, @NotNull LookupEleme
5148
}
5249
}
5350

54-
private static void possiblyInsertTrailingSemicolon(@NotNull InsertionContext context) {
55-
PhpReturnKeywordInsertHandler.insertSemicolonAtCaret(context, true);
56-
}
57-
5851
private void insertParenthesesCodeStyleAware(@NotNull Editor editor) {
5952
PhpInsertHandlerUtil.insertStringAtCaret(editor, "()");
6053
}

src/com/jantvrdik/intellij/latte/completion/providers/LatteVariableCompletionProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ private void attachTemplateTypeCompletions(@NotNull CompletionResultSet result,
6262
if (!field.isConstant() && field.getModifier().isPublic()) {
6363
PhpLookupElement lookupItem = getPhpLookupElement(field, "$" + field.getName());
6464
lookupItem.handler = PhpVariableInsertHandler.getInstance();
65-
lookupItem.icon = PhpIcons.PROPERTY_ICON;
6665
lookupItem.bold = true;
6766
result.addElement(lookupItem);
6867
}

src/com/jantvrdik/intellij/latte/editor/LatteStructureViewFactory.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,23 @@
11
package com.jantvrdik.intellij.latte.editor;
22

3-
import com.intellij.ide.structureView.StructureView;
43
import com.intellij.ide.structureView.StructureViewBuilder;
54
import com.intellij.ide.structureView.StructureViewModel;
6-
import com.intellij.ide.structureView.StructureViewModelBase;
75
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
8-
import com.intellij.ide.structureView.impl.StructureViewComposite;
9-
import com.intellij.ide.structureView.impl.TemplateLanguageStructureViewBuilder;
106
import com.intellij.lang.PsiStructureViewFactory;
117
import com.intellij.openapi.editor.Editor;
12-
import com.intellij.openapi.fileEditor.FileEditor;
138
import com.intellij.psi.PsiFile;
149
import org.jetbrains.annotations.NotNull;
1510
import org.jetbrains.annotations.Nullable;
1611

1712
public class LatteStructureViewFactory implements PsiStructureViewFactory{
18-
1913
@Nullable
2014
@Override
2115
public StructureViewBuilder getStructureViewBuilder(final PsiFile psiFile) {
22-
return new TemplateLanguageStructureViewBuilder(psiFile) {
16+
return new TreeBasedStructureViewBuilder() {
17+
@NotNull
2318
@Override
24-
protected StructureViewComposite.StructureViewDescriptor createMainView(FileEditor fileEditor, PsiFile mainFile) {
25-
StructureView mainView = (new TreeBasedStructureViewBuilder() {
26-
@NotNull
27-
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
28-
return new StructureViewModelBase(psiFile, editor, new LatteStructureViewTreeElement(psiFile));
29-
}
30-
}).createStructureView(fileEditor, mainFile.getProject());
31-
return new StructureViewComposite.StructureViewDescriptor("Latte", mainView, mainFile.getFileType().getIcon());
19+
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
20+
return new LatteStructureViewModel(psiFile);
3221
}
3322
};
3423
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.jantvrdik.intellij.latte.editor;
2+
3+
import com.intellij.ide.structureView.*;
4+
import com.intellij.ide.util.treeView.smartTree.Sorter;
5+
import com.intellij.psi.PsiFile;
6+
import com.jantvrdik.intellij.latte.psi.LatteFile;
7+
import org.jetbrains.annotations.NotNull;
8+
9+
public class LatteStructureViewModel extends StructureViewModelBase implements StructureViewModel.ElementInfoProvider {
10+
public LatteStructureViewModel(PsiFile psiFile) {
11+
super(psiFile, new LatteStructureViewTreeElement(psiFile));
12+
}
13+
14+
@NotNull
15+
public Sorter[] getSorters() {
16+
return new Sorter[]{Sorter.ALPHA_SORTER};
17+
}
18+
19+
@Override
20+
public boolean isAlwaysShowsPlus(StructureViewTreeElement element) {
21+
return false;
22+
}
23+
24+
@Override
25+
public boolean isAlwaysLeaf(StructureViewTreeElement element) {
26+
return element instanceof LatteFile;
27+
}
28+
}

src/com/jantvrdik/intellij/latte/editor/LatteStructureViewTreeElement.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
import com.intellij.ide.structureView.StructureViewTreeElement;
44
import com.intellij.ide.structureView.impl.common.PsiTreeElementBase;
55
import com.intellij.psi.PsiElement;
6+
import com.jantvrdik.intellij.latte.icons.LatteIcons;
67
import com.jantvrdik.intellij.latte.psi.LatteAutoClosedBlock;
78
import com.jantvrdik.intellij.latte.psi.LatteFile;
89
import com.jantvrdik.intellij.latte.psi.LatteMacroClassic;
10+
import com.jantvrdik.intellij.latte.psi.LatteNetteAttr;
911
import org.jetbrains.annotations.NotNull;
1012
import org.jetbrains.annotations.Nullable;
1113

14+
import javax.swing.*;
1215
import java.util.ArrayList;
1316
import java.util.Collection;
1417
import java.util.regex.Matcher;
@@ -28,13 +31,26 @@ public Collection<StructureViewTreeElement> getChildrenBase() {
2831
return elements;
2932
}
3033
for (PsiElement el : getElement().getChildren()) {
31-
if (el instanceof LatteMacroClassic || el instanceof LatteAutoClosedBlock) {
34+
if (el instanceof LatteMacroClassic || el instanceof LatteAutoClosedBlock || el instanceof LatteNetteAttr) {
3235
elements.add(new LatteStructureViewTreeElement(el));
3336
}
3437
}
3538
return elements;
3639
}
3740

41+
@Override
42+
public Icon getIcon(boolean open) {
43+
PsiElement element = getElement();
44+
if (element instanceof LatteMacroClassic || element instanceof LatteAutoClosedBlock) {
45+
return LatteIcons.MACRO;
46+
} else if (element instanceof LatteNetteAttr) {
47+
return LatteIcons.N_TAG;
48+
} else if (element instanceof LatteFile) {
49+
return LatteIcons.FILE;
50+
}
51+
return super.getIcon(open);
52+
}
53+
3854
@Nullable
3955
@Override
4056
public String getPresentableText() {
@@ -52,6 +68,8 @@ public String getPresentableText() {
5268

5369
}
5470
return presentableText;
71+
} else if (element instanceof LatteNetteAttr) {
72+
return ((LatteNetteAttr) element).getAttrName().getText();
5573
} else if (element instanceof LatteFile) {
5674
return ((LatteFile) element).getName();
5775
}

src/com/jantvrdik/intellij/latte/psi/impl/LattePsiImplUtil.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public static LattePhpType detectVariableTypeFromTemplateType(@NotNull PsiElemen
9999
for (PhpClass phpClass : classes) {
100100
for (Field field : phpClass.getFields()) {
101101
if (!field.isConstant() && field.getModifier().isPublic() && variableName.equals(field.getName())) {
102-
return new LattePhpType(field.getName(), field.getType().toString(), field.getType().isNullable());
102+
return new LattePhpType(field.getName(), field.getType().toString(), LattePhpUtil.isNullable(field.getType()));
103103
}
104104
}
105105
}
@@ -224,7 +224,7 @@ public static LattePhpType getReturnType(@NotNull LattePhpMethod element) {
224224

225225
for (Method phpMethod : first.getMethods()) {
226226
if (phpMethod.getName().equals(name)) {
227-
return new LattePhpType(phpMethod.getType().toString(), phpMethod.getType().isNullable());
227+
return new LattePhpType(phpMethod.getType().toString(), LattePhpUtil.isNullable(phpMethod.getType()));
228228
}
229229
}
230230
return null;
@@ -250,7 +250,7 @@ private static LattePhpType getPropertyType(@NotNull Project project, @NotNull L
250250

251251
for (Field field : first.getFields()) {
252252
if (field.getName().equals(LattePhpUtil.normalizePhpVariable(elementName))) {
253-
return new LattePhpType(field.getType().toString(), field.getType().isNullable());
253+
return new LattePhpType(field.getType().toString(), LattePhpUtil.isNullable(field.getType()));
254254
}
255255
}
256256
return null;

src/com/jantvrdik/intellij/latte/utils/LattePhpUtil.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.jantvrdik.intellij.latte.psi.elements.BaseLattePhpElement;
99
import com.jetbrains.php.PhpIndex;
1010
import com.jetbrains.php.lang.psi.elements.*;
11+
import com.jetbrains.php.lang.psi.resolve.types.PhpType;
1112
import gnu.trove.THashSet;
1213
import org.jetbrains.annotations.NotNull;
1314
import org.jetbrains.annotations.Nullable;
@@ -43,8 +44,7 @@ public static String normalizePhpVariable(String name) {
4344
return name.startsWith("$") ? name.substring(1) : name;
4445
}
4546

46-
public static boolean isReferenceTo(@NotNull PhpClass originalClass, @NotNull ResolveResult[] results, @NotNull PsiElement element, @NotNull String name)
47-
{
47+
public static boolean isReferenceTo(@NotNull PhpClass originalClass, @NotNull ResolveResult[] results, @NotNull PsiElement element, @NotNull String name) {
4848
for (ResolveResult result : results) {
4949
if (!(result.getElement() instanceof BaseLattePhpElement)) {
5050
continue;
@@ -66,13 +66,15 @@ public static boolean isReferenceTo(@NotNull PhpClass originalClass, @NotNull Re
6666
return false;
6767
}
6868

69-
public static boolean isReferenceFor(@NotNull PhpClass originalClass, @NotNull PhpClass targetClass)
70-
{
69+
public static boolean isNullable(@NotNull PhpType type) {
70+
return false;
71+
}
72+
73+
public static boolean isReferenceFor(@NotNull PhpClass originalClass, @NotNull PhpClass targetClass) {
7174
return isReferenceFor(originalClass.getFQN(), targetClass);
7275
}
7376

74-
public static boolean isReferenceFor(@NotNull String originalClass, @NotNull PhpClass targetClass)
75-
{
77+
public static boolean isReferenceFor(@NotNull String originalClass, @NotNull PhpClass targetClass) {
7678
originalClass = normalizeClassName(originalClass);
7779
if (originalClass.equals(targetClass.getFQN())) {
7880
return true;
@@ -87,8 +89,7 @@ public static boolean isReferenceFor(@NotNull String originalClass, @NotNull Php
8789
return false;
8890
}
8991

90-
public static List<Field> getFieldsForPhpElement(@NotNull BaseLattePhpElement psiElement)
91-
{
92+
public static List<Field> getFieldsForPhpElement(@NotNull BaseLattePhpElement psiElement) {
9293
List<Field> out = new ArrayList<Field>();
9394
LattePhpType phpType = psiElement.getPhpType();
9495
String name = psiElement.getPhpElementName();
@@ -120,8 +121,7 @@ public static List<Field> getFieldsForPhpElement(@NotNull BaseLattePhpElement ps
120121
return fields;
121122
}
122123

123-
public static List<Method> getMethodsForPhpElement(@NotNull LattePhpMethod psiElement)
124-
{
124+
public static List<Method> getMethodsForPhpElement(@NotNull LattePhpMethod psiElement) {
125125
List<Method> out = new ArrayList<Method>();
126126
Collection<PhpClass> phpClasses = psiElement.getPhpType().getPhpClasses(psiElement.getProject());
127127
if (phpClasses != null && phpClasses.size() > 0) {

0 commit comments

Comments
 (0)