Skip to content

Commit

Permalink
Issue 3: [Usability problem] disable jflex generator on project build
Browse files Browse the repository at this point in the history
  • Loading branch information
aefimov committed Oct 7, 2009
1 parent 87a0fa9 commit 9b54b30
Show file tree
Hide file tree
Showing 11 changed files with 377 additions and 368 deletions.
7 changes: 4 additions & 3 deletions META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
<idea-plugin>

<name>JFlex Support</name>
<description>JFlex The Fast Scanner Generator for Java support.</description>
<version>1.4.0</version>
<version>1.4.1</version>
<vendor>Alexey Efimov, Max Ishchenko</vendor>
<change-notes><![CDATA[
1.4.1 - Added support for disable compiler<br>
1.4.0 - Updated for IDEA 9.<br>
1.3.0 - Updated for IDEA 8.<br>
Expand All @@ -18,7 +19,7 @@
<description>Enables JFlex support in IntelliJ IDEA.</description>
<resource-bundle>org.intellij.lang.jflex.util.JFlexBundle</resource-bundle>

<idea-version since-build="10666"/>
<idea-version since-build="10781"/>

<extensions defaultExtensionNs="com.intellij">
<applicationConfigurable implementation="org.intellij.lang.jflex.options.JFlexConfigurable"/>
Expand Down
384 changes: 191 additions & 193 deletions jflex.iml

Large diffs are not rendered by default.

7 changes: 5 additions & 2 deletions src/org/intellij/lang/jflex/JFlexDocumentationProvider.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.intellij.lang.jflex;

import java.util.List;

import com.intellij.lang.ASTNode;
import com.intellij.lang.documentation.DocumentationProvider;
import com.intellij.psi.PsiElement;
Expand All @@ -21,14 +23,15 @@ public String getQuickNavigateInfo(PsiElement element) {
}

@Nullable
public String getUrlFor(PsiElement element, PsiElement originalElement) {
public List<String> getUrlFor(PsiElement element, PsiElement originalElement) {
return null;
}

@Nullable
public String generateDoc(PsiElement element, PsiElement originalElement) {
if (element instanceof JFlexMacroDefinition) {
ASTNode regexp = element.getNode().findChildByType(JFlexElementTypes.REGEXP);
ASTNode astNode = element.getNode();
ASTNode regexp = astNode != null ? astNode.findChildByType(JFlexElementTypes.REGEXP) : null;
return regexp != null ? regexp.getText() : "No regexp found.";
}
return null;
Expand Down
26 changes: 15 additions & 11 deletions src/org/intellij/lang/jflex/compiler/JFlex.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
package org.intellij.lang.jflex.compiler;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.compiler.CompilerMessageCategory;
Expand All @@ -16,17 +27,6 @@
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* JFlexx wrapper to command line tool.
*
Expand Down Expand Up @@ -196,4 +196,8 @@ public void run() {
});
return false;
}

public static boolean isCompilationEnabled() {
return JFlexSettings.getInstance().ENABLED_COMPILATION;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
package org.intellij.lang.jflex.compiler;

import java.io.DataInput;
import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.intellij.compiler.CompilerConfiguration;
import com.intellij.compiler.impl.CompilerUtil;
import com.intellij.lang.ASTNode;
Expand All @@ -24,15 +32,6 @@
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;

import java.io.DataInputStream;
import java.io.File;
import java.io.IOException;
import java.io.DataInput;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
* The source generating compiler for *.flex files.
*
Expand Down Expand Up @@ -78,22 +77,26 @@ public void disposeComponent() {
private static final GenerationItem[] EMPTY_GENERATION_ITEM_ARRAY = new GenerationItem[]{};

public GenerationItem[] getGenerationItems(CompileContext context) {
Module[] affectedModules = context.getCompileScope().getAffectedModules();
if (affectedModules != null && affectedModules.length > 0) {
Application application = ApplicationManager.getApplication();
return application.runReadAction(new PrepareAction(context));
if (JFlex.isCompilationEnabled()) {
Module[] affectedModules = context.getCompileScope().getAffectedModules();
if (affectedModules.length > 0) {
Application application = ApplicationManager.getApplication();
return application.runReadAction(new PrepareAction(context));
}
}
return EMPTY_GENERATION_ITEM_ARRAY;
}

public GenerationItem[] generate(CompileContext context, GenerationItem[] items, VirtualFile outputRootDirectory) {
if (items != null && items.length > 0) {
Application application = ApplicationManager.getApplication();
GenerationItem[] generationItems = application.runReadAction(new GenerateAction(context, items, outputRootDirectory));
for (GenerationItem item : generationItems) {
CompilerUtil.refreshIOFile(((JFlexGenerationItem) item).getGeneratedFile());
if (JFlex.isCompilationEnabled()) {
if (items != null && items.length > 0) {
Application application = ApplicationManager.getApplication();
GenerationItem[] generationItems = application.runReadAction(new GenerateAction(context, items, outputRootDirectory));
for (GenerationItem item : generationItems) {
CompilerUtil.refreshIOFile(((JFlexGenerationItem) item).getGeneratedFile());
}
return generationItems;
}
return generationItems;
}
return EMPTY_GENERATION_ITEM_ARRAY;
}
Expand All @@ -104,12 +107,14 @@ public String getDescription() {
}

public boolean validateConfiguration(CompileScope scope) {
Module[] affectedModules = scope.getAffectedModules();
if (affectedModules != null && affectedModules.length > 0) {
Project project = affectedModules[0].getProject();
VirtualFile[] files = scope.getFiles(JFlexFileTypeManager.getInstance().getFileType(), false);
if (files != null && files.length > 0) {
return JFlex.validateConfiguration(project);
if (JFlex.isCompilationEnabled()) {
Module[] affectedModules = scope.getAffectedModules();
if (affectedModules.length > 0) {
Project project = affectedModules[0].getProject();
VirtualFile[] files = scope.getFiles(JFlexFileTypeManager.getInstance().getFileType(), false);
if (files.length > 0) {
return JFlex.validateConfiguration(project);
}
}
}
return true;
Expand Down Expand Up @@ -147,7 +152,10 @@ public JFlexGenerationItem(Module module, VirtualFile file, boolean testSource)
}
}
this.generatedClassName = generationName;
this.generatedFile = new File(VfsUtil.virtualToIoFile(file.getParent()), MessageFormat.format(JAVA_FILE_NAME_PATTERN, generatedClassName));
VirtualFile parent = file.getParent();
this.generatedFile = parent != null ?
new File(VfsUtil.virtualToIoFile(parent), MessageFormat.format(JAVA_FILE_NAME_PATTERN, generatedClassName)) :
null;
}

public VirtualFile getFile() {
Expand All @@ -170,10 +178,6 @@ public Module getModule() {
return module;
}

public String getGeneratedClassName() {
return generatedClassName;
}

@NotNull
public File getGeneratedFile() {
return generatedFile;
Expand All @@ -195,26 +199,23 @@ public GenerationItem[] compute() {
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
CompileScope compileScope = context.getCompileScope();
VirtualFile[] files = compileScope.getFiles(JFlexFileTypeManager.getInstance().getFileType(), false);
if (files != null) {
List<GenerationItem> items = new ArrayList<GenerationItem>(files.length);
CompilerConfiguration compilerConfiguration = CompilerConfiguration.getInstance(project);
for (VirtualFile file : files) {
if (context.isMake() && compilerConfiguration.isExcludedFromCompilation(file)) {
continue;
}
JFlexGenerationItem generationItem = new JFlexGenerationItem(context.getModuleByFile(file), file, fileIndex.isInTestSourceContent(file));
if (context.isMake()) {
File generatedFile = generationItem.getGeneratedFile();
if (!generatedFile.exists() || generatedFile.lastModified() <= file.getTimeStamp()) {
items.add(generationItem);
}
} else {
List<GenerationItem> items = new ArrayList<GenerationItem>(files.length);
CompilerConfiguration compilerConfiguration = CompilerConfiguration.getInstance(project);
for (VirtualFile file : files) {
if (context.isMake() && compilerConfiguration.isExcludedFromCompilation(file)) {
continue;
}
JFlexGenerationItem generationItem = new JFlexGenerationItem(context.getModuleByFile(file), file, fileIndex.isInTestSourceContent(file));
if (context.isMake()) {
File generatedFile = generationItem.getGeneratedFile();
if (!generatedFile.exists() || generatedFile.lastModified() <= file.getTimeStamp()) {
items.add(generationItem);
}
} else {
items.add(generationItem);
}
return items.toArray(new GenerationItem[items.size()]);
}
return EMPTY_GENERATION_ITEM_ARRAY;
return items.toArray(new GenerationItem[items.size()]);
}
}

Expand Down
3 changes: 1 addition & 2 deletions src/org/intellij/lang/jflex/injection/JFlexJavaInjector.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
public class JFlexJavaInjector implements LanguageInjector {

public static final String DEFCLASS = "Yylex";
public static final String DEFMETHOD = "yylex";
public static final String DEFTYPE = "int";

private JFlexSettings settings;
Expand All @@ -27,7 +26,7 @@ public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost _host, @NotNu

if (_host instanceof JFlexJavaCode) {

if (!settings.EMBEDJAVA) return;
if (!settings.ENABLED_EMBED_JAVA) return;

JFlexJavaCode host = (JFlexJavaCode) _host;

Expand Down
22 changes: 3 additions & 19 deletions src/org/intellij/lang/jflex/options/JFlexConfigurable.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package org.intellij.lang.jflex.options;

import javax.swing.*;

import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import org.intellij.lang.jflex.util.JFlexBundle;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;

/**
* Configurable for JFlex.
*
Expand Down Expand Up @@ -42,10 +41,7 @@ public JComponent createComponent() {
}

public boolean isModified() {
if (settingsForm != null) {
return settingsForm.isModified(JFlexSettings.getInstance());
}
return false;
return settingsForm != null && settingsForm.isModified(JFlexSettings.getInstance());
}

public void apply() throws ConfigurationException {
Expand All @@ -63,16 +59,4 @@ public void reset() {
public void disposeUIResources() {
settingsForm = null;
}

@NonNls
@NotNull
public String getComponentName() {
return "JFlexSettings.Configurable";
}

public void initComponent() {
}

public void disposeComponent() {
}
}
3 changes: 2 additions & 1 deletion src/org/intellij/lang/jflex/options/JFlexSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,11 @@ public static JFlexSettings getInstance() {
return ApplicationManager.getApplication().getComponent(JFlexSettings.class);
}

public boolean ENABLED_COMPILATION = true;
public String JFLEX_HOME = getDefaultJFlexHome();
public String SKELETON_PATH = getDefaultSkeletonPath(JFLEX_HOME);
public String COMMAND_LINE_OPTIONS = DEFAULT_OPTIONS_CHARAT_NOBAK;
public boolean EMBEDJAVA = true;
public boolean ENABLED_EMBED_JAVA = true;

public JFlexSettings getState() {
return this;
Expand Down
Loading

0 comments on commit 9b54b30

Please sign in to comment.