codemodels-java 0.2.0-java → 0.2.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/codemodels-java.gemspec +7 -1
- data/lib/codemodels/java/metamodel.rb +3 -27
- data/lib/codemodels/java/parser.rb +96 -57
- data/test/test_correspondences.rb +6 -6
- metadata +18 -24
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b06ac029279927c74e5175f4f4b668a5fdb8134a
|
4
|
+
data.tar.gz: 0bab5abbae5b8f7a930485abbcd98f780a66fd7a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f2d88bbe3cdf97388ce6fff2cb470a56f8b76ec1027e2a5218888b2bb92e1f826882d16a7766adf7cf34b2b9fcc4bb3e22ff96af442eb15445557df1f594afae
|
7
|
+
data.tar.gz: 4574567f38bdd8d620e7802b16eb5239bd2f13224d031d5c3df008038c3454bd86a4ade0c7a6ba3a4f50ac24d5c6e5a951051fdb4607c897b0c1eca7ca4202a0
|
data/codemodels-java.gemspec
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'codemodels/java/version'
|
5
|
+
|
1
6
|
Gem::Specification.new do |s|
|
2
7
|
s.platform = 'java'
|
3
8
|
s.name = 'codemodels-java'
|
4
|
-
s.version =
|
9
|
+
s.version = CodeModels::Java::VERSION
|
5
10
|
s.date = '2013-09-11'
|
6
11
|
s.summary = "Plugin of codemodels to build models from Ruby code."
|
7
12
|
s.description = "Plugin of codemodels to build models from Ruby code. See http://github.com/ftomassetti/codemodels."
|
@@ -15,6 +20,7 @@ Gem::Specification.new do |s|
|
|
15
20
|
s.require_paths = ["lib"] + Dir['./lib/jars/*.jar']
|
16
21
|
|
17
22
|
s.add_runtime_dependency 'codemodels'
|
23
|
+
s.add_runtime_dependency 'codemodels-javaparserwrapper'
|
18
24
|
s.add_runtime_dependency 'json'
|
19
25
|
|
20
26
|
s.add_development_dependency "bundler", "~> 1.3"
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'rgen/metamodel_builder'
|
2
2
|
require 'java'
|
3
3
|
require 'codemodels'
|
4
|
+
require 'codemodels/javaparserwrapper'
|
4
5
|
|
5
6
|
module CodeModels
|
6
7
|
module Java
|
7
8
|
|
8
|
-
class JavaNode <
|
9
|
+
class JavaNode < CodeModelsAstNode
|
9
10
|
end
|
10
11
|
|
11
12
|
JavaString = ::Java::JavaClass.for_name("java.lang.String")
|
@@ -34,7 +35,7 @@ module Java
|
|
34
35
|
c = Class.new(super_class)
|
35
36
|
raise "Already mapped! #{ast_name}" if MappedAstClasses[java_class]
|
36
37
|
MappedAstClasses[java_class] = c
|
37
|
-
Java.const_set simple_java_class_name(ast_class), c
|
38
|
+
Java.const_set CodeModels::Javaparserwrapper::Utils.simple_java_class_name(ast_class), c
|
38
39
|
end
|
39
40
|
|
40
41
|
# then add all the properties and attributes
|
@@ -81,25 +82,6 @@ module Java
|
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
84
|
-
def self.get_corresponding_metaclass(node)
|
85
|
-
node_class = node.class
|
86
|
-
name = simple_java_class_name(node_class)
|
87
|
-
name = "#{(node.operator.name).proper_capitalize}BinaryExpr" if name=='BinaryExpr'
|
88
|
-
#puts "node.class: #{node.class}"
|
89
|
-
if node.class.to_s=='Java::JapaParserAstBody::MethodDeclaration'
|
90
|
-
if node.parent.class.to_s=='Java::JapaParserAstExpr::ObjectCreationExpr'
|
91
|
-
# ObjectCreationExpr has not interface? but it is always a method definition
|
92
|
-
name = 'ClassMethodDeclaration'
|
93
|
-
elsif node.parent.class.to_s=='Java::JapaParserAstBody::EnumDeclaration'
|
94
|
-
name = 'ClassMethodDeclaration'
|
95
|
-
elsif node.parent.interface?
|
96
|
-
name = 'InterfaceMethodDeclaration'
|
97
|
-
else
|
98
|
-
name = 'ClassMethodDeclaration'
|
99
|
-
end
|
100
|
-
end
|
101
|
-
return Java.const_get(name)
|
102
|
-
end
|
103
85
|
|
104
86
|
PROP_ADAPTERS = Hash.new {|h,k| h[k] = {} }
|
105
87
|
|
@@ -110,12 +92,6 @@ module Java
|
|
110
92
|
return java_method.name.remove_prefix('is').proper_uncapitalize if java_method.name.start_with?('is')
|
111
93
|
end
|
112
94
|
|
113
|
-
def self.simple_java_class_name(java_class)
|
114
|
-
name = java_class.name
|
115
|
-
if (i = (r = name).rindex(':')) then r[0..i] = '' end
|
116
|
-
r
|
117
|
-
end
|
118
|
-
|
119
95
|
def self.get_generic_param(generic_str)
|
120
96
|
return generic_str.remove_prefix('public java.util.List<') if generic_str.start_with?('public java.util.List<')
|
121
97
|
return generic_str.remove_prefix('public final java.util.List<') if generic_str.start_with?('public final java.util.List<')
|
@@ -1,82 +1,121 @@
|
|
1
1
|
require 'codemodels'
|
2
|
+
require 'codemodels/javaparserwrapper'
|
2
3
|
|
3
4
|
module CodeModels
|
4
5
|
module Java
|
5
6
|
|
6
|
-
class
|
7
|
-
|
8
|
-
|
7
|
+
class Parser < CodeModels::Javaparserwrapper::ParserJavaWrapper
|
8
|
+
|
9
|
+
class MyBasicTransformationFactory < CodeModels::Javaparserwrapper::BasicTransformationFactory
|
10
|
+
|
11
|
+
def get_corresponding_class(node)
|
12
|
+
node_class = node.class
|
13
|
+
name = CodeModels::Javaparserwrapper::Utils.simple_java_class_name(node_class)
|
14
|
+
name = "#{(node.operator.name).proper_capitalize}BinaryExpr" if name=='BinaryExpr'
|
15
|
+
if node.class.to_s=='Java::JapaParserAstBody::MethodDeclaration'
|
16
|
+
if node.parent.class.to_s=='Java::JapaParserAstExpr::ObjectCreationExpr'
|
17
|
+
name = 'ClassMethodDeclaration'
|
18
|
+
elsif node.parent.class.to_s=='Java::JapaParserAstBody::EnumDeclaration'
|
19
|
+
name = 'ClassMethodDeclaration'
|
20
|
+
elsif node.parent.interface?
|
21
|
+
name = 'InterfaceMethodDeclaration'
|
22
|
+
else
|
23
|
+
name = 'ClassMethodDeclaration'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
return Java.const_get(name)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
9
30
|
|
10
|
-
java_import 'japa.parser.JavaParser'
|
11
|
-
java_import 'java.io.FileInputStream'
|
12
|
-
java_import 'java.io.ByteArrayInputStream'
|
31
|
+
java_import 'japa.parser.JavaParser'
|
32
|
+
java_import 'java.io.FileInputStream'
|
33
|
+
java_import 'java.io.ByteArrayInputStream'
|
13
34
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
children.each_with_index do |c,i|
|
19
|
-
return i if c==node
|
20
|
-
end
|
21
|
-
raise "Not found"
|
22
|
-
else
|
23
|
-
raise "Not found" unless children==node
|
24
|
-
0
|
35
|
+
def initialize()
|
36
|
+
super
|
37
|
+
@transformer.factory = MyBasicTransformationFactory.new
|
38
|
+
@transformer.factory.target_module = CodeModels::Java
|
25
39
|
end
|
26
|
-
end
|
27
40
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
41
|
+
def containment_pos(node)
|
42
|
+
container = node.eContainer
|
43
|
+
children = node.eContainer.send(node.eContainingFeature)
|
44
|
+
if children.respond_to?(:each)
|
45
|
+
children.each_with_index do |c,i|
|
46
|
+
return i if c==node
|
47
|
+
end
|
48
|
+
raise "Not found"
|
49
|
+
else
|
50
|
+
raise "Not found" unless children==node
|
51
|
+
0
|
52
|
+
end
|
40
53
|
end
|
41
|
-
end
|
42
54
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
55
|
+
# node tree contains the original
|
56
|
+
def corresponding_node(model_element,node_tree)
|
57
|
+
return node_tree unless model_element.eContainer
|
58
|
+
corresponding_parent_node = corresponding_node(model_element.eContainer,node_tree)
|
59
|
+
containment_pos = containment_pos(model_element)
|
60
|
+
containing_feat = model_element.eContainingFeature
|
61
|
+
|
62
|
+
children = corresponding_parent_node.send(containing_feat)
|
63
|
+
if children.respond_to?(:each)
|
64
|
+
children[containment_pos]
|
65
|
+
else
|
66
|
+
children
|
67
|
+
end
|
68
|
+
end
|
49
69
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
70
|
+
def node_tree_from_code(code)
|
71
|
+
sis = ByteArrayInputStream.new(code.to_java_bytes)
|
72
|
+
node_tree = JavaParser.parse(sis)
|
73
|
+
sis.close
|
74
|
+
node_tree
|
75
|
+
end
|
56
76
|
|
57
|
-
def
|
58
|
-
|
59
|
-
|
77
|
+
def corresponding_node_from_code(model_element,code)
|
78
|
+
sis = ByteArrayInputStream.new(code.to_java_bytes)
|
79
|
+
node_tree = JavaParser.parse(sis)
|
80
|
+
sis.close
|
81
|
+
corresponding_node(model_element,node_tree)
|
82
|
+
end
|
60
83
|
|
61
|
-
|
84
|
+
def parse_code(code)
|
85
|
+
node_to_model(node_tree_from_code(code))
|
86
|
+
end
|
62
87
|
|
63
|
-
def
|
64
|
-
|
88
|
+
def get_corresponding_metaclass(node)
|
89
|
+
node_class = node.class
|
90
|
+
name = CodeModels::Javaparserwrapper::Utils.simple_java_class_name(node_class)
|
91
|
+
name = "#{(node.operator.name).proper_capitalize}BinaryExpr" if name=='BinaryExpr'
|
92
|
+
if node.class.to_s=='Java::JapaParserAstBody::MethodDeclaration'
|
93
|
+
if node.parent.class.to_s=='Java::JapaParserAstExpr::ObjectCreationExpr'
|
94
|
+
name = 'ClassMethodDeclaration'
|
95
|
+
elsif node.parent.class.to_s=='Java::JapaParserAstBody::EnumDeclaration'
|
96
|
+
name = 'ClassMethodDeclaration'
|
97
|
+
elsif node.parent.interface?
|
98
|
+
name = 'InterfaceMethodDeclaration'
|
99
|
+
else
|
100
|
+
name = 'ClassMethodDeclaration'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
return Java.const_get(name)
|
65
104
|
end
|
66
105
|
|
67
|
-
|
106
|
+
private
|
68
107
|
|
69
|
-
|
108
|
+
def adapter_specific_class(model_class,ref)
|
109
|
+
return nil unless CodeModels::Java::PROP_ADAPTERS[model_class]
|
110
|
+
CodeModels::Java::PROP_ADAPTERS[model_class][ref.name]
|
111
|
+
end
|
70
112
|
|
71
|
-
def self.parse_file(path)
|
72
|
-
DefaultParser.parse_file(path)
|
73
113
|
end
|
74
114
|
|
75
|
-
|
115
|
+
DefaultParser = Parser.new
|
76
116
|
|
77
|
-
def self.
|
78
|
-
|
79
|
-
CodeModels::Java::PROP_ADAPTERS[model_class][ref.name]
|
117
|
+
def self.parse_code(code)
|
118
|
+
DefaultParser.parse_code(code)
|
80
119
|
end
|
81
120
|
|
82
121
|
end
|
@@ -10,22 +10,22 @@ class TestCorrespondences < Test::Unit::TestCase
|
|
10
10
|
|
11
11
|
def test_correspondance_of_field
|
12
12
|
code = "class A extends B { int fieldB; int getB(){ return fieldB; } }"
|
13
|
-
nt = J.node_tree_from_code(code)
|
13
|
+
nt = J::DefaultParser.node_tree_from_code(code)
|
14
14
|
mt = J.parse_code(code)
|
15
15
|
model_field = mt.types[0].members[0]
|
16
16
|
node_field = nt.types[0].members[0]
|
17
|
-
assert_equal node_field, J.corresponding_node(model_field,nt)
|
18
|
-
assert_equal "int fieldB;", J.corresponding_node(model_field,nt).to_s
|
17
|
+
assert_equal node_field, J::DefaultParser.corresponding_node(model_field,nt)
|
18
|
+
assert_equal "int fieldB;", J::DefaultParser.corresponding_node(model_field,nt).to_s
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_corresponding_node_from_code
|
22
22
|
code = "class A extends B { int fieldB; int getB(){ return fieldB; } }"
|
23
|
-
nt = J.node_tree_from_code(code)
|
23
|
+
nt = J::DefaultParser.node_tree_from_code(code)
|
24
24
|
mt = J.parse_code(code)
|
25
25
|
model_field = mt.types[0].members[0]
|
26
26
|
node_field = nt.types[0].members[0]
|
27
|
-
assert_equal node_field, J.corresponding_node_from_code(model_field,code)
|
28
|
-
assert_equal "int fieldB;", J.corresponding_node_from_code(model_field,code).to_s
|
27
|
+
assert_equal node_field, J::DefaultParser.corresponding_node_from_code(model_field,code)
|
28
|
+
assert_equal "int fieldB;", J::DefaultParser.corresponding_node_from_code(model_field,code).to_s
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codemodels-java
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.2.0
|
4
|
+
version: 0.2.1
|
6
5
|
platform: java
|
7
6
|
authors:
|
8
7
|
- Federico Tomassetti
|
@@ -18,13 +17,25 @@ dependencies:
|
|
18
17
|
- - '>='
|
19
18
|
- !ruby/object:Gem::Version
|
20
19
|
version: '0'
|
21
|
-
none: false
|
22
20
|
requirement: !ruby/object:Gem::Requirement
|
23
21
|
requirements:
|
24
22
|
- - '>='
|
25
23
|
- !ruby/object:Gem::Version
|
26
24
|
version: '0'
|
27
|
-
|
25
|
+
prerelease: false
|
26
|
+
type: :runtime
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: codemodels-javaparserwrapper
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
28
39
|
prerelease: false
|
29
40
|
type: :runtime
|
30
41
|
- !ruby/object:Gem::Dependency
|
@@ -34,13 +45,11 @@ dependencies:
|
|
34
45
|
- - '>='
|
35
46
|
- !ruby/object:Gem::Version
|
36
47
|
version: '0'
|
37
|
-
none: false
|
38
48
|
requirement: !ruby/object:Gem::Requirement
|
39
49
|
requirements:
|
40
50
|
- - '>='
|
41
51
|
- !ruby/object:Gem::Version
|
42
52
|
version: '0'
|
43
|
-
none: false
|
44
53
|
prerelease: false
|
45
54
|
type: :runtime
|
46
55
|
- !ruby/object:Gem::Dependency
|
@@ -50,13 +59,11 @@ dependencies:
|
|
50
59
|
- - ~>
|
51
60
|
- !ruby/object:Gem::Version
|
52
61
|
version: '1.3'
|
53
|
-
none: false
|
54
62
|
requirement: !ruby/object:Gem::Requirement
|
55
63
|
requirements:
|
56
64
|
- - ~>
|
57
65
|
- !ruby/object:Gem::Version
|
58
66
|
version: '1.3'
|
59
|
-
none: false
|
60
67
|
prerelease: false
|
61
68
|
type: :development
|
62
69
|
- !ruby/object:Gem::Dependency
|
@@ -66,13 +73,11 @@ dependencies:
|
|
66
73
|
- - '>='
|
67
74
|
- !ruby/object:Gem::Version
|
68
75
|
version: '0'
|
69
|
-
none: false
|
70
76
|
requirement: !ruby/object:Gem::Requirement
|
71
77
|
requirements:
|
72
78
|
- - '>='
|
73
79
|
- !ruby/object:Gem::Version
|
74
80
|
version: '0'
|
75
|
-
none: false
|
76
81
|
prerelease: false
|
77
82
|
type: :development
|
78
83
|
- !ruby/object:Gem::Dependency
|
@@ -82,13 +87,11 @@ dependencies:
|
|
82
87
|
- - '>='
|
83
88
|
- !ruby/object:Gem::Version
|
84
89
|
version: '0'
|
85
|
-
none: false
|
86
90
|
requirement: !ruby/object:Gem::Requirement
|
87
91
|
requirements:
|
88
92
|
- - '>='
|
89
93
|
- !ruby/object:Gem::Version
|
90
94
|
version: '0'
|
91
|
-
none: false
|
92
95
|
prerelease: false
|
93
96
|
type: :development
|
94
97
|
- !ruby/object:Gem::Dependency
|
@@ -98,13 +101,11 @@ dependencies:
|
|
98
101
|
- - '>='
|
99
102
|
- !ruby/object:Gem::Version
|
100
103
|
version: '0'
|
101
|
-
none: false
|
102
104
|
requirement: !ruby/object:Gem::Requirement
|
103
105
|
requirements:
|
104
106
|
- - '>='
|
105
107
|
- !ruby/object:Gem::Version
|
106
108
|
version: '0'
|
107
|
-
none: false
|
108
109
|
prerelease: false
|
109
110
|
type: :development
|
110
111
|
description: Plugin of codemodels to build models from Ruby code. See http://github.com/ftomassetti/codemodels.
|
@@ -143,6 +144,7 @@ files:
|
|
143
144
|
homepage: https://github.com/ftomassetti/java-lightmodels
|
144
145
|
licenses:
|
145
146
|
- APACHE2
|
147
|
+
metadata: {}
|
146
148
|
post_install_message:
|
147
149
|
rdoc_options: []
|
148
150
|
require_paths:
|
@@ -152,25 +154,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
154
|
requirements:
|
153
155
|
- - '>='
|
154
156
|
- !ruby/object:Gem::Version
|
155
|
-
segments:
|
156
|
-
- 0
|
157
|
-
hash: 2
|
158
157
|
version: '0'
|
159
|
-
none: false
|
160
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
159
|
requirements:
|
162
160
|
- - '>='
|
163
161
|
- !ruby/object:Gem::Version
|
164
|
-
segments:
|
165
|
-
- 0
|
166
|
-
hash: 2
|
167
162
|
version: '0'
|
168
|
-
none: false
|
169
163
|
requirements: []
|
170
164
|
rubyforge_project:
|
171
|
-
rubygems_version:
|
165
|
+
rubygems_version: 2.2.0
|
172
166
|
signing_key:
|
173
|
-
specification_version:
|
167
|
+
specification_version: 4
|
174
168
|
summary: Plugin of codemodels to build models from Ruby code.
|
175
169
|
test_files:
|
176
170
|
- test/data/ActionButtonsColumnTag.java
|