Skip to content

Commit

Permalink
Change HeaderMappingPreProcessor to correctly output all header mappi…
Browse files Browse the repository at this point in the history
…ngs, deduplicate logic, and cleanup tests.

	Change on 2015/03/10 by mthvedt <mthvedt@google.com>
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=88255681
  • Loading branch information
mthvedt authored and kstanger committed Mar 18, 2015
1 parent 7903b36 commit 488b328
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 44 deletions.
Expand Up @@ -14,13 +14,11 @@


package com.google.devtools.j2objc; package com.google.devtools.j2objc;


import com.google.devtools.j2objc.file.InputFile; import com.google.devtools.j2objc.ast.AbstractTypeDeclaration;
import com.google.devtools.j2objc.ast.CompilationUnit;
import com.google.devtools.j2objc.gen.GenerationUnit; import com.google.devtools.j2objc.gen.GenerationUnit;
import com.google.devtools.j2objc.util.JdtParser; import com.google.devtools.j2objc.util.JdtParser;


import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.CompilationUnit;

/** /**
* Reads source files and extracts header mappings between translated header files and associated * Reads source files and extracts header mappings between translated header files and associated
* Java type declarations. * Java type declarations.
Expand All @@ -39,33 +37,12 @@ public HeaderMappingPreProcessor(JdtParser parser) {
} }


@Override @Override
protected void processGenerationUnit(GenerationUnit generationUnit) { protected void processCompiledGenerationUnit(GenerationUnit generationUnit) {
if (generationUnit.getOutputPath() != null) { for (CompilationUnit compilationUnit : generationUnit.getCompilationUnits()) {
// We only care about GenerationUnits with non-default output paths. for (AbstractTypeDeclaration decl : compilationUnit.getTypes()) {
super.processGenerationUnit(generationUnit); String name = decl.getTypeBinding().getQualifiedName();
} Options.getHeaderMappings().put(name, generationUnit.getOutputPath() + ".h");
} }

@Override
protected void processCompilationUnit(
GenerationUnit genUnit, CompilationUnit unit, InputFile file) {
for (Object type : unit.types()) {
Options.getHeaderMappings().put(
getTypeQualifiedName(type, unit), genUnit.getOutputPath() + ".h");
}
}

@Override
protected void processCompiledGenerationUnit(GenerationUnit unit) {
throw new UnsupportedOperationException(); // Should never reach here
}

private String getTypeQualifiedName(Object type, CompilationUnit unit) {
AbstractTypeDeclaration typeDeclaration = (AbstractTypeDeclaration) type;
String packageName = unit.getPackage().getName().getFullyQualifiedName();
if (!packageName.isEmpty()) {
packageName += ".";
} }
return packageName + typeDeclaration.getName().getIdentifier();
} }
} }
Expand Up @@ -52,6 +52,7 @@
import java.net.URLDecoder; import java.net.URLDecoder;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;


Expand Down Expand Up @@ -330,12 +331,24 @@ protected void loadSourceFileHeaderMappings(String... fileNames) {
if (Options.shouldPreProcess()) { if (Options.shouldPreProcess()) {
GenerationBatch batch = new GenerationBatch(); GenerationBatch batch = new GenerationBatch();
for (String fileName : fileNames) { for (String fileName : fileNames) {
batch.addSource(new RegularInputFile(tempDir.getPath() + "/" + fileName)); batch.addSource(new RegularInputFile(tempDir.getPath() + "/" + fileName, fileName));
} }
new HeaderMappingPreProcessor(parser).processBatch(batch); new HeaderMappingPreProcessor(parser).processBatch(batch);
} }
} }


protected Map<String,String> writeAndReloadHeaderMappings() throws IOException {
File outputHeaderMappingFile = new File(tempDir.getPath() + "/mappings.j2objc");
outputHeaderMappingFile.deleteOnExit();
Options.setOutputHeaderMappingFile(outputHeaderMappingFile);
TranslationProcessor.printHeaderMappings();
Options.getHeaderMappings().clear();
Options.setOutputHeaderMappingFile(null);
Options.setHeaderMappingFiles(Lists.newArrayList(outputHeaderMappingFile.getAbsolutePath()));
loadHeaderMappings();
return Options.getHeaderMappings();
}

protected void addSourceFile(String source, String fileName) throws IOException { protected void addSourceFile(String source, String fileName) throws IOException {
File file = new File(tempDir, fileName); File file = new File(tempDir, fileName);
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
Expand Down
Expand Up @@ -165,13 +165,13 @@ public void testOutputHeaderFileMapping() throws IOException {


String translation = translateSourceFile(getTranslatedFile("unit/test/AnotherDummy.java"), String translation = translateSourceFile(getTranslatedFile("unit/test/AnotherDummy.java"),
"AnotherDummy", "AnotherDummy.h"); "AnotherDummy", "AnotherDummy.h");
assertTranslation(translation, "#include \"" + getTempDir() + "/unit/test/Dummy.h\""); assertTranslation(translation, "#include \"unit/test/Dummy.h\"");


Map<String, String> outputMapping = Options.getHeaderMappings(); Map<String, String> outputMapping = writeAndReloadHeaderMappings();
assertEquals(getTempDir() + "/unit/test/AnotherDummy.h", assertEquals(outputMapping.get("unit.test.Dummy"), "unit/test/Dummy.h");
outputMapping.get("unit.test.AnotherDummy")); assertEquals(outputMapping.get("unit.test.AnotherDummy"), "unit/test/AnotherDummy.h");
assertEquals(getTempDir() + "/unit/test/Dummy.h", outputMapping.get("unit.test.Dummy")); assertEquals(outputMapping.get("unit.mapping.custom.Test"), "my/mapping/custom/Test.h");
assertEquals("my/mapping/custom/Test.h", outputMapping.get("unit.mapping.custom.Test")); assertEquals(outputMapping.get("unit.mapping.custom.AnotherTest"), "my/mapping/custom/Test.h");
} }


public void testOutputHeaderFileMappingWithMultipleClassesInOneHeader() throws IOException { public void testOutputHeaderFileMappingWithMultipleClassesInOneHeader() throws IOException {
Expand Down Expand Up @@ -205,12 +205,11 @@ public void testOutputHeaderFileMappingWithMultipleClassesInOneHeader() throws I
assertTranslation(translationForDummy, "#include \"my/mapping/custom/Test.h\""); assertTranslation(translationForDummy, "#include \"my/mapping/custom/Test.h\"");
assertTranslation(translationForAnotherDummy, "#include \"my/mapping/custom/Test.h\""); assertTranslation(translationForAnotherDummy, "#include \"my/mapping/custom/Test.h\"");


Map<String, String> outputMapping = Options.getHeaderMappings(); Map<String, String> outputMapping = writeAndReloadHeaderMappings();
assertEquals(getTempDir() + "/unit/test/AnotherDummy.h", assertEquals(outputMapping.get("unit.test.Dummy"), "unit/test/Dummy.h");
outputMapping.get("unit.test.AnotherDummy")); assertEquals(outputMapping.get("unit.test.AnotherDummy"), "unit/test/AnotherDummy.h");
assertEquals(getTempDir() + "/unit/test/Dummy.h", outputMapping.get("unit.test.Dummy")); assertEquals(outputMapping.get("unit.mapping.custom.Test"), "my/mapping/custom/Test.h");
assertEquals("my/mapping/custom/Test.h", outputMapping.get("unit.mapping.custom.Test")); assertEquals(outputMapping.get("unit.mapping.custom.AnotherTest"), "my/mapping/custom/Test.h");
assertEquals("my/mapping/custom/Test.h", outputMapping.get("unit.mapping.custom.AnotherTest"));
} }


public void testForwardDeclarationTranslation() throws IOException { public void testForwardDeclarationTranslation() throws IOException {
Expand Down

0 comments on commit 488b328

Please sign in to comment.