Skip to content

Commit 607a126

Browse files
committed
add compiler args for ui
1 parent 613033a commit 607a126

6 files changed

Lines changed: 115 additions & 37 deletions

File tree

java-compiler-impl/src/main/java/com/intellij/compiler/impl/javaCompiler/javac/JavacCompiler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ public static void addCommandLineOptions(CompileContext compileContext,
331331
boolean addSourcePath,
332332
boolean isAnnotationProcessingMode) throws IOException
333333
{
334+
JavaModuleExtension<?> extension = ModuleUtilCore.getExtension(chunk.getModule(), JavaModuleExtension.class);
334335
LanguageLevel languageLevel = JavaCompilerUtil.getLanguageLevelForCompilation(chunk);
335336
boolean isJava9Version = isAtLeast(version, languageLevel, JavaSdkVersion.JDK_1_9);
336337

@@ -342,7 +343,6 @@ public static void addCommandLineOptions(CompileContext compileContext,
342343
}
343344
else
344345
{
345-
JavaModuleExtension<?> extension = ModuleUtilCore.getExtension(module, JavaModuleExtension.class);
346346
if(extension != null)
347347
{
348348
String bytecodeVersion = extension.getBytecodeVersion();
@@ -354,6 +354,11 @@ public static void addCommandLineOptions(CompileContext compileContext,
354354
}
355355
}
356356

357+
if(extension != null)
358+
{
359+
commandLine.addAll(extension.getCompilerArguments());
360+
}
361+
357362
commandLine.add("-verbose");
358363

359364
final Set<VirtualFile> cp = JavaCompilerUtil.getCompilationClasspath(compileContext, chunk);

java-impl/src/main/java/consulo/java/module/extension/JavaModuleExtensionImpl.java

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@
1515
*/
1616
package consulo.java.module.extension;
1717

18-
import java.util.Set;
19-
20-
import javax.annotation.Nonnull;
21-
22-
import org.jdom.Element;
2318
import com.intellij.compiler.impl.ModuleChunk;
2419
import com.intellij.openapi.compiler.CompileContext;
2520
import com.intellij.openapi.projectRoots.JavaSdk;
@@ -33,20 +28,29 @@
3328
import consulo.module.extension.ModuleInheritableNamedPointer;
3429
import consulo.module.extension.impl.ModuleExtensionWithSdkImpl;
3530
import consulo.roots.ModuleRootLayer;
31+
import org.jdom.Element;
32+
33+
import javax.annotation.Nonnull;
34+
import javax.annotation.Nullable;
35+
import java.util.ArrayList;
36+
import java.util.List;
37+
import java.util.Set;
3638

3739
/**
3840
* @author VISTALL
3941
* @since 10:02/19.05.13
4042
*/
41-
public class JavaModuleExtensionImpl extends ModuleExtensionWithSdkImpl<JavaModuleExtensionImpl> implements
42-
JavaModuleExtension<JavaModuleExtensionImpl>
43+
public class JavaModuleExtensionImpl extends ModuleExtensionWithSdkImpl<JavaModuleExtensionImpl> implements JavaModuleExtension<JavaModuleExtensionImpl>
4344
{
4445
private static final String SPECIAL_DIR_LOCATION = "special-dir-location";
4546
private static final String BYTECODE_VERSION = "bytecode-version";
47+
private static final String COMPILER_ARGUMENTS = "compiler-arguments";
48+
private static final String COMPILER_ARGUMENT = "compiler-argument";
4649

4750
protected LanguageLevelModuleInheritableNamedPointerImpl myLanguageLevel;
4851
protected SpecialDirLocation mySpecialDirLocation = SpecialDirLocation.SOURCE_DIR;
4952
protected String myBytecodeVersion;
53+
protected List<String> myCompilerArguments = new ArrayList<>();
5054

5155
private LazyValueBySdk<LanguageLevel> myLanguageLevelValue;
5256

@@ -69,6 +73,8 @@ public void commit(@Nonnull JavaModuleExtensionImpl mutableModuleExtension)
6973
myLanguageLevel.set(mutableModuleExtension.getInheritableLanguageLevel());
7074
mySpecialDirLocation = mutableModuleExtension.getSpecialDirLocation();
7175
myBytecodeVersion = mutableModuleExtension.getBytecodeVersion();
76+
myCompilerArguments.clear();
77+
myCompilerArguments.addAll(mutableModuleExtension.getCompilerArguments());
7278
}
7379

7480
@Override
@@ -78,7 +84,7 @@ public LanguageLevel getLanguageLevel()
7884
return myLanguageLevel.isNull() ? myLanguageLevelValue.getValue() : myLanguageLevel.get();
7985
}
8086

81-
@javax.annotation.Nullable
87+
@Nullable
8288
@Override
8389
public LanguageLevel getLanguageLevelNoDefault()
8490
{
@@ -92,14 +98,14 @@ public SpecialDirLocation getSpecialDirLocation()
9298
return mySpecialDirLocation;
9399
}
94100

95-
@javax.annotation.Nullable
101+
@Nullable
96102
@Override
97103
public Sdk getSdkForCompilation()
98104
{
99105
return getSdk();
100106
}
101107

102-
@javax.annotation.Nullable
108+
@Nullable
103109
@Override
104110
public String getBytecodeVersion()
105111
{
@@ -133,20 +139,40 @@ public Class<? extends SdkType> getSdkTypeClass()
133139
return JavaSdk.class;
134140
}
135141

142+
@Nonnull
143+
@Override
144+
public List<String> getCompilerArguments()
145+
{
146+
return myCompilerArguments;
147+
}
148+
136149
@Override
137150
protected void getStateImpl(@Nonnull Element element)
138151
{
139152
super.getStateImpl(element);
140153

141154
myLanguageLevel.toXml(element);
155+
142156
if(mySpecialDirLocation != SpecialDirLocation.SOURCE_DIR)
143157
{
144158
element.setAttribute(SPECIAL_DIR_LOCATION, mySpecialDirLocation.name());
145159
}
160+
146161
if(!StringUtil.isEmpty(myBytecodeVersion))
147162
{
148163
element.setAttribute(BYTECODE_VERSION, myBytecodeVersion);
149164
}
165+
166+
if(!myCompilerArguments.isEmpty())
167+
{
168+
Element compilerArgs = new Element(COMPILER_ARGUMENTS);
169+
element.addContent(compilerArgs);
170+
171+
for(String compilerArgument : myCompilerArguments)
172+
{
173+
compilerArgs.addContent(new Element(COMPILER_ARGUMENT).setText(compilerArgument));
174+
}
175+
}
150176
}
151177

152178
@RequiredReadAction
@@ -158,5 +184,14 @@ protected void loadStateImpl(@Nonnull Element element)
158184
myLanguageLevel.fromXml(element);
159185
mySpecialDirLocation = SpecialDirLocation.valueOf(element.getAttributeValue(SPECIAL_DIR_LOCATION, SpecialDirLocation.SOURCE_DIR.name()));
160186
myBytecodeVersion = element.getAttributeValue(BYTECODE_VERSION, (String) null);
187+
188+
Element compilerArgs = element.getChild(COMPILER_ARGUMENTS);
189+
if(compilerArgs != null)
190+
{
191+
for(Element compilerArg : compilerArgs.getChildren(COMPILER_ARGUMENT))
192+
{
193+
myCompilerArguments.add(compilerArg.getTextTrim());
194+
}
195+
}
161196
}
162197
}

java-impl/src/main/java/consulo/java/module/extension/JavaMutableModuleExtensionImpl.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,24 @@
1515
*/
1616
package consulo.java.module.extension;
1717

18-
import javax.annotation.Nonnull;
19-
import javax.swing.JComponent;
20-
21-
import javax.annotation.Nullable;
22-
23-
import consulo.disposer.Disposable;
24-
import consulo.java.module.extension.ui.JavaModuleExtensionPanel;
2518
import com.intellij.openapi.projectRoots.Sdk;
2619
import com.intellij.openapi.util.Comparing;
2720
import com.intellij.pom.java.LanguageLevel;
21+
import consulo.disposer.Disposable;
22+
import consulo.java.module.extension.ui.JavaModuleExtensionPanel;
23+
import consulo.module.extension.MutableModuleInheritableNamedPointer;
2824
import consulo.module.extension.swing.SwingMutableModuleExtension;
25+
import consulo.roots.ModuleRootLayer;
2926
import consulo.ui.Component;
3027
import consulo.ui.Label;
3128
import consulo.ui.annotation.RequiredUIAccess;
32-
import consulo.module.extension.MutableModuleInheritableNamedPointer;
33-
import consulo.roots.ModuleRootLayer;
3429
import consulo.ui.layout.VerticalLayout;
3530

31+
import javax.annotation.Nonnull;
32+
import javax.annotation.Nullable;
33+
import javax.swing.*;
34+
import java.util.List;
35+
3636
/**
3737
* @author VISTALL
3838
* @since 12:39/19.05.13
@@ -79,6 +79,13 @@ public void setBytecodeVersion(@Nullable String version)
7979
myBytecodeVersion = version;
8080
}
8181

82+
@Override
83+
public void setCompilerArguments(@Nonnull List<String> arguments)
84+
{
85+
myCompilerArguments.clear();
86+
myCompilerArguments.addAll(arguments);
87+
}
88+
8289
@Override
8390
public void setSpecialDirLocation(@Nonnull SpecialDirLocation specialDirLocation)
8491
{
@@ -107,6 +114,11 @@ public boolean isModified(@Nonnull JavaModuleExtensionImpl javaModuleExtension)
107114
{
108115
return true;
109116
}
117+
118+
if(!myCompilerArguments.equals(javaModuleExtension.myCompilerArguments))
119+
{
120+
return true;
121+
}
110122
return false;
111123
}
112124

java-impl/src/main/java/consulo/java/module/extension/ui/JavaModuleExtensionPanel.java

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,26 @@
1616

1717
package consulo.java.module.extension.ui;
1818

19-
import java.awt.event.ItemEvent;
20-
21-
import javax.annotation.Nonnull;
22-
import javax.swing.ButtonGroup;
23-
import javax.swing.JList;
24-
import javax.swing.JPanel;
25-
import javax.swing.JRadioButton;
26-
import javax.swing.event.ChangeListener;
27-
2819
import com.intellij.compiler.impl.javaCompiler.TargetOptionsComponent;
2920
import com.intellij.core.JavaCoreBundle;
3021
import com.intellij.icons.AllIcons;
22+
import com.intellij.openapi.actionSystem.ActionToolbarPosition;
3123
import com.intellij.openapi.module.Module;
3224
import com.intellij.openapi.module.ModuleManager;
3325
import com.intellij.openapi.module.ModuleUtilCore;
3426
import com.intellij.openapi.projectRoots.JavaSdk;
3527
import com.intellij.openapi.projectRoots.JavaSdkVersion;
3628
import com.intellij.openapi.ui.ComboBox;
3729
import com.intellij.openapi.ui.LabeledComponent;
30+
import com.intellij.openapi.ui.Messages;
3831
import com.intellij.openapi.ui.VerticalFlowLayout;
3932
import com.intellij.openapi.util.text.StringUtil;
4033
import com.intellij.pom.java.LanguageLevel;
41-
import com.intellij.ui.ColoredListCellRenderer;
42-
import com.intellij.ui.SimpleTextAttributes;
43-
import com.intellij.ui.TitledSeparator;
34+
import com.intellij.ui.*;
35+
import com.intellij.ui.components.JBLabel;
36+
import com.intellij.ui.components.JBList;
4437
import com.intellij.util.ObjectUtil;
45-
import consulo.ui.annotation.RequiredUIAccess;
38+
import com.intellij.util.ui.JBUI;
4639
import consulo.annotation.access.RequiredReadAction;
4740
import consulo.extension.ui.ModuleExtensionSdkBoxBuilder;
4841
import consulo.java.module.extension.JavaModuleExtension;
@@ -51,6 +44,12 @@
5144
import consulo.module.extension.ModuleExtension;
5245
import consulo.module.extension.ModuleExtensionWithSdk;
5346
import consulo.module.extension.MutableModuleInheritableNamedPointer;
47+
import consulo.ui.annotation.RequiredUIAccess;
48+
49+
import javax.annotation.Nonnull;
50+
import javax.swing.*;
51+
import javax.swing.event.ChangeListener;
52+
import java.awt.event.ItemEvent;
5453

5554
/**
5655
* @author VISTALL
@@ -173,7 +172,26 @@ else if(myModuleDirRadioButton.isSelected())
173172
myExtension.setBytecodeVersion(StringUtil.nullize((String) selectedItem, true));
174173
});
175174

176-
add(LabeledComponent.left(targetOptionsCombo, "Bytecode version"));
175+
add(LabeledComponent.create(targetOptionsCombo, "Bytecode version"));
176+
177+
CollectionListModel<String> argsModel = new CollectionListModel<>(extension.getCompilerArguments(), true);
178+
JList<String> compilerArgs = new JBList<>(argsModel);
179+
180+
add(new JBLabel("Additional compiler arguments:"));
181+
JPanel panel = ToolbarDecorator.createDecorator(compilerArgs)
182+
.setToolbarPosition(ActionToolbarPosition.RIGHT)
183+
.setAddAction(button -> {
184+
String argument = Messages.showInputDialog(extension.getProject(), "Compiler argument", "Enter Compiler Argument", null);
185+
if(argument == null)
186+
{
187+
return;
188+
}
189+
190+
argsModel.add(argument);
191+
})
192+
.setToolbarBorder(JBUI.Borders.empty()).createPanel();
193+
194+
add(panel);
177195
}
178196

179197
@RequiredReadAction

java-psi-api/src/main/java/consulo/java/module/extension/JavaModuleExtension.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import javax.annotation.Nonnull;
2626
import javax.annotation.Nullable;
27+
import java.util.List;
2728
import java.util.Set;
2829

2930
/**
@@ -61,4 +62,7 @@ default LanguageLevel getLanguageLevelNoDefault()
6162

6263
@Nullable
6364
String getBytecodeVersion();
65+
66+
@Nonnull
67+
List<String> getCompilerArguments();
6468
}

java-psi-api/src/main/java/consulo/java/module/extension/JavaMutableModuleExtension.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
package consulo.java.module.extension;
1818

19-
import javax.annotation.Nonnull;
20-
2119
import com.intellij.pom.java.LanguageLevel;
2220
import consulo.module.extension.MutableModuleExtensionWithSdk;
2321
import consulo.module.extension.MutableModuleInheritableNamedPointer;
2422

23+
import javax.annotation.Nonnull;
24+
import javax.annotation.Nullable;
25+
import java.util.List;
26+
2527
/**
2628
* @author VISTALL
2729
* @since 05.05.14
@@ -33,5 +35,7 @@ public interface JavaMutableModuleExtension<T extends JavaModuleExtension<T>> ex
3335

3436
void setSpecialDirLocation(@Nonnull SpecialDirLocation location);
3537

36-
void setBytecodeVersion(@javax.annotation.Nullable String version);
38+
void setBytecodeVersion(@Nullable String version);
39+
40+
void setCompilerArguments(@Nonnull List<String> arguments);
3741
}

0 commit comments

Comments
 (0)