Skip to content
This repository was archived by the owner on Nov 10, 2023. It is now read-only.

Commit 4a65bb0

Browse files
Junpeng Qiufacebook-github-bot
authored andcommitted
Add config to enable Python base module transform
fbshipit-source-id: 4b891f7cb6d93289f351c334338efd39c3b7f1ee
1 parent b982228 commit 4a65bb0

6 files changed

Lines changed: 113 additions & 82 deletions

File tree

src/com/facebook/buck/command/config/ConfigIgnoredByDaemon.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ private static ImmutableMap<String, ImmutableSet<String>> getIgnoreFieldsForDaem
8080
"max_library_name_length_before_truncate",
8181
"max_module_name_length_before_truncate",
8282
"multi_cell_module_support",
83+
"python_base_module_transform",
8384
"use_module_library"));
8485
ignoreFieldsForDaemonRestartBuilder.put(
8586
"log",

src/com/facebook/buck/features/project/intellij/IjProjectBuckConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ static IjProjectConfig.Builder createBuilder(BuckConfig buckConfig) {
189189
buckConfig
190190
.getInteger(INTELLIJ_BUCK_CONFIG_SECTION, "module_library_threshold")
191191
.orElse(-1))
192+
.setPythonBaseModuleTransformEnabled(
193+
buckConfig
194+
.getBoolean(INTELLIJ_BUCK_CONFIG_SECTION, "python_base_module_transform")
195+
.orElse(false))
192196
.setKotlinJavaRuntimeLibraryTemplatePath(
193197
buckConfig.getPath(
194198
INTELLIJ_BUCK_CONFIG_SECTION, "kotlin_java_runtime_library_template_path"))

src/com/facebook/buck/features/project/intellij/lang/python/PythonLibraryModuleRule.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ public IjModuleType detectModuleType(TargetNode<PythonLibraryDescriptionArg> tar
6767
public Path adjustModulePath(
6868
TargetNode<PythonLibraryDescriptionArg> targetNode, Path modulePath) {
6969
String baseModule = targetNode.getConstructorArg().getBaseModule().orElse(null);
70-
if (baseModule == null || baseModule.isEmpty()) {
70+
if (!projectConfig.isPythonBaseModuleTransformEnabled()
71+
|| baseModule == null
72+
|| baseModule.isEmpty()) {
7173
return modulePath;
7274
}
7375
String[] components = baseModule.split("\\.");

src/com/facebook/buck/features/project/intellij/model/IjProjectConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ public boolean isAutogenerateAndroidFacetSourcesEnabled() {
133133

134134
public abstract int getModuleLibraryThreshold();
135135

136+
public abstract boolean isPythonBaseModuleTransformEnabled();
137+
136138
public abstract Optional<String> getBuckOutPathForGeneratedProjectFiles();
137139

138140
public static Builder builder() {

test/com/facebook/buck/features/project/intellij/IjTestProjectConfig.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@
2424
public class IjTestProjectConfig {
2525

2626
public static IjProjectConfig create() {
27-
return createBuilder(FakeBuckConfig.empty()).build();
27+
return createBuilder().build();
28+
}
29+
30+
public static IjProjectConfig.Builder createBuilder() {
31+
return createBuilder(FakeBuckConfig.empty());
2832
}
2933

3034
static IjProjectConfig.Builder createBuilder(BuckConfig buckConfig) {

test/com/facebook/buck/features/project/intellij/lang/python/PythonLibraryModuleRuleTest.java

Lines changed: 98 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -40,87 +40,95 @@
4040
public class PythonLibraryModuleRuleTest {
4141
private static final String TARGET = "//foo/bar/baz:target";
4242
private static final Path MODULE_PATH = Paths.get("foo", "bar", "baz");
43-
private final PythonLibraryModuleRule rule =
44-
new PythonLibraryModuleRule(
45-
new FakeProjectFilesystem(),
46-
new IjModuleFactoryResolver() {
47-
@Override
48-
public Optional<Path> getDummyRDotJavaPath(TargetNode<?> targetNode) {
49-
return Optional.empty();
50-
}
51-
52-
@Override
53-
public Path getAndroidManifestPath(TargetNode<AndroidBinaryDescriptionArg> targetNode) {
54-
return null;
55-
}
56-
57-
@Override
58-
public Optional<Path> getLibraryAndroidManifestPath(
59-
TargetNode<AndroidLibraryDescription.CoreArg> targetNode) {
60-
return Optional.empty();
61-
}
62-
63-
@Override
64-
public Optional<Path> getResourceAndroidManifestPath(
65-
TargetNode<AndroidResourceDescriptionArg> targetNode) {
66-
return Optional.empty();
67-
}
68-
69-
@Override
70-
public Optional<Path> getProguardConfigPath(
71-
TargetNode<AndroidBinaryDescriptionArg> targetNode) {
72-
return Optional.empty();
73-
}
74-
75-
@Override
76-
public Optional<Path> getAndroidResourcePath(
77-
TargetNode<AndroidResourceDescriptionArg> targetNode) {
78-
return Optional.empty();
79-
}
80-
81-
@Override
82-
public Optional<Path> getAssetsPath(
83-
TargetNode<AndroidResourceDescriptionArg> targetNode) {
84-
return Optional.empty();
85-
}
86-
87-
@Override
88-
public Optional<Path> getAnnotationOutputPath(
89-
TargetNode<? extends JvmLibraryArg> targetNode) {
90-
return Optional.empty();
91-
}
92-
93-
@Override
94-
public Optional<Path> getKaptAnnotationOutputPath(
95-
TargetNode<? extends JvmLibraryArg> targetNode) {
96-
return Optional.empty();
97-
}
98-
99-
@Override
100-
public Optional<Path> getCompilerOutputPath(
101-
TargetNode<? extends JvmLibraryArg> targetNode) {
102-
return Optional.empty();
103-
}
104-
},
105-
new IjDepsQueryResolver() {
106-
@Override
107-
public ImmutableSortedSet<BuildTarget> getResolvedDeps(TargetNode<?> targetNode) {
108-
return ImmutableSortedSet.of();
109-
}
110-
111-
@Override
112-
public ImmutableSortedSet<BuildTarget> getResolvedProvidedDeps(
113-
TargetNode<?> targetNode) {
114-
return ImmutableSortedSet.of();
115-
}
116-
},
117-
IjTestProjectConfig.create());
43+
44+
private static PythonLibraryModuleRule getPythonLibraryModuleRule(
45+
boolean pythonBaseModuleTransformEnabled) {
46+
return new PythonLibraryModuleRule(
47+
new FakeProjectFilesystem(),
48+
new IjModuleFactoryResolver() {
49+
@Override
50+
public Optional<Path> getDummyRDotJavaPath(TargetNode<?> targetNode) {
51+
return Optional.empty();
52+
}
53+
54+
@Override
55+
public Path getAndroidManifestPath(TargetNode<AndroidBinaryDescriptionArg> targetNode) {
56+
return null;
57+
}
58+
59+
@Override
60+
public Optional<Path> getLibraryAndroidManifestPath(
61+
TargetNode<AndroidLibraryDescription.CoreArg> targetNode) {
62+
return Optional.empty();
63+
}
64+
65+
@Override
66+
public Optional<Path> getResourceAndroidManifestPath(
67+
TargetNode<AndroidResourceDescriptionArg> targetNode) {
68+
return Optional.empty();
69+
}
70+
71+
@Override
72+
public Optional<Path> getProguardConfigPath(
73+
TargetNode<AndroidBinaryDescriptionArg> targetNode) {
74+
return Optional.empty();
75+
}
76+
77+
@Override
78+
public Optional<Path> getAndroidResourcePath(
79+
TargetNode<AndroidResourceDescriptionArg> targetNode) {
80+
return Optional.empty();
81+
}
82+
83+
@Override
84+
public Optional<Path> getAssetsPath(
85+
TargetNode<AndroidResourceDescriptionArg> targetNode) {
86+
return Optional.empty();
87+
}
88+
89+
@Override
90+
public Optional<Path> getAnnotationOutputPath(
91+
TargetNode<? extends JvmLibraryArg> targetNode) {
92+
return Optional.empty();
93+
}
94+
95+
@Override
96+
public Optional<Path> getKaptAnnotationOutputPath(
97+
TargetNode<? extends JvmLibraryArg> targetNode) {
98+
return Optional.empty();
99+
}
100+
101+
@Override
102+
public Optional<Path> getCompilerOutputPath(
103+
TargetNode<? extends JvmLibraryArg> targetNode) {
104+
return Optional.empty();
105+
}
106+
},
107+
new IjDepsQueryResolver() {
108+
@Override
109+
public ImmutableSortedSet<BuildTarget> getResolvedDeps(TargetNode<?> targetNode) {
110+
return ImmutableSortedSet.of();
111+
}
112+
113+
@Override
114+
public ImmutableSortedSet<BuildTarget> getResolvedProvidedDeps(TargetNode<?> targetNode) {
115+
return ImmutableSortedSet.of();
116+
}
117+
},
118+
IjTestProjectConfig.createBuilder()
119+
.setPythonBaseModuleTransformEnabled(pythonBaseModuleTransformEnabled)
120+
.build());
121+
}
122+
123+
private final PythonLibraryModuleRule ruleWithTransformEnabled = getPythonLibraryModuleRule(true);
124+
private final PythonLibraryModuleRule ruleWithTransformDisabled =
125+
getPythonLibraryModuleRule(false);
118126

119127
@Test
120128
public void adjustModulePathWithNoBaseModule() {
121129
TargetNode<PythonLibraryDescriptionArg> targetNode =
122130
PythonLibraryBuilder.createBuilder(BuildTargetFactory.newInstance(TARGET)).build();
123-
assertEquals(MODULE_PATH, rule.adjustModulePath(targetNode, MODULE_PATH));
131+
assertEquals(MODULE_PATH, ruleWithTransformEnabled.adjustModulePath(targetNode, MODULE_PATH));
124132
}
125133

126134
@Test
@@ -129,7 +137,7 @@ public void adjustModulePathWithEmptyBaseModule() {
129137
PythonLibraryBuilder.createBuilder(BuildTargetFactory.newInstance(TARGET))
130138
.setBaseModule("")
131139
.build();
132-
assertEquals(MODULE_PATH, rule.adjustModulePath(targetNode, MODULE_PATH));
140+
assertEquals(MODULE_PATH, ruleWithTransformEnabled.adjustModulePath(targetNode, MODULE_PATH));
133141
}
134142

135143
@Test
@@ -138,7 +146,8 @@ public void adjustModulePathWithValidBaseModule() {
138146
PythonLibraryBuilder.createBuilder(BuildTargetFactory.newInstance(TARGET))
139147
.setBaseModule("bar.baz")
140148
.build();
141-
assertEquals(Paths.get("foo"), rule.adjustModulePath(targetNode, MODULE_PATH));
149+
assertEquals(
150+
Paths.get("foo"), ruleWithTransformEnabled.adjustModulePath(targetNode, MODULE_PATH));
142151
}
143152

144153
@Test
@@ -147,7 +156,7 @@ public void adjustModulePathWithInvalidBaseModule() {
147156
PythonLibraryBuilder.createBuilder(BuildTargetFactory.newInstance(TARGET))
148157
.setBaseModule("bar.baz1")
149158
.build();
150-
assertEquals(MODULE_PATH, rule.adjustModulePath(targetNode, MODULE_PATH));
159+
assertEquals(MODULE_PATH, ruleWithTransformEnabled.adjustModulePath(targetNode, MODULE_PATH));
151160
}
152161

153162
@Test
@@ -156,6 +165,15 @@ public void adjustModulePathWithNullResult() {
156165
PythonLibraryBuilder.createBuilder(BuildTargetFactory.newInstance(TARGET))
157166
.setBaseModule("foo.bar.baz")
158167
.build();
159-
assertEquals(MODULE_PATH, rule.adjustModulePath(targetNode, MODULE_PATH));
168+
assertEquals(MODULE_PATH, ruleWithTransformEnabled.adjustModulePath(targetNode, MODULE_PATH));
169+
}
170+
171+
@Test
172+
public void adjustModulePathWithValidBaseModuleAndTransformDisabled() {
173+
TargetNode<PythonLibraryDescriptionArg> targetNode =
174+
PythonLibraryBuilder.createBuilder(BuildTargetFactory.newInstance(TARGET))
175+
.setBaseModule("bar.baz")
176+
.build();
177+
assertEquals(MODULE_PATH, ruleWithTransformDisabled.adjustModulePath(targetNode, MODULE_PATH));
160178
}
161179
}

0 commit comments

Comments
 (0)