summaryrefslogtreecommitdiff
path: root/compiler/src/main/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/src/main/java/android')
-rw-r--r--compiler/src/main/java/android/databinding/annotationprocessor/ProcessBindable.java34
-rw-r--r--compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java46
-rw-r--r--compiler/src/main/java/android/databinding/annotationprocessor/ProcessExpressions.java20
-rw-r--r--compiler/src/main/java/android/databinding/tool/CompilerChef.java5
-rw-r--r--compiler/src/main/java/android/databinding/tool/LayoutBinder.java1
5 files changed, 63 insertions, 43 deletions
diff --git a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessBindable.java b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessBindable.java
index 44cdb4f1..3066bbdc 100644
--- a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessBindable.java
+++ b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessBindable.java
@@ -22,10 +22,10 @@ import android.databinding.tool.CompilerChef.BindableHolder;
import android.databinding.tool.util.GenerationalClassUtil;
import android.databinding.tool.util.L;
import android.databinding.tool.util.Preconditions;
+import android.databinding.tool.writer.BRWriter;
+import android.databinding.tool.writer.JavaFileWriter;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -117,34 +117,18 @@ public class ProcessBindable extends ProcessDataBinding.ProcessingStep implement
for (Intermediate intermediate : previousIntermediates) {
intermediate.captureProperties(properties);
}
- writeBRClass(useFinalFields, pkg, properties);
+ final JavaFileWriter writer = getWriter();
+ BRWriter brWriter = new BRWriter(properties, useFinalFields);
+ writer.writeToFile(pkg + ".BR", brWriter.write(pkg));
+ //writeBRClass(useFinalFields, pkg, properties);
if (useFinalFields) {
// generate BR for all previous packages
for (Intermediate intermediate : previousIntermediates) {
- writeBRClass(true, intermediate.getPackage(),
- properties);
+ writer.writeToFile(intermediate.getPackage() + ".BR",
+ brWriter.write(intermediate.getPackage()));
}
}
- }
-
- private void writeBRClass(boolean useFinalFields, String pkg, HashSet<String> properties) {
- ArrayList<String> sortedProperties = new ArrayList<String>();
- sortedProperties.addAll(properties);
- Collections.sort(sortedProperties);
- StringBuilder out = new StringBuilder();
- String modifier = "public static " + (useFinalFields ? "final" : "") + " int ";
- out.append("package " + pkg + ";\n\n" +
- "public class BR {\n" +
- " " + modifier + "_all = 0;\n"
- );
- int id = 0;
- for (String property : sortedProperties) {
- id++;
- out.append(" " + modifier + property + " = " + id + ";\n");
- }
- out.append("}\n");
-
- getWriter().writeToFile(pkg + ".BR", out.toString() );
+ mCallback.onBrWriterReady(brWriter);
}
private String getPropertyName(Element element) {
diff --git a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
index 944cc20a..bf88435c 100644
--- a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
+++ b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessDataBinding.java
@@ -16,9 +16,14 @@
package android.databinding.annotationprocessor;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
import android.databinding.BindingBuildInfo;
+import android.databinding.tool.CompilerChef;
import android.databinding.tool.reflection.ModelAnalyzer;
+import android.databinding.tool.util.Preconditions;
import android.databinding.tool.writer.AnnotationJavaFileWriter;
+import android.databinding.tool.writer.BRWriter;
import android.databinding.tool.writer.JavaFileWriter;
import java.util.Arrays;
@@ -69,15 +74,46 @@ public class ProcessDataBinding extends AbstractProcessor {
}
private void initProcessingSteps() {
- ProcessBindable processBindable = new ProcessBindable();
+ final ProcessBindable processBindable = new ProcessBindable();
mProcessingSteps = Arrays.asList(
new ProcessMethodAdapters(),
- new ProcessExpressions(processBindable),
+ new ProcessExpressions(),
processBindable
);
+ Callback dataBinderWriterCallback = new Callback() {
+ CompilerChef mChef;
+ BRWriter mBRWriter;
+ boolean mLibraryProject;
+ int mMinSdk;
+
+ @Override
+ public void onChefReady(CompilerChef chef, boolean libraryProject, int minSdk) {
+ Preconditions.checkNull(mChef, "Cannot set compiler chef twice");
+ chef.addBRVariables(processBindable);
+ mChef = chef;
+ mLibraryProject = libraryProject;
+ mMinSdk = minSdk;
+ considerWritingMapper();
+ }
+
+ private void considerWritingMapper() {
+ if (mLibraryProject || mChef == null || mBRWriter == null) {
+ return;
+ }
+ mChef.writeDataBinderMapper(mMinSdk, mBRWriter);
+ }
+
+ @Override
+ public void onBrWriterReady(BRWriter brWriter) {
+ Preconditions.checkNull(mBRWriter, "Cannot set br writer twice");
+ mBRWriter = brWriter;
+ considerWritingMapper();
+ }
+ };
AnnotationJavaFileWriter javaFileWriter = new AnnotationJavaFileWriter(processingEnv);
for (ProcessingStep step : mProcessingSteps) {
step.mJavaFileWriter = javaFileWriter;
+ step.mCallback = dataBinderWriterCallback;
}
}
@@ -93,6 +129,7 @@ public class ProcessDataBinding extends AbstractProcessor {
public abstract static class ProcessingStep {
private boolean mDone;
private JavaFileWriter mJavaFileWriter;
+ protected Callback mCallback;
protected JavaFileWriter getWriter() {
return mJavaFileWriter;
@@ -125,4 +162,9 @@ public class ProcessDataBinding extends AbstractProcessor {
ProcessingEnvironment processingEnvironment,
BindingBuildInfo buildInfo);
}
+
+ interface Callback {
+ void onChefReady(CompilerChef chef, boolean libraryProject, int minSdk);
+ void onBrWriterReady(BRWriter brWriter);
+ }
}
diff --git a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessExpressions.java b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessExpressions.java
index a1866348..f948831a 100644
--- a/compiler/src/main/java/android/databinding/annotationprocessor/ProcessExpressions.java
+++ b/compiler/src/main/java/android/databinding/annotationprocessor/ProcessExpressions.java
@@ -26,6 +26,7 @@ import android.databinding.tool.reflection.SdkUtil;
import android.databinding.tool.store.ResourceBundle;
import android.databinding.tool.util.GenerationalClassUtil;
import android.databinding.tool.util.L;
+import android.databinding.tool.writer.BRWriter;
import java.io.File;
import java.io.FilenameFilter;
@@ -47,13 +48,9 @@ public class ProcessExpressions extends ProcessDataBinding.ProcessingStep {
private static final String LAYOUT_INFO_FILE_SUFFIX = "-layoutinfo.bin";
- private final ProcessBindable mProcessBindable;
-
- public ProcessExpressions(ProcessBindable processBindable) {
- mProcessBindable = processBindable;
+ public ProcessExpressions() {
}
-
@Override
public boolean onHandleStep(RoundEnvironment roundEnvironment,
ProcessingEnvironment processingEnvironment, BindingBuildInfo buildInfo) {
@@ -123,11 +120,10 @@ public class ProcessExpressions extends ProcessDataBinding.ProcessingStep {
}
private void writeResourceBundle(ResourceBundle resourceBundle, boolean forLibraryModule,
- int minSdk, String exportClassNamesTo)
+ final int minSdk, String exportClassNamesTo)
throws JAXBException {
- CompilerChef compilerChef = CompilerChef.createChef(resourceBundle, getWriter());
+ final CompilerChef compilerChef = CompilerChef.createChef(resourceBundle, getWriter());
if (compilerChef.hasAnythingToGenerate()) {
- compilerChef.addBRVariables(mProcessBindable);
compilerChef.writeViewBinderInterfaces(forLibraryModule);
if (!forLibraryModule) {
compilerChef.writeViewBinders(minSdk);
@@ -139,17 +135,15 @@ public class ProcessExpressions extends ProcessDataBinding.ProcessingStep {
if (forLibraryModule) {
Set<String> classNames = compilerChef.getWrittenClassNames();
String out = StringUtils.join(classNames, System.getProperty("line.separator"));
-
L.d("Writing list of classes to %s . \nList:%s", exportClassNamesTo, out);
try {
- FileUtils.write(new File(exportClassNamesTo),
- out);
+ //noinspection ConstantConditions
+ FileUtils.write(new File(exportClassNamesTo), out);
} catch (IOException e) {
L.e(e, "Cannot create list of written classes");
}
- } else {
- compilerChef.writeDbrFile(minSdk);
}
+ mCallback.onChefReady(compilerChef, forLibraryModule, minSdk);
}
public static interface Intermediate extends Serializable {
diff --git a/compiler/src/main/java/android/databinding/tool/CompilerChef.java b/compiler/src/main/java/android/databinding/tool/CompilerChef.java
index cb307e56..10cc3d43 100644
--- a/compiler/src/main/java/android/databinding/tool/CompilerChef.java
+++ b/compiler/src/main/java/android/databinding/tool/CompilerChef.java
@@ -15,6 +15,7 @@ package android.databinding.tool;
import android.databinding.tool.store.ResourceBundle;
import android.databinding.tool.util.L;
+import android.databinding.tool.writer.BRWriter;
import android.databinding.tool.writer.DataBinderWriter;
import android.databinding.tool.writer.JavaFileWriter;
@@ -59,12 +60,12 @@ public class CompilerChef {
return mResourceBundle != null && mResourceBundle.getLayoutBundles().size() > 0;
}
- public void writeDbrFile(int minSdk) {
+ public void writeDataBinderMapper(int minSdk, BRWriter brWriter) {
ensureDataBinder();
final String pkg = "android.databinding";
DataBinderWriter dbr = new DataBinderWriter(pkg, mResourceBundle.getAppPackage(),
"DataBinderMapper", mDataBinder.getLayoutBinders(), minSdk);
- mFileWriter.writeToFile(pkg + "." + dbr.getClassName(), dbr.write());
+ mFileWriter.writeToFile(pkg + "." + dbr.getClassName(), dbr.write(brWriter));
}
/**
diff --git a/compiler/src/main/java/android/databinding/tool/LayoutBinder.java b/compiler/src/main/java/android/databinding/tool/LayoutBinder.java
index 79d6bfc4..c9efe8f4 100644
--- a/compiler/src/main/java/android/databinding/tool/LayoutBinder.java
+++ b/compiler/src/main/java/android/databinding/tool/LayoutBinder.java
@@ -269,7 +269,6 @@ public class LayoutBinder implements ResolveListenersCallback {
return mWriter.writeBaseClass(forLibrary);
}
-
public String writeViewBinder(int minSdk) {
mExprModel.seal(this);
ensureWriter();